Генератор одного файла не работает для стандартных проектов.NET в Visual Studio 2017
Я реализовал Генератор одного файла на основе шаблона [1] (который компилируется в устанавливаемый вывод VSIX, включая автоматическую регистрацию компонентов) и:
- Он работает для классических.NET проектов в VS 2015 и VS2017;
- Он работает для проектов.NET Core в VS2017;
- Но не работает для проектов.NET Standard в VS2017.
Все HasCustomTool.xml
файлы имеют одинаковую конфигурацию, для всех них указан атрибут "Custom Tool".
Когда я смотрю на .csproj
файлы, я вижу, что они разные. (Рабочее) содержание DotNetCore.csproj
файл:
<ItemGroup>
<Compile Update="HasCustomTool.cs">
<DependentUpon>HasCustomTool.xml</DependentUpon>
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
</Compile>
</ItemGroup>
<ItemGroup>
<None Update="HasCustomTool.xml">
<LastGenOutput>HasCustomTool.cs</LastGenOutput>
<Generator>PtResxErrorTool</Generator>
</None>
</ItemGroup>
Тогда как DotNetStandard.csproj
файл имеет:
<ItemGroup>
<None Update="HasCustomTool.xml">
<LastGenOutput>HasCustomTool.cs</LastGenOutput>
<Generator>PtResxErrorTool</Generator>
</None>
</ItemGroup>
Когда вы копируете разметку из DotNetCore.csproj
к DotNetStandard.csproj
(вручную), вы получите желаемую структуру - но генератор никогда не активируется.
Кто-нибудь успешно написал генератор файлов VSIX для проектов.NET Standard? Любые указатели о том, как отладить эту проблему?
[1] https://github.com/Microsoft/VSSDK-Extensibility-Samples/tree/master/Single_File_Generator
1 ответ
Вам нужно добавить новый CodeGeneratorRegistration в ваш класс.
"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}"
в моем случае мой класс decl выглядел как
[ComVisible(true)]
[Guid(GuidList.GuidI18NReactivetring)]
[ProvideObject(typeof(I18NReactive))]
[CodeGeneratorRegistration(typeof(I18NReactive), "I18N.Reactive", vsContextGuids.vsContextGuidVCSProject, GeneratesDesignTimeSource = true)]
[CodeGeneratorRegistration(typeof(I18NReactive), "I18N.Reactive", "{9A19103F-16F7-4668-BE54-9A1E7A4F7556}", GeneratesDesignTimeSource = true)]
public class I18NReactive : IVsSingleFileGenerator, IObjectWithSite
{
}
Информация об источнике пришла из этой темы