2008-11-03 24 views
2

Я ищу для создания шаблона Visual Studio 2008, который будет создавать базовый проект и на основе удаления определенных файлов/папок на основе параметров, которые вводит пользователь.Создание шаблонов Visual Studio

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

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

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

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

ProjectItem file = project.ProjectItems.Item("File.cs"); 
file.Remove(); 
0

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

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

+0

Это очень полезно, но я также хотел бы знать, возможно ли его выборочно включать части файла на основе настроек. Ответ, который вы предлагаете здесь, является отличным. Спасибо. –

1

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

... и т.д.

Смежные вопросы