首页 文章

Visual Studio构建成功,MSBuild失败

提问于
浏览
12

我正在尝试使用MSBUILD从命令行清理和重建包含多个项目的解决方案文件 . 由于某种原因,我的构建失败(大约10%的构建项目失败),我得到多个错误,看起来像:

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

现在,如果我使用完全相同的配置从Visual Studio 2010清理和重建相同的解决方案文件,它将成功构建,没有错误 .

从Visual Studio中安装的MSBuild的设置或配置是否有所不同,我不知道?

6 回答

  • 2

    我只需要解决这个问题,事实证明msbuild喜欢将构建的二进制文件移动到二进制文件\ release目录中,并在构建内容时引用它们而不是项目本身 . 构建之后,将文件复制到此目录 . 这解释了为什么它在visual studio中工作而不是msbuild(我目前正在使用TFS 1010) .

    在我的情况下,我有一个旧的二进制版本的dll被一个项目引用,该项目是在应该生成正确文件的项目之后构建的 . 旧的(二进制)覆盖了新的(二进制),因为引用二进制的解决方案正在构建中稍后构建 .

  • 0

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

    但是,我遇到了类似的问题 .

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

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

    显而易见的解决方案是重命名文件夹并且工作正常 .

  • 0

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

  • 1

    对我来说问题是解决方案中的一些项目没有包含在解决方案的构建配置中 . 这些项目是构建配置中项目的依赖项,因此解决方案中的所有项目都失败了 .

    在解决方案配置中使用build标记dependcies项目后,msbuild成功运行 .

  • 3

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

  • 1

    摘要:将Visual Studio中的调试/发布模式设置为与MSBuild相同的设置,以检查编译错误 .

    我遇到了同样的问题:

    • 尝试删除所有“bin”和“obj”文件夹 .

    • 确保所有相关项目确实被引用,而不仅仅是编译dll . 恩 . 项目B参考A.从解决方案中删除A.然后再添加一次 . 然后B将引用A但仅通过编译的dll . 删除引用并重新添加项目 .

    最后在Visual Studio中切换到“Release” . 事实证明我在某些代码中有条件编译(例如#if DEBUG) . 那么在MSBuild和Visual Studio中运行的实际上是不同的,因此错误“命名空间'栏中不存在类型或命名空间名称'foo'(你是否缺少程序集引用?)”

相关问题