Я использовал WizardExtension
Итак, в итоге
- Добавьте необходимые файлы как часть одного из шаблонов проекта (внесите изменения в оба файла .vstemplate И .csproj / .cxproj).
- После установки проекта в методе
RunFinished
расширения мастера переместите файлы в нужное место.
- В методе
ProjectFinishedGenerating
расширения мастера используйте объект EnvDTE Project для удаления файлов из проекта.
Ниже приведен код, чтобы сделать это более конкретным.
1
Добавьте папки + файлы в шаблон проекта .vstemplate (не в шаблон группы проектов, показанный в вопросе) и в файл .csproj / cxproj. Это временная мера, поэтому, когда пользователь выполняет шаблон проекта в Visual Studio (нажав «Файл» -> «Новый проект»), файлы первоначально устанавливаются / создаются.
Ниже приведен файл .vstemplate
...
<Folder Name="packages" TargetFolderName="packages">
<Folder Name="debug" TargetFolderName="debug">
<Folder Name="doc" TargetFolderName="doc">
<Folder Name="text" TargetFolderName="text">
<Folder Name="abc" TargetFolderName="abc">
<ProjectItem ReplaceParameters="false" TargetFileName="file1.xml">file1.xml</ProjectItem>
<ProjectItem ReplaceParameters="false" TargetFileName="file2.xml">file2.xml</ProjectItem>
</Folder>
<Folder Name="def" TargetFolderName="def">
<ProjectItem ReplaceParameters="false" TargetFileName="image.png">image.png</ProjectItem>
</Folder>
</Folder>
</Folder>
</Folder>
</Folder>
...
А вот выдержка из файла .cxproj
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
...
<ItemGroup Label="RTMaps Documentation">
<None Include ="packages\debug\doc\text\abc\file1.xml" />
<None Include ="packages\debug\doc\text\abc\file2.xml" />
<None Include ="packages\debug\doc\text\def\image.png" />
</ItemGroup>
...
</Project>
2
В WizardExtension используйте System.IO для перемещения папок (и их содержимого), например,
public void RunFinished()
{
try
{
var src = Path.Combine(_destinationDirectory, "packages");
var dest = Path.Combine(_solutionDirectory, "admin");
System.IO.Directory.CreateDirectory(dest);
dest = Path.Combine(dest, "packages");
Directory.Move(src, dest);
}
catch
{
...
}
}
Я получаю _destinationDirectory
и _solutionDirectory
во время RunStarted
метода.
public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams)
{
_destinationDirectory = replacementsDictionary["$destinationdirectory$"];
_solutionDirectory = replacementsDictionary["$solutiondirectory$"];
}
3
Наконец, приведите в порядок проект (файл .csproj или .cxproj) программным способом, используя объект EnvDTE Project . Необходимо удалить только файлы.
public void ProjectFinishedGenerating(Project project)
{
try
{
project.ProjectItems.Item("file1.xml").Remove();
project.ProjectItems.Item("file2.xml").Remove();
project.ProjectItems.Item("image.png").Remove();
}
catch
{
....
}
}