MSBUILD:如何将XML文件数据转换为项?
我已经编写了一些MSBuild脚本,允许我构建几百个项目。一个要求是将文件复制到构建目录中。我有一个XML文件,其中包含需要复制的内容以及需要复制到哪里的列表。这个XML文件只是我导入到主项目中的一个项目组,一切都很好 我唯一的问题是我的XML文件和所有的项目都是巨大的(我有数百个目录要从中复制)!这是因为所有项都必须附加元数据,这意味着每个副本声明必须有3行代码和3个XML元素。i、 eMSBUILD:如何将XML文件数据转换为项?,msbuild,Msbuild,我已经编写了一些MSBuild脚本,允许我构建几百个项目。一个要求是将文件复制到构建目录中。我有一个XML文件,其中包含需要复制的内容以及需要复制到哪里的列表。这个XML文件只是我导入到主项目中的一个项目组,一切都很好 我唯一的问题是我的XML文件和所有的项目都是巨大的(我有数百个目录要从中复制)!这是因为所有项都必须附加元数据,这意味着每个副本声明必须有3行代码和3个XML元素。i、 e <copy_to_build Include="$(FooDir)/BAZ/CoreDataFile
<copy_to_build Include="$(FooDir)/BAZ/CoreDataFiles/*">
<Destination>$(BuildDir)//BAZ/</Destination>
</copy_to_build>
$(BuildDir)//BAZ/
这相当于将复制脚本的大小增加了三倍,这意味着它很难维护
好的,我在另一个文件中将XML转换成这种格式:
<copy_to_build Source="$(FooDir)/BAZ/CoreDataFiles/*" Destination="$(BuildDir)//BAZ/" />
它更简洁,因为每个copy命令有一个xml元素。它更容易阅读
唯一的问题是,我无法在MSBuild中将它们用作“项”,因为缺少元数据,并且项不能具有“Destination”属性
因此,我编写了一个工具,将简明的XML“转换”回详细的MSBuild格式。然后,我面临着如何将转换后的XML文件恢复到我的“项目”文件的难题。我确实发现导入必须在项目级别完成:因此我无法在任务或目标中“转换”我的xml文件。这意味着文件必须在处理导入时准备就绪。因此,无法在我的目标中重新计算xml文件。。。因此,显然,在从命令行调用MSBuild之前,我必须“转换”xml文件。这给我的构建过程增加了复杂的步骤
所以我的最后一个问题是,如何读取(一个元素)XML文件数据并将其转换为目标或任务中的(三个元素)项
我听说过动态项,但我对msbuild还很陌生,不知道如何使用它们,或者它们是否与我的问题相关
谢谢。尝试对输入的单元素XML文件使用XSLT转换,将其转换为MSBuild脚本中使用的三元素XML文件。这是一篇关于如何在MSBuild中使用XSLT转换的好文章 这不是解决问题的正确方法(除非我不理解这个问题)。忘记尝试动态生成MSBuild XML元素。相反,你应该做的是以下几点
也就是说,我的建议只是为了回答“如何使用MSBuild将XML转换为项目?”@Sayed关于它是否适合您手头的问题的观点是另一个完全值得思考的问题。本文很有帮助。我已经使xslt转换工作得非常好,我的新.xml文件也非常好。但是现在,我如何在运行时读取这些信息呢?没有任务“读取”等效于的文件。应将新xml文件转换为MSBuild格式。然后可以通过标记导入该文件,也可以使用MSBuild任务调用它。一旦有了文件,就不能在生成目标内部导入该文件。我已经解决了这个问题,但是它没有使用任何一个提示。如果你有一个解决方案,考虑回答你自己的问题。尝试使用MSBug任务来“导入”它。就像这样:这就是我最终所做的。它接收XML文件,并发出一个包含正确元数据的ItemGroup。它工作得很好。