【发布时间】:2012-01-07 12:47:45
【问题描述】:
我编写了一些 MSBuild 脚本,可以构建数百个项目。一项要求是将文件复制到构建目录中。我有一个 XML 文件,其中包含需要复制的内容以及需要复制到的位置的列表。这个 XML 文件只是我导入到主项目中的一个 ItemGroup,一切正常。
我唯一的问题是包含所有项目的 XML 文件是 巨大的(我有数百个目录可供复制)!这是因为所有项目都必须附加元数据,这意味着每个副本声明必须有 3 行代码和三个 XML 元素。即
<copy_to_build Include="$(FooDir)/BAZ/CoreDataFiles/*">
<Destination>$(BuildDir)//BAZ/</Destination>
</copy_to_build>
这相当于将我的复制脚本的大小增加了三倍,这意味着它很难维护。
好的,所以我在另一个文件中将我的 XML 转换为这种格式:
<copy_to_build Source="$(FooDir)/BAZ/CoreDataFiles/*" Destination="$(BuildDir)//BAZ/" />
这样更简洁,因为每个复制命令都有一个 xml 元素。它更容易阅读。
唯一的问题是我不能在 MSBuild 中将这些用作“项目”,因为缺少元数据,并且项目不能具有“目标”属性。
所以我编写了一个工具来将我的简洁 XML '转换'回详细的 MSBuild 格式。然后我面临着如何将这个转换后的 XML 文件重新放入我的“项目”文件的困境。我确实发现必须在项目级别完成导入:因此我无法在任务或目标中“转换”我的 xml 文件。这意味着文件必须在处理导入时准备好。因此,无法在我的 Target 中重新评估 xml 文件......所以显然我必须在从命令行调用 MSBuild 之前“转换”我的 xml 文件。这为我的构建过程增加了复杂的步骤。
所以我的最后一个问题是,如何读取我的(一个元素)XML 文件数据并将其转换为目标或任务中的(三个元素)项目?
我听说过动态项目,但我对 msbuild 还很陌生,所以我不知道如何使用它们,或者它们是否与我的问题相关。
谢谢。
【问题讨论】:
标签: msbuild