使用 Studio 的“自定义工具” 在 MSBuild 中
我有一个 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
文件。
是否存在可以直接使用 IVsSingleFileGenerator(包括从注册表加载其位置)的现有 MSBuild 任务,或者我是否必须手动调用处理器(通过自己实现所述 MSBuild 任务或调整处理器) )?
有趣的是,MSDN 上的使用 MSBuild 文章说:
可以访问单个文件生成器 仅在设计时,但 MSBuild 任务 可以在设计时使用 构建时间。 为了获得最大的灵活性, 因此,使用 MSBuild 任务 转换并生成代码。 了解更多 信息,请参阅项目项(视觉 Studio SDK)。
更新:我已将这个特定的自定义工具侵入到 msbuild 任务中,但它并不漂亮。 我仍然更喜欢维护良好的通用解决方案。 我有 在我的博客上发布了来源。
I've got a "Custom Tool" for Visual Studio to munge some template files into code. For consistency and portability I'd like to be able to run this template processor from MSBuild when building outside of Visual Studio.
Visual Studio creates the following snippets for the files:
<!-- 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>
The problem here is that the Template.in
is only processed by the Studio, but not by MsBuild, which may lead to out-of-date Designer.cs
files.
Is there a existing MSBuild task that can use the IVsSingleFileGenerator
directly (including to load its location from the registry) or do I have to call the processor manually (either by implementing said MSBuild task myself or adapting the processor)?
Interestingly, the Using MSBuild article on the MSDN says:
Single file generators are accessible
at design-time only, but MSBuild tasks
can be used at design-time and
build-time. For maximum flexibility,
therefore, use MSBuild tasks to
transform and generate code. For more
information, see Project Items (Visual
Studio SDK).
Update: I've hacked this specific custom tool into a msbuild task, but it's not pretty. I'd still prefer a well maintained generic solution. I've posted the source on my blog.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
当您在 VisualStudio 中指定自定义工具时,它会向您的项目或解决方案文件添加什么? 由于它们只是 msbuild 文件,因此您可以使用添加的 xml 作为您自己的构建文件的模板。
When you specify your custom tool from within VisualStudio, what does it add to your project or solution files? Since they are just msbuild files, you might be able to use the added xml as a template for your own build files.