我正在尝试按照此处的步骤操作:https ://msdn.microsoft.com/en-us/library/cc512961.aspx为我想在 Visual Studio 中添加支持的自定义 DSL 创建一个新项目系统(最终这将包括很多功能,但现在我只是想让一些非常基本的工作)。
我可以让他们的示例正常工作,但是我在尝试进行应该非常简单的修改时遇到了麻烦:将“AssemblyInfo.cs”文件放入“Properties”文件夹中。
我的模板如下所示:
- 模板
- 装配信息.cs
- 程序.cs
- 模板.myproj
- 模板.vstemplate
我希望我创建的项目具有以下结构:
- 模板
- 特性
- 装配信息.cs
- 程序.cs
- 模板.myproj
- 模板.vstemplate
- 特性
所以我修改了我的 .myproj 文件以读取:
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Program.cs" />
</ItemGroup>
和我的 .vstemplate 文件读取:
<TemplateContent>
<Project File="Template.myproj" ReplaceParameters="true">
<ProjectItem ReplaceParameters="true" TargetFileName="Properties\AssemblyInfo.cs">AssemblyInfo.cs</ProjectItem>
<ProjectItem ReplaceParameters="true" OpenInEditor="true">Program.cs</ProjectItem>
</Project>
</TemplateContent>
这很简单:我刚刚在两个地方添加了“属性”。
但是,在创建一个新项目时,我的实验性 VS 实例抱怨:
Collection was modified; enumeration operation may not execute.
不用说,我编写的任何代码都没有包含任何类型的枚举......我尝试单步执行“MPFProj”代码,但错误似乎发生在与正在执行的代码无关的随机位置虽然(大概错误发生在不同的线程上?)。
奇怪的是,似乎我可以在没有文件夹的情况下创建一个新项目,然后手动创建(如在 IDE 中)一个文件夹,然后我可以添加一个新文件(使用“新项目”模板)到那个文件夹就好了。
这是 MPFProj 中的错误吗?我是否需要覆盖 MPFProj 类型中 100,000 个未记录的虚拟方法之一来处理这个问题?vstemplate文件不正确吗?
另外:VS 2015 的 Visual Studio 可扩展性有什么好的资源吗?或者如何实现这些东西的最佳实践?还是有意义的文档?我看过一些示例(例如 IronPython VS 插件),它们并不是特别有启发性,特别是对于解决像这样的微妙问题(并且没有良好的文档,就不可能说出不同示例之间存在差异的原因...... )。