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?

¿Fue útil?

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

WiX también utiliza este método

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 );
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top