При создании шаблона нескольких проектов для визуальной студии есть способ использовать параметры в файле корневого шаблона?
Я пытаюсь создать шаблон нескольких проектов. Я хочу, чтобы имена подпроектов содержали имя решения. Я попробовал следующее, однако $safeprojectName $по какой-то причине не работает в корневом шаблоне. Он пытается создать папки с именем $safeprojectName $в имени, а не фактическим именем проекта.
<VSTemplate Version="2.0.0" Type="ProjectGroup"
xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
<TemplateData>
<Name>Default Solution</Name>
<Description>An example of a multi-project template</Description>
<Icon>Icon.ico</Icon>
<ProjectType>CSharp</ProjectType>
</TemplateData>
<TemplateContent>
<ProjectCollection>
<SolutionFolder Name="$safeprojectName$.Web">
<ProjectTemplateLink ProjectName="$safeprojectName$.Web">
Src\Web\MyTemplate.vstemplate
</ProjectTemplateLink>
</SolutionFolder>
</ProjectCollection>
</TemplateContent>
</VSTemplate>
Я много читал об этом и создал и создал сборку, используя интерфейс IWizard, который создает параметр $solutionName $. Затем я использовал следующий шаблон.
<VSTemplate Version="2.0.0" Type="ProjectGroup"
xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
<TemplateData>
<Name>Default Solution</Name>
<Description>An example of a multi-project template</Description>
<Icon>Icon.ico</Icon>
<ProjectType>CSharp</ProjectType>
</TemplateData>
<TemplateContent>
<ProjectCollection>
<SolutionFolder Name="$solutionName$.Web">
<ProjectTemplateLink ProjectName="$solutionName$.Web">
Src\Web\MyTemplate.vstemplate
</ProjectTemplateLink>
</SolutionFolder>
</ProjectCollection>
</TemplateContent>
<WizardExtension>
<Assembly>DefaultSoloutionWizard, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=f753ddb61a28cb36, processorArchitecture=MSIL</Assembly>
<FullClassName>DefaultSoloutionWizard.WizardImplementation</FullClassName>
</WizardExtension>
</VSTemplate>
Это, однако, также не работает с той же проблемой. Я пытаюсь сделать невозможное? Любая помощь по этому поводу будет приветствоваться.
Ответы
Ответ 1
Возможно, вы захотите заглянуть в Инструментарий Automation Automation Toolkit. Там есть достаточная сумма для переваривания, но часть того, что она может сделать, - это установить пользовательский интерфейс на основе мастера на многопроектном шаблоне.
Если вы хотите увидеть пример этого, посмотрите Сервис Factory, который может создать всю структуру решения частично основанный на мастере.
Ответ 2
Начиная с версии Visual Studio 2013 Update 2 теперь вы можете использовать атрибут CopyParameters в элементе ProjectTemplateLink в корневом файле .vstemplate. Любые параметры, определенные в корневом шаблоне, будут доступны в связанных шаблонах с префиксом "ext_".
Например, если корневой шаблон определяет параметр $Foo $, тогда параметр $ext_Foo $будет доступен в связанных проектах с тем же значением.
Подробнее см. http://msdn.microsoft.com/en-us/library/ms171398.aspx.
Ответ 3
Да, вам нужно использовать статический словарь в мастере корневого шаблона, который будет использоваться мастером для реализации дочерних шаблонов:
Выполнение IWizard в корневом шаблоне
public void RunStarted(object automationObject,
Dictionary<string, string> replacementsDictionary,
WizardRunKind runKind, object[] customParams)
{
try
{
// Display a form to the user. The form collects
// input for the custom message.
inputForm = new UserInputForm();
inputForm.ShowDialog();
customMessage = inputForm.get_CustomMessage();
// Add custom parameters.
replacementsDictionary.Add("$custommessage$",
customMessage);
globalDictionary = new Dictionary<string, string>();
globalDictionary.Add("$custommessage$",
customMessage);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
public static Dictionary<string, string> globalDictionary;
Вы можете получить полный пример, реализованный здесь: Многопроектные шаблоны с мастером: Пример Visual Studio 2010