Modello di Visual Studio 2008 contenente sia un progetto C # che un progetto C ++ / CLI?

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

  •  06-07-2019
  •  | 
  •  

Domanda

Attualmente sto scrivendo un framework di plugin Winamp per C # (sostanzialmente, un'implementazione C # dell'API / SDK Winamp, nonché un modello di plugin barebone). Poiché le librerie C # non possono esportare i punti di ingresso DLL, sto usando un wrapper C ++ / CLI che sostanzialmente carica solo la libreria C #. Vorrei creare un modello di Visual Studio per questo, che crea entrambi la libreria di plugin C # barebone, e il wrapper C ++. Tuttavia, se faccio clic su File ? Esporta modello, viene elencato solo il progetto C #.

È possibile creare un modello multi-progetto contenente sia un progetto C # sia un progetto C ++ / CLI? In tal caso, come?

È stato utile?

Soluzione

Ho trovato la risposta me stesso qualche tempo fa e ho dimenticato di aggiornarlo correttamente. Un file .vstemplate può essere utilizzato per creare un modello C ++ impostando la lingua su CSharp come nei modelli C # (funzionerà comunque correttamente).

Ecco un esempio che ho usato: . vstemplate file e tutti gli altri file

WiX utilizza anche questo metodo

Altri suggerimenti

'modello di esportazione' non funziona per i progetti C ++. Se vuoi modelli per loro, devi crearlo tu stesso: vedi la mia risposta qui . Implica un po 'di lavoro, ma se usi molto questo tipo di progetti, il lavoro è ben speso.

modifica

Ho cercato il mio codice, qualcosa del genere dovrebbe iniziare; il metodo onFinish in default.js viene chiamato dopo aver fatto clic su "Ok" nelle procedure guidate predefinite. Nota che non l'ho provato!

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 );
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top