¿Plantilla de Visual Studio 2008 que contiene un proyecto C # y C ++ / CLI?
-
06-07-2019 - |
Pregunta
Actualmente estoy escribiendo un marco de plugin de Winamp para C # (básicamente, una implementación de C # de la API / SDK de Winamp, así como una plantilla de plugin básica). Debido a que las bibliotecas C # no pueden exportar puntos de entrada de DLL, estoy usando un contenedor C ++ / CLI que básicamente solo carga la biblioteca C #. Me gustaría crear una plantilla de Visual Studio para esto, que crea ambos la biblioteca de complementos de C #, y el contenedor de C ++. Sin embargo, si hago clic en Archivo & # 8594; Exportar plantilla, solo se enumera el proyecto C #.
¿Es posible crear una plantilla multiproyecto que contenga tanto un proyecto C # como un proyecto C ++ / CLI? Si es así, ¿cómo?
Solución
Hace un tiempo encontré la respuesta y olvidé actualizarla correctamente. Se puede usar un archivo .vstemplate para crear una plantilla de C ++ configurando el lenguaje en CSharp como en las plantillas de C # (aún funcionará correctamente).
Aquí hay un ejemplo que he usado: . vstemplate file y todos los demás archivos
Otros consejos
'exportar plantilla' no funciona para proyectos C ++. Si desea plantillas para ellos, debe crearlo usted mismo: vea mi respuesta aquí . Implica un poco de trabajo, pero si usa mucho este tipo de proyectos, el trabajo es un tiempo bien invertido.
edit
Busqué mi código, algo como esto debería ayudarlo a comenzar; Se llama al método onFinish en default.js después de hacer clic en 'Aceptar' en los asistentes predeterminados. ¡Tenga en cuenta que no probé esto!
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 );
}