Создание шаблонов Visual Studio - PullRequest
2 голосов
/ 03 ноября 2008

Я хочу создать шаблон 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 ()?

Ответы [ 3 ]

3 голосов
/ 20 марта 2009

По моему опыту, ShouldAddProjectItem вызывается только для папок в шаблоне проекта. Таким образом, это в значительной степени бесполезно.

Вместо этого вам потребуется поместить код в реализацию ProjectFinishedGenerating, которая использует VS API для удаления ProjectItems.

Там вы можете удалить такие элементы:

ProjectItem file = project.ProjectItems.Item("File.cs");
file.Remove();
1 голос
/ 27 мая 2010

Вы можете выборочно включать части файла, используя $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$

... и т.д.

0 голосов
/ 03 ноября 2008

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

Если это так, вы можете реализовать IWizard.ShouldAddProjectItem и вернуть, хотите ли вы, чтобы файл был добавлен или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...