MSBuild不会获取所引用项目的引用
时间:2020-03-06 14:45:36 来源:igfitidea点击:
刚才我用MSBuild遇到了一个奇怪的情况。有一个包含三个项目的解决方案:LibX,LibY和Exe。 Exe引用LibX。 LibX依次引用LibY,具有一些内容文件,并且还引用了第三方库(在GAC和本地lib文件夹中都安装了几个预先构建的程序集)。第三方库被标记为"复制本地"("私有"),并与LibY的输出和LibX的内容文件一样显示在LibX项目的输出中。现在,Exe项目的输出具有LibX项目输出,LibX项目的内容文件,LibY项目输出(来自LibX),但是没有第三方库的程序集。
现在,我通过直接在Exe项目中引用第三方库来解决此问题,但是我不认为这是一个"正确"的解决方案。
有人遇到过这个问题吗?
解决方案
是的,我也遇到了这个问题。尽管我很想说别的,但我相信我们必须在构建文件中包括所有传递依赖项作为引用。
我们实际上可以进入Microsoft.CSharp.targets或者Microsoft.VisualBasic.targets文件(位于框架目录中,通常为C:\ Windows \ Microsoft.NET \ Framework \ v3.5),然后将csc或者vbc任务参数修改为包括其他参考依赖项。在文件中(VB目标,行166; C目标,行164)更改:\
References="@(ReferencePath)"
到
References="@(ReferencePath);@(ReferenceDependencyPaths)"
这可能会导致其他问题,具体取决于事情的复杂程度,并且可能会在Visual Studio inproc编译器中发挥作用,但这是我发现的在MSBuild中实现此目标的唯一方法。