我有一个用于 Visual Studio 的“自定义工具”,可以将一些模板文件转换为代码。为了一致性和可移植性,我希望在 Visual Studio 之外构建时能够从 MSBuild 运行此模板处理器。
Visual Studio 为文件创建以下片段:
<!-- the template -->
<None Include="Template.in">
<Generator>Template Processor</Generator>
<LastGenOutput>Template.in.Designer.cs</LastGenOutput>
</None>
<!-- generated file -->
<Compile Include="Template.in.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Template.in</DependentUpon>
</Compile>
这里的问题是,Template.in
只有 Studio 处理,MsBuild 不处理,可能会导致Designer.cs
文件过期。
是否有现有的 MSBuild 任务可以IVsSingleFileGenerator
直接使用(包括从注册表加载其位置),还是我必须手动调用处理器(通过自己实现所述 MSBuild 任务或调整处理器)?
有趣的是,MSDN 上的Using MSBuild文章说:
单个文件生成器只能在设计时访问,但 MSBuild 任务可以在设计时和构建时使用。因此,为了获得最大的灵活性,请使用 MSBuild 任务来转换和生成代码。有关详细信息,请参阅项目项 (Visual Studio SDK)。
更新:我已经将这个特定的自定义工具破解为 msbuild 任务,但它并不漂亮。我仍然更喜欢维护良好的通用解决方案。我已经在我的博客上发布了源代码。