Я хочу создать шаблон Visual Studio 2008, который создаст базовый проект и удалит определенные файлы / папки на основе параметров, вводимых пользователем.
Прямо сейчас я следил за некоторыми онлайн-учебниками, которые позволили мне создать форму для запроса пользователя и передачи данных в класс IWizard, но я не знаю, что оттуда делать.
Учебники предоставляют образец для выполнения простой замены: код:
Form1 form = new Form1();
DialogResult dlg = form.ShowDialog();
if (dlg == DialogResult.OK)
{
foreach (KeyValuePair<string, string> pair in form.Parameters)
{
if (!replacementsDictionary.ContainsKey(pair.Key))
replacementsDictionary.Add(pair.Key, pair.Value);
else
replacementsDictionary[pair.Key] = pair.Value;
}
}
form.Close();
но я хочу выборочно включать файлы на основе пользовательских настроек и, если возможно, выборочно включать разделы кода в файл на основе настроек.
Есть ли умный способ сделать это, или мне придется вручную удалять файлы проекта в IWizard: ProjectFinishedGenerating ()?





Если я правильно понимаю, вы хотите иметь возможность определять, следует ли вам добавлять элементы проекта в проект.
Если это так, вы можете реализовать IWizard.ShouldAddProjectItem и вернуть, хотите ли вы добавить файл или нет.
По моему опыту, ShouldAddProjectItem вызывается только для папки в проекте шаблона. По сути, это бесполезно.
Вместо этого вам нужно будет поместить в вашу реализацию ProjectFinishedGenerating код, который использует VS API для удаления ProjectItems.
Там вы можете удалить такие предметы:
ProjectItem file = project.ProjectItems.Item("File.cs");
file.Remove();
Вы можете выборочно включать части файла, используя $if$ с заменами. См., Например, этот бит в шаблоне библиотеки классов C# по умолчанию:
<ItemGroup>
<Reference Include = "System"/>
$if$ ($targetframeworkversion$ >= 3.5)
<Reference Include = "System.Core"/>
<Reference Include = "System.Xml.Linq"/>
<Reference Include = "System.Data.DataSetExtensions"/>
$endif$
...так далее.
Это очень полезно, но я также хотел бы знать, можно ли выборочно включать части файла на основе настроек. Ответ, ваш провайдер, здесь отличный. Спасибо.