VS DTE solution2 addfromtemplate добавляет проект, но $ safeprojectname $ не заменяется - PullRequest
0 голосов
/ 23 января 2019

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

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 $ также не было заменено в других файлах проекта.

То, что я пробовал:

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

Я смог подтвердить, когда шаблон используется через меню Add> Project, что Мастер запускается и замены происходят правильно.

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

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

Заранее спасибо!

...