问题
- 我在 Visual Studio 2010 项目中有一堆自定义文件。
- 当它们更改时,我需要在这些自定义文件上运行一个工具。
- 该工具生成现有 .cpp 文件包含的 .h 文件。
- 我希望该工具作为构建过程的一部分运行。
- 它需要在 Visual Studio 中运行,但理想情况下也可以作为 msbuild 进程的一部分运行。
现有不合标准的解决方案
在每个文件上,每次添加时,我都可以转到文件设置,将项目类型设置为自定义构建工具,然后在自定义构建工具对话框中,设置命令行参数,设置(硬编码)输出,然后设置(硬编码的)附加依赖项。
显然,这是一个糟糕的解决方案,因为每次添加自定义类型的新文件时,它的工作量都很大且容易出错。
所需的解决方案
我为任何扩展名为 .foo 的文件设置了 Visual Studio,当 .foo 文件更改时,它会在编译 CPP 代码之前运行工具 bar.exe。
我尝试过的事情
基于此: http: //msdn.microsoft.com/en-us/library/3e889s84 (v=vs.100).aspx 我试图设置一个 .targets 和 .xml 文件。但是,我不知道如何创建一个新的项目类型以使其显示在 Visual Studio 中,我也不知道如何使其神奇地应用于每个 .foo 类型的文件。最重要的是,我还没有弄清楚其中的任何链接如何链接到任何描述调用我的 bar.exe 工具的行为。
我试图搜索所有 Visual Studio 的 xml/targets 文件,以跟踪现有的项目类型并确定它们如何转换为实际的构建操作。它总是在 ItemType 的墙上结束,那里有一堆在 ProjectItemsSchema 中描述的,但我找不到它们在哪里实现,或者我自己如何实现它们。
MSDN 的文档完全失败了,我想我已经阅读了每一个可能相关的页面十次,但无济于事。
在 Visual Studio 2008 中,我使用 .rules 文件进行了类似操作,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<VisualStudioToolFile
Name="Foo Build Rules"
Version="8.00"
>
<Rules>
<CustomBuildRule
Name="FooBuild"
DisplayName="FooGen"
CommandLine="..\..\tools\FooGen.exe [inputs]"
Outputs="$(InputName).h"
AdditionalDependencies="*.foo"
FileExtensions="*.foo"
ExecutionDescription="Generating Foos..."
>
<Properties>
</Properties>
</CustomBuildRule>
</Rules>
</VisualStudioToolFile>
然而,此功能已在 2010 年被弃用,我一直无法弄清楚如何在新系统中复制它。
帮助?