Visual Studio 2008 template contendo tanto um C # e um projeto de C ++ / CLI?
-
06-07-2019 - |
Pergunta
Atualmente estou escrevendo um quadro de plugins Winamp para C # (basicamente, um C # implementação da API do Winamp / SDK, bem como um barebones plugins template). Porque C # bibliotecas não pode exportar pontos de entrada DLL, eu estou usando um ++ / CLI invólucro que basicamente apenas carrega a biblioteca C # C. Eu gostaria de criar um modelo Visual Studio para isso, o que cria ambos o barebones C # plug-in biblioteca, e do C ++ invólucro. No entanto, se eu clique em Arquivo ? Exportar modelo, apenas o # projeto C está listado.
É possível criar um modelo de multi-projecto com um projeto C # e um projeto ++ / CLI C? Se sim, como?
Solução
Eu encontrei a resposta me um tempo atrás, e se esqueceu de atualizar corretamente este. Um arquivo .vstemplate pode ser usado para criar um modelo de C ++, definindo o idioma a CSharp como em modelos C # (ele continuará a funcionar corretamente).
Aqui está um exemplo que eu usei: . arquivo vstemplate e todos os outros arquivos
usosOutras dicas
'modelo de exportação' não funciona para projetos C ++. Se você quer modelos para eles, você precisa criar-lo você mesmo: ver a minha resposta aqui . Trata-se de algum trabalho, mas se você usar este tipo de projectos muito, o trabalho é tempo bem gasto.
Editar
Eu olhei meu código, algo como isto deve começar; o método onFinish em default.js é chamada depois de clicar em 'Ok' nos assistentes padrão. Note que eu não testar isso!
function onFinish( selProj, selObj )
{
var strProjectPath = wizard.FindSymbol('PROJECT_PATH');
var prjCpp;
var prjCs;
CreateProjects( strProjectPath, prjCpp, prjCs );
//project config here
prjCpp.Object.Save();
prjCs.Object.Save();
selProj = prjCpp;
}
function CreateProjects( path, prjCpp, prjCs )
{
var strProjTemplatePath = wizard.FindSymbol('ABSOLUTE_PATH'); //get template from our template dir
var strProjTemplateCpp = strProjTemplatePath + '\\default.vcproj';
var strProjTemplateCs = strProjTemplatePath + '\\default.csproj';
var Solution = dte.Solution;
if( wizard.FindSymbol( "CLOSE_SOLUTION" ) )
{
Solution.Close();
strSolutionName = wizard.FindSymbol( "VS_SOLUTION_NAME" );
if( strSolutionName.length )
{
var strSolutionPath = strProjectPath.substr( 0, strProjectPath.length - strProjectName.length );
Solution.Create(strSolutionPath, strSolutionName);
}
}
var oTarget = wizard.FindSymbol( "TARGET" );
prjCpp = oTarget.AddFromTemplate( strProjTemplateCpp, strProjectPath, strProjectName + '.vcproj' );
prjCs = oTarget.AddFromTemplate( strProjTemplateCs, strProjectPath, strProjectName + '.csproj' );
Solution.Projects.Add( prjCpp );
Solution.Projects.Add( prjCs );
}