2014-06-27 302 views
7

我正尝试使用MSBUILD从命令行清理并重建包含多个项目的解决方案文件。出于某种原因,我的构建失败(大约10%的构建项目失败),并且出现多个错误,这些错误都是这样的:Visual Studio构建成功,MSBuild失败

错误CS0234:命名空间“bar”中不存在类型或名称空间名称“foo” (是否缺少程序集引用?)

现在,如果我清理和与它没有错误成功打造完全一样的配置,重建从Visual Studio 2010中相同的解决方案文件。

从Visual Studio的MSBuild的设置或配置有什么不同,需要改变,我不知道?

回答

1

尝试检查MSBuild无法在非建筑库的项目文件中找到的引用的路径。有时,当您使用VS或ReSharper为您自动添加引用时,路径最终会到达\ obj目录。 VS似乎能够应付这一点,但MSBuild没有那么多。

+1

我已经能够找出问题所在。在64位环境中构建MSBuild时只会失败,我可以在32位机器上成功构建。我确保使用C:\ Windows \ Microsoft.NET \ Framework64目录下的MSBuild.exe,而不是常规的Framework目录。现在,我只需要弄清楚要更改哪些项目,以使这些项目无法兼容64位版本 –

2

我不得不处理这个问题,事实证明的MSBuild喜欢生成的二进制文件移动到二进制文件\ release目录和引用这些,而不是项目本身,当它建立的东西。构建完成后,将文件复制到此目录。这解释了为什么它在Visual Studio中工作,而不是msbuild(我目前使用TFS 1010)。

在我来说,我有一个DLL的一个老的二进制版本通过,目前正在本应产生正确的文件一前一后建立了一个项目所引用。旧版本(二进制)覆盖新版本(从源代码构建),因为引用二进制版本的解决方案正在稍后构建。

0

在我的情况下,我有一个PCL引用另一个具有不同目标的PCL。 Visual Studio向我展示了第一个库的引用列表中的警告,但编译了解决方案,而MSBUILD拒绝编译。我通过重新定位PCL来解决问题。希望这有助于某人。

1

我假设项目的构建方式有所不同,因为Visual Studio不运行MSBuild,因为它主持了构建引擎本身。 已回答here

但是,我有类似的问题。

在我的案例中,项目引用了一个外部库,该库被放置在项目的子目录中,不太名为“packages”。

运行MSBuild后,该文件夹的内容被删除,据说由Nuget再次下载。

显而易见的解决方案是重命名文件夹,它的工作。

相关问题