seventhnight Ответов: 0

VS DTE Solutions 2 addfromtemplate добавляет проект, но $safeprojectname$ не заменяется


У меня есть следующий код, который добавляет проект к текущему решению из указанного шаблона:

Solution2 solution = GetSolution();
 string templatePath = "...";
 string genProjectPath = $"C:\\TestVSIX\\{projectName}\\";
 try {
     solution.AddFromTemplate(templatePath, genProjectPath, projectName);
 } catch (Exception ex) {
     System.Diagnostics.Debug.WriteLine(ex.Message);
 }


Кажется, что он работает правильно до определенного момента, проект добавлен, все файлы, кажется, включены, но только некоторые из замен, похоже, произошли.

...
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>
</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{9ED4A85F-9A60-4FEB-9736-7591511FE893}</ProjectGuid>
<ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>$safeprojectname$</RootNamespace>
<AssemblyName>$safeprojectname$</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<MvcBuildViews>false</MvcBuildViews>
<UseIISExpress>true</UseIISExpress>
<Use64BitIISExpress />
...


Где соответствующий фрагмент шаблона файла proj был определен как:

...
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>
</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{$guid1$}</ProjectGuid>
<ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>$safeprojectname$</RootNamespace>
<AssemblyName>$safeprojectname$</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<MvcBuildViews>false</MvcBuildViews>
<UseIISExpress>true</UseIISExpress>
<Use64BitIISExpress />
...


Обратите внимание, что $guid1$ обновился, а $safeprojectname$ - нет.
Кроме того, $safeprojectname$ не был заменен и в других файлах проекта.

Что я уже пробовал:

Я попытался привязать класс мастера к шаблону, но он, похоже, не срабатывает при добавлении проекта с помощью метода AddFromTemplate (исследования, похоже, подтверждают это).

Кроме того, я искал какой-то механизм для принудительной замены после вызова AddFromTemplate, но не нашел никакого упоминания о такой вещи.

Я предполагаю, что мог бы вручную реализовать замену, но прежде чем я буду беспокоиться, я хотел бы понять, почему это не работает должным образом.

Richard MacCutchan

Я не знаю ответа, но я использовал эту функцию и никогда не имел с ней проблем. Вы уверены, что ваши шаблоны правильно обновляются, прежде чем пытаться их использовать? Я заметил, что после добавления нового шаблона мне нужно перезапустить Visual Studio, чтобы распознать обновленные версии.

johannesnestler

Я только что проверил свои шаблоны и они выглядят так же как и ваши и работают… Так может быть посмотреть на ваш с расширением vstemplate... но как вы показали его заменить, по крайней мере, идентификатор GUID так &ЛТ;файл проекта="ProjectTemplate.csproj файл" ReplaceParameters="ложно"и GT; не может быть проблемой...
Для ItemTemplates мне также пришлось использовать IWizard-реализацию, но я заставил ее работать так, как ожидалось...

0 Ответов