【问题标题】:MSBuild failing to build referenced projects when upgrading to VS2010升级到 VS2010 时 MSBuild 无法构建引用的项目
【发布时间】:2010-12-08 15:41:12
【问题描述】:

我最近将包含一些 C# 代码项目和一个 ASP.net 网站项目的 .Net 3.5 解决方案升级到 VS2010(从 VS2008)。它在 VS 中构建和运行良好,但是当我尝试通过 TeamCity 使用 MSBuild 4.0 在我的服务器上构建它时遇到了一些问题。似乎没有构建从网站引用的项目。在我升级到 VS2010、MSbuild 4.0 和 Windows SDK 7.1 之前,一切正常。

在我用来从 teamcity 构建的 msbuild 脚本中,我为网站定义了项目引用,如下所示:

  <ProjectReference Include="..\src\trunk\DataAccess\DataAccess.csproj">
     <Project>{C43242F4-7286-4BEC-9A27-001D6FC14860}</Project>
     <Name>DataAccess</Name>
  </ProjectReference>

当我尝试运行构建脚本时,我收到一条错误消息,指出尝试将其从引用项目的 bin 文件夹复制到网站的 bin 文件夹时找不到 dll 文件。发生这种情况是因为引用的项目实际上根本没有构建(项目目录中不存在 bin 文件夹)。

有人知道是什么原因造成的吗?我对 MSbuild 不是很有经验,所以我可能忽略了一些重要的东西。如果没有项目输出,MSbuild不是会自动尝试构建引用的项目吗?

将不胜感激!

【问题讨论】:

  • 你能发布你的csproj文件的内容吗?只是开始,直到参考部分开始。

标签: asp.net visual-studio-2010 msbuild web


【解决方案1】:

我需要更多信息来指导您,但我会突然尝试添加

/toolsversion:3.5

到您的 msbuild 通话。

【讨论】:

  • 尝试将 toolsversion 设置为 3.5,但随后我的构建脚本再次崩溃,因为 3.5 工具不支持此脚本:C:\Program Files\Microsoft SDKs\Windows\v7 .1\Bin\。我发现我需要设置它以使 MSBuild 使用正确版本的 aspnet_merge.exe。如果我没有指定,它将运行 FX .Net 4.0 版本的 aspnet_merge.exe 代替..
  • 我设法消除了在我的脚本中设置 TargetFrameworkSDKDirectoryBin 的需要,然后我开始使用 Toolsversion 3.5 运行该项目。猜猜看:它奏效了!非常感谢!然而,我很好奇为什么 toolsversion 4.0 会这样。有什么想法吗?
  • 还没有。我仍在挖掘差异,主要是因为 Silverlight 项目存在类似的问题。只是我现在知道 4.0 Tools 版本存在一些差异(甚至可能是奇怪的 bug),所以我认为在 3.5 项目中使用 3.5 可能有助于恢复原始行为。
【解决方案2】:

我在这个网站上发现了另一个帖子,描述了您完全相同的问题。我也遇到了同样的问题。 MSDN 网站上的这个blog 描述了问题和解决方法。基本上这是对不是 MSBuild 格式的解决方案文件的限制,而只是一个花哨的文本文件。真正的事情是,需要在项目文件中指定依赖项,而不是解决方案文件。啊...只需阅读链接,它的解释比我在这里的答案好一百倍。

【讨论】:

    猜你喜欢
    • 2014-03-07
    • 2018-08-21
    • 1970-01-01
    • 2019-09-28
    • 2020-07-01
    • 1970-01-01
    • 2016-04-15
    • 2017-07-24
    • 1970-01-01
    相关资源
    最近更新 更多