我已经苦苦挣扎了几天,大量的搜索后我找不到正确的解决方法。
我想要做的是设置一个MSBUILD项目来构建我们整个.NET应用程序(由8个解决方案和大约250个项目组成),并覆盖一些个别项目文件中的设置,以便为自己创建一个调试版本。
具体来说,我想使用我们的发布配置来生成没有优化和完整调试信息/pdb的版本。此外,为了缩短我们目前超长的构建时间,我想在每个项目的每个引用上将“复制本地”(或实际的proj文件xml中的私有)设置为false。
前面的事情相当容易,我可以相当容易地覆盖项目级属性(甚至可以使用MSBuild命令行中的/p来完成此操作),但我无法弄清楚如何覆盖引用上的属性。我尝试了StackOverflow和网络上看到的几种方法,但还没有找到解决方案。
如果我更改Microsoft.Common.targets中的代码,注释掉_CopyFilesMarkedCopyLocal目标中的代码将完全跳过这些文件的复制。但我不希望改变我的全局配置并在所有情况下都这样做。我创建了自己的备用目标文件——如果我更改单个项目文件以指向它,则会起作用——但我无法弄清楚如何在顶级(即构建所有8个解决方案的.proj文件)指定这一点。如果我能够覆盖顶层的_CopyFilesMarkedCopyLocal目标,那就太好了,这样如果MS更改了默认的目标文件,我的构建就不会出问题,但是我无法弄清楚如何使其工作。
最理想的情况是,如果有一种方法可以像项目级属性一样覆盖引用级属性,而无需重写/覆盖构建目标——但我没有找到任何表明这是可能的信息。
提前感谢您的帮助。
P.S. 我不可能只是逐个处理所有项目文件并对它们进行更改;我需要一个可以保留现有代码的解决方案。