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-реализацию, но я заставил ее работать так, как ожидалось...