我有一个包含20多个项目的VS2010解决方案文件,其中一些项目依赖于解决方案中的其他项目.
我还为不同的目的设置了多个构建配置,但是我已经减少了要构建的项目,只包括最少数量的项目.
例如,我有三个库(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): error CS0246: The type or namespace name 'Priority' could not be found (are you missing a using directive or an assembly reference?)
我注意到在我的构建服务器(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
我甚至尝试过传递BuildProjectDependencies=true给MSBuild,它出现了它说它跳过了其他项目,因为它们没有在配置管理器中被选中,这是正确和有意的.
我让它与MSBuild 4.5一起工作的唯一方法是返回并选择被跳过的项目,但由于实际的解决方案对依赖链有点复杂,我不想尝试管理每次我们使用新项目或依赖项更新解决方案时手动配置.它应该是自动的.
我正在做什么的任何想法?
如果你仍然没有解决这个问题,让我们尝试一些盲打:
Msbuild 已确认错误,有时它会根据以下依赖项生成错误的构建顺序。尝试构建不是完整的解决方案,而是像您想要构建的确切项目msbuild.exe YourWebsiteProject.csproj /t:Clean;Build /p:configuration=MyConfig。问题仍然存在吗?
确保 YourWebsiteProject 和您的库(B 和 C)具有正确的引用 - 在项目上,而不是在另一个项目文件夹中的 dll 上(解决该问题的最简单方法 - 从 B 中删除对 C 的引用并再次重新添加它,只需确保您是添加项目引用,并且不浏览到 bin\Debug 中的 C.dll)。问题还存在吗?
如果您可以提供详细的甚至诊断性的 msbuild 日志(在开关 /ds /v:diag 之后添加到您的 msbuild 命令行,然后在某处共享 teamcity 完整构建日志或通过管道将命令行日志写入文件)或一些我可以重现的示例项目集这种行为——它对解决问题有很大帮助。
| 归档时间: |
|
| 查看次数: |
4648 次 |
| 最近记录: |