SingleFileGenerator / Run Custom Tool не запускается для нового типа проекта vs2017
У меня есть SingleFileGenerator, который работает правильно для проектов Visual Studio C# старого стиля, но совсем не для проектов VS2017 C# нового стиля. Я добавил новый guid в атрибуты регистрации и в packagedef, но все равно не радуюсь. Для справки, этот генератор кода работает с файлами XML с расширением.3schema, который является файлом 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"
Какой шаг я пропускаю? Требуется ли дополнительная регистрация? Идеи других вещей, чтобы попробовать?
1 ответ
Я посмотрел не в том месте, чтобы решить мою проблему. Это не было проблемой с моим 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>