MSBuild 4.5 忽略项目依赖性

标签 msbuild .net-4.5

我有一个 VS2010 解决方案文件,其中包含 20 多个项目,其中一些项目依赖于解决方案中的其他项目。

我还为不同的目的设置了多个构建配置,但我已经缩减了要构建的项目,仅包含最少数量的项目。

例如,我有三个库(A、B和C)、一个网站项目和一个网站部署项目(VS2010)。该网站引用了库 A 和 B,而 B 又引用了 C。我的构建配置仅检查了网站和部署项目。当我从解决方案的属性中检查项目依赖项时,网站正确列出了库,并且 B 按预期显示了 C。

当我从 VS2010 中针对我的构建配置运行构建时,它工作得完全正常,但是当我在指定我的配置的解决方案上运行 MSBuild 时(如下所示),它只会导致一堆错误。

msbuild.exe mysolution.sln/t:Build/p:configuration=MyConfig

这是我收到的错误的示例:

Services\IService.cs(11,63): 错误 CS0246: 找不到类型或命名空间名称“Priority”(您是否缺少 using 指令或程序集引用?)

我注意到我的构建服务器 (TeamCity v7.1.2) 上发生了这种情况,但我可以在多台计算机上重现它,并且我将其范围缩小到 MSBuild 本身的问题。

它是在我安装了 .NET 4.5(和 2 个安全补丁)之后才开始发生的,所以我卸载了它,重新安装了 .NET 4.0(带有补丁),因为它也被删除了,然后尝试了相同的命令,它工作得很好.

这让我相信 .NET 4.5 的 MSBuild 中发生了某些更改或损坏,但他们的文档中似乎没有任何内容谈论这种更改。

MSBuild 4.5 文档:http://msdn.microsoft.com/en-us/library/hh162058.aspx

我什至尝试将 BuildProjectDependency=true 传递给 MSBuild,结果显示它跳过了其他项目,因为它们未在配置管理器中选择,这是正确且有意的。

我让它与 MSBuild 4.5 一起工作的唯一方法是返回并选择被跳过的项目,但由于实际的解决方案依赖链有点复杂,我不想每次我们使用新项目或依赖项更新解决方案时,请尝试手动管理配置。它应该是自动的。

对我正在做的事情有什么想法吗?

最佳答案

如果您仍然没有解决这个问题,让我们尝试一些盲打:

  1. Msbuild 已确认存在错误,有时它会根据所遵循的依赖关系生成错误的构建顺序。尝试构建不完整的解决方案,而是构建您想要构建的确切项目 - 例如 msbuild.exe YourWebsiteProject.csproj/t:Clean;Build/p:configuration=MyConfig。问题仍然存在吗?

  2. 确保 YourWebsiteProject 和您的库(B 和 C)具有正确的引用 - 在项目上,而不是在另一个项目文件夹中的 dll 上(解决该问题的最简单方法 - 从 B 中删除对 C 的引用,然后重新添加) ,只需确保您添加项目引用而不是浏览到 bin\Debug 中的 C.dll)。问题还存在吗?

如果您可以提供详细的甚至诊断性的 msbuild 日志(在开关/ds/v:diag 之后添加到您的 msbuild 命令行,然后在某处共享 teamcity 完整构建日志或通过管道将命令行日志传输到文件)或一些示例项目设置在哪里我可以重现这种行为 - 它对解决问题有很大帮助。

关于MSBuild 4.5 忽略项目依赖性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13752615/

相关文章:

MSBuild - 解决方案的特定于项目的目标不起作用

asp.net-mvc - MVC 5,WIF(System.IdentityModel)和ADFS实际未进行身份验证,联合注销时出错

asp.net 4.5 自定义成员(member)提供程序配置抛出奇怪的异常

C# ASP.NET "InvalidProgramException: Common Language Runtime detected an invalid program"

c# - ADFS 主动身份验证 .NET 4.5(后 WIF)

MSBuild 在下划线符号之前获取属性子字符串

msbuild - 如何在 MSBuild 中找到当前文件

msbuild - 在VS2017 Asp.Net Core发布操作结束时执行.bat文件?

CI 环境中的 MSBuild "Unable to copy file"

c# - System.Net.WebRequest 支持哪些版本的 SSL/TLS?