我想创建一个Visual Studio项目模板,将创造一个WPF窗口与视图模型附加文件
像下面
VMWindow.xaml --- VMWindow.xaml.cs --- VMWindow.vm.cs
我可以用下面的.vstemplate文件创建模板
<VSTemplate Type="Item" Version="2.0.0"
xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
<TemplateData>
<Name>Viewmodel Dialog Box</Name>
<Description>Viewmodel Dialog Box</Description>
<Icon>Icon.ico</Icon>
<ProjectType>CSharp</ProjectType>
<DefaultName>VMDialog</DefaultName>
</TemplateData>
<TemplateContent>
<ProjectItem TargetFileName="$fileinputname$.xaml" SubType="Window">ViewModelDialogTemplate.xaml</ProjectItem>
<ProjectItem TargetFileName="$fileinputname$.xaml.cs">ViewModelDialogTemplate.xaml.cs</ProjectItem>
<ProjectItem TargetFileName="$fileinputname$.vm.cs">ViewModelDialogTemplate.vm.cs</ProjectItem>
</TemplateContent>
</VSTemplate>
我想为模板与嵌套在主窗口内的文件在Solution Explorer中显示当.vm.cs文件创建本身。
我发现下面的HOWTO,我有Visual Studio 2010中跟随它虽然麻烦。 这是写于2008年,这是否仍然适用?
代码项目的文章
这其实很容易...
<ProjectItem TargetFileName="$fileinputname$.xaml" SubType="Window">ViewModelDialogTemplate.xaml</ProjectItem>
<ProjectItem TargetFileName="$fileinputname$.xaml/$fileinputname$.xaml.cs">ViewModelDialogTemplate.xaml.cs</ProjectItem>
<ProjectItem TargetFileName="$fileinputname$.xaml/$fileinputname$.vm.cs">ViewModelDialogTemplate.vm.cs</ProjectItem>
还有一个更简单的方法。 您可以在VS用来构造复合项相同的向导拉。 你这样做通过模板的末尾添加元素,在<TemplateContent> ...
<WizardExtension>
<Assembly>Microsoft.VisualStudio.Web.Application, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Assembly>
<FullClassName>Microsoft.VisualStudio.Web.Application.WATemplateWizard</FullClassName>
</WizardExtension>
然后,你需要告诉向导母公司的延伸,和孩子的延伸......
<CustomParameters>
<CustomParameter Name="$ParentExtension$" Value=".xaml"/>
<CustomParameter Name="$ChildExtension$" Value=".cs"/>
</CustomParameters>
此元素进入内部<TemplateContent>。
该解决方案进行测试,并在VS2012的工作,你可以看到在调用向导硬编码的版本。 如果您有问题的版本,查找文件webform.vstemplate(Visual Studio的模板的.aspx),并激励自己。
事实证明同样的方法适用于VS 2010年需要进行一些调整,但这个代码项目的文章涵盖了基本思路。
您需要实现Microsoft.VisualStudio.TemplateWizard.IWizard接口 ,并编写代码一点点地从项目中移除新的项目,并将其重新添加为其他项目的孩子。 下面是从QueryFirst是采取与扩展.gen.cs的任何文件,并使其成为同名.sql文件的子工作的例子...
public void ProjectItemFinishedGenerating(ProjectItem
item)
{
string path = item.FileNames[0];
string parentPath = null;
if (path.EndsWith(".gen.cs"))
parentPath = path.Replace(".gen.cs", ".sql");
if (path.EndsWith("Results.cs"))
parentPath = path.Replace("Results.cs", ".sql");
if (!string.IsNullOrEmpty(parentPath))
{
ProjectItem parent = item.DTE.Solution.FindProjectItem(parentPath);
if (parent == null)
return;
item.Remove();
parent.ProjectItems.AddFromFile(path);
}
}
要附加的代码模板,你需要在你的.vstemplate文件这样的事情...
<WizardExtension>
<Assembly>QueryFirst, Version=1.0.0.0, Culture=neutral, PublicKeyToken=4688a60b10e39f04</Assembly>
<FullClassName>QueryFirst.WizardImplementation</FullClassName>
</WizardExtension>