Шаблон Visual Studio 2008, содержащий как C #, так и C ++ / CLI проект? - PullRequest
1 голос
/ 28 ноября 2009

В настоящее время я пишу инфраструктуру плагинов Winamp для C # (в основном, C # реализация Winamp API / SDK, а также шаблон плагина barebones). Поскольку библиотеки C # не могут экспортировать точки входа DLL, я использую оболочку C ++ / CLI, которая в основном просто загружает библиотеку C #. Я хотел бы создать для этого шаблон Visual Studio, который создает и библиотеку плагинов barebones C #, и оболочку C ++. Однако, если я нажму «Файл» & rarr; Экспорт шаблона, только проект C # в списке.

Можно ли создать многопроектный шаблон, содержащий как проект C #, так и проект C ++ / CLI? Если да, то как?

Ответы [ 2 ]

2 голосов
/ 25 июня 2010

Я сам нашел ответ некоторое время назад и забыл его правильно обновить. Файл .vstemplate можно использовать для создания шаблона C ++, установив язык CSharp, как в шаблонах C # (он все равно будет работать правильно).

Вот пример, который я использовал: .vstemplate файл и все остальные файлы

WiX также использует этот метод

1 голос
/ 28 ноября 2009

«шаблон экспорта» не работает для проектов C ++. Если вам нужны шаблоны для них, вам нужно создать их самостоятельно: см. Мой ответ здесь . Это требует некоторой работы, но если вы часто используете этот тип проектов, работа - это хорошо проведенное время.

редактировать

Я посмотрел свой код, что-то вроде этого должно помочь вам начать; метод onFinish в default.js вызывается после нажатия кнопки «ОК» в мастерах по умолчанию. Обратите внимание, что я не проверял это!

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 );
}
...