Шаблон Visual Studio 2008, содержащий как проект C #, так и проект C ++ / CLI?
-
06-07-2019 - |
Вопрос
В настоящее время я пишу фреймворк плагинов Winamp для C # (по сути, C #-реализацию Winamp API / SDK, а также шаблон плагина barebones).Поскольку библиотеки C # не могут экспортировать точки входа DLL, я использую оболочку C ++ / CLI, которая в основном просто загружает библиотеку C #.Я бы хотел создать шаблон Visual Studio для этого, который создает и то , и другое библиотека плагинов barebones для C #, и оболочка C ++.Однако, если я нажму Файл → Экспортировать шаблон, в списке появится только проект C #.
Возможно ли создать шаблон для нескольких проектов, содержащий как проект C #, так и проект C ++ / CLI?Если да, то каким образом?
Решение
Некоторое время назад я сам нашел ответ и забыл его правильно обновить. Файл .vstemplate можно использовать для создания шаблона C ++, установив язык CSharp, как в шаблонах C # (он все равно будет работать правильно).
Вот пример, который я использовал: . vstemplate file и все остальные файлы
Другие советы
'export template' не работает для проектов на 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 );
}