visual-studio-2017 - SingleFileGenerator / Run Custom Tool 不适用于新的 vs2017 项目类型
问题描述
我有一个 SingleFileGenerator 可以正常工作于旧式 Visual Studio C# 项目,但根本不适用于新式 VS2017 C# 项目。我已将新的 guid 添加到注册属性和 packagedef 中,但仍然没有乐趣。作为参考,此代码生成器作用于扩展名为 .3schema 的 xml 文件,这是我们自己发明的 xml 文件...
[Guid("0BC6C7FE-28F7-4A64-A8F8-714FFC0F8FB4")]
[PackageRegistration(UseManagedResourcesOnly = true)]
[InstalledProductRegistration("TrilogySchemaGenerator", "Trilogy C# Schema Generator", "5.9")]
[CodeGeneratorRegistration(typeof(TrilogySchemaGenerator), "Trilogy C# Schema Generator", "{9A19103F-16F7-4668-BE54-9A1E7A4F7556}", GeneratesDesignTimeSource = true)]
[CodeGeneratorRegistration(typeof(TrilogySchemaGenerator), "Trilogy C# Schema Generator", vsContextGuids.vsContextGuidVCSProject, GeneratesDesignTimeSource = true)]
[ProvideObject(typeof(TrilogySchemaGenerator))]
public class TrilogySchemaGenerator : BaseCodeGeneratorWithValidation // base class implements IVsSingleFileGenerator
{
…
}
和 pkgdef:
[$RootKey$\Generators\{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}\.3schema]
@="TrilogySchemaGenerator"
[$RootKey$\Generators\{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\.3schema]
@="TrilogySchemaGenerator"
我错过了什么步骤?是否需要额外注册?其他尝试的想法?
解决方案
我找错地方来解决我的问题。我的 SingleFileGenerator 根本不是问题!但是,如果您正在构建 SingleFileGenerator,请查看此答案以获取有关如何正确注册它的详细信息:
如何在 Visual Studio 2017 中注册“自定义工具”以使其工作?
我使用这个出色的工具将我的旧项目转换为新的 VS2017。我强烈推荐:
https://www.nuget.org/packages/Project2015To2017.Migrate2017.Tool/
但是,这个工具不能很好地处理自定义构建步骤,我的代码生成就是其中之一。就我而言,当我手动编写自定义构建步骤时,我错过了对 XML 注释行的引用:
<ItemGroup>
<XmlResource Include="Schema\T1TY2019.3schema">
--> <Generator>TrilogySchemaGenerator</Generator> <--
<LastGenOutput>T1TY2019.cs</LastGenOutput>
</XmlResource>
</ItemGroup>
推荐阅读
- php - MySQL Prepared 语句:更新多个值
- r - 将每个变量观察的多行“转换”为 R 中的单列
- html - 在 for 循环中选择 mat-select,在下拉列表中设置“选定” - 角度
- assembly - 使用 BIOS int 13h 访问不同磁头中的扇区
- excel - SAP GUI 脚本:读取表格控件中的单元格值
- c# - 当您尝试将值设置为只读属性时会发生什么?
- javascript - Gatsby - Javascript 从 API 响应中替换图像 src
- python - 鼠标单击后将文本添加到 matplotlib 图
- angular - 在订阅中返回布尔值的替代方法
- sql - sql中的2列在另一列之下