我正在尝试使用MSBUILD从命令行清理和重建包含多个项目的解决方案文件。由于某些原因,我的构建失败了(大约10%的构建项目失败),并且我得到了多个错误,它们看起来都是这样的:
错误栏:类型或命名空间名称'foo‘在命名空间’CS0234‘中不存在(是否缺少程序集引用?)
现在,如果我使用完全相同的配置从Visual Studio2010中清理并重新构建相同的解决方案文件,它将成功构建而不会出现错误。
与Visual Studio相比,MSBuild的设置或配置中是否有我不知道的需要更改的差异?
发布于 2015-09-01 21:40:33
我不得不处理这个问题,事实证明,msbuild喜欢将构建的二进制文件移动到binaries\release目录中,并在构建时引用这些文件,而不是项目本身。在构建之后,将文件复制到此目录。这就解释了为什么它可以在visual studio而不是msbuild中工作(我目前使用的是TFS1010)。
在我的例子中,我有一个旧的二进制版本的dll被一个项目引用,该项目是在应该生成正确文件的项目之后构建的。旧的(二进制)覆盖了新的(从源代码构建的),因为引用二进制的解决方案是在稍后的构建中构建的。
发布于 2016-05-12 00:33:32
我假设项目的构建方式有所不同,因为Visual Studio并不运行MSBuild,而是托管构建引擎本身。这是here回答的问题。
然而,我也遇到过类似的问题。
在我的例子中,项目引用了一个外部库,它被放在项目的子目录中,不幸的是命名为"packages“。
在运行MSBuild之后,文件夹的内容被删除,理应由Nuget再次下载。
显而易见的解决方案是重命名文件夹,它起作用了。
发布于 2014-06-30 17:42:05
尝试检查MSBuild在非构建库的项目文件中找不到的引用的路径。有时,当您使用VS或ReSharper自动为您添加引用时,路径最终指向\obj目录。VS似乎能够应对这一点,但MSBuild并非如此。
https://stackoverflow.com/questions/24458379
复制相似问题