Modèle Visual Studio 2008 contenant à la fois un projet C # et un projet C ++ / CLI?

StackOverflow https://stackoverflow.com/questions/1812016

  •  06-07-2019
  •  | 
  •  

Question

J'écris actuellement un framework de plug-in Winamp pour C # (en gros, une implémentation C # de l'API / SDK Winamp, ainsi qu'un modèle de plug-in barebones). Comme les bibliothèques C # ne peuvent pas exporter les points d’entrée DLL, j’utilise un wrapper C ++ / CLI qui ne fait que charger la bibliothèque C #. J'aimerais créer un modèle Visual Studio pour cela, qui crée les bibliothèques de plug-ins C # barebones, et les enveloppes C ++. Cependant, si je clique sur Fichier ? Exporter un modèle, seul le projet C # est répertorié.

Est-il possible de créer un modèle multi-projet contenant à la fois un projet C # et un projet C ++ / CLI? Si oui, comment?

Était-ce utile?

La solution

J'ai trouvé la réponse moi-même il y a un moment et j'ai oublié de le mettre à jour correctement. Un fichier .vstemplate peut être utilisé pour créer un modèle C ++ en définissant le langage sur CSharp, comme dans les modèles C # (il fonctionnera toujours correctement).

Voici un exemple que j'ai utilisé: . vstemplate fichier et tous les autres fichiers

WiX utilise également cette méthode

Autres conseils

'modèle d'exportation' ne fonctionne pas pour les projets C ++. Si vous voulez des modèles pour eux, vous devez le créer vous-même: voir ma réponse ici . Cela demande du travail, mais si vous utilisez beaucoup ce type de projet, vous travaillerez beaucoup de temps.

modifier

J'ai regardé mon code, quelque chose comme ça devrait vous aider à démarrer; la méthode onFinish dans default.js est appelée après avoir cliqué sur "OK" dans les assistants par défaut. Notez que je n'ai pas testé cela!

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 );
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top