AppHarbor 构建不会失败,缺少 dll

AppHarbor build doesn't fail, is missing dlls

我有一个非常小、简单的 ASP.NET MVC 应用程序(我认为是 MVC 4。.NET Framework 4)它由一个控制器和一个服务于一页的操作组成。

我正在 AppHarbor 上部署它,在我的本地机器上用 git 推送它,我从来没有遇到过问题 运行 它在本地也从来没有构建 issues/errors在 AppHarbour 上,但时不时地,一个新的构建(在我看来没有 相关 改变)将开始抛出以下错误:

Could not load file or assembly 'Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.

查看这个最佳答案 here sorted it, I removed the dependent assemblies listed and it worked again. But then it came back. Tried a lot of different suggestions, it has always used nuget, tried removing everything and re-installing, it started working again when I wasn't even sure what I'd changed and now it isn't working again. Today I switched it to NuGet Package Restore as outlined here 但这没有任何区别。

我可以重新部署最后一个工作版本,我注意到比较从 AppHarbor 下载的 working/not 工作版本是 Web/App.configs 是相同的(没有依赖程序集条目)但是Microsoft.Threading.Tasks dll 和 xml(包括扩展和 Extensions.Desktop)不在损坏的构建中(在工作构建中它们出现在根目录和 bin 中)?

在项目中,dll 是从应用程序的包文件夹链接的,并且 Copy Local 是 True,它们不是 Web 应用程序的直接依赖项,而是 Google 日历 API它的使用。

更新 在写完答案后,我更仔细地查看了构建日志,并注意到工作构建和不工作构建之间的明显区别。

Microsoft.Threading.Tasks.dll 不是直接依赖项,它是 Google.Apis.Gmail.v1.dll 所必需的,在工作构建中,构建日志将包含(请参阅底行复制 Microsoft.Threading.Tasks.dll):

\Google.Apis.Gmail.v1.dll". Copying file from "D:\temp\voz3srsa.vhb\input\TwitterBot\packages\Google.Apis.1.9.0\lib\net40\Google.Apis.PlatformServices.dll" to "D:\temp\voz3srsa.vhb\output\Google.Apis.PlatformServices.dll". Copying file from "D:\temp\voz3srsa.vhb\input\TwitterBot\packages\TweetSharp.2.3.1\lib.0\Hammock.ClientProfile.dll" to "D:\temp\voz3srsa.vhb\output\Hammock.ClientProfile.dll". Copying file from "D:\temp\voz3srsa.vhb\input\TwitterBot\packages\log4net.2.0.3\lib\net40-full\log4net.dll" to "D:\temp\voz3srsa.vhb\output\log4net.dll". Copying file from "D:\temp\voz3srsa.vhb\input\TwitterBot\packages\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.dll" to "D:\temp\voz3srsa.vhb\output\Microsoft.Threading.Tasks.dll".

一个不工作的构建将在它的位置有一个不同的 dll(再次查看底线,Microsoft.Web.Infrastructure.dll):

\Google.Apis.Gmail.v1.dll". Copying file from "D:\temp[=12=]kzqakoc.4jo\input\TwitterBot\packages\Google.Apis.1.9.0\lib\net40\Google.Apis.PlatformServices.dll" to "D:\temp[=12=]kzqakoc.4jo\output\Google.Apis.PlatformServices.dll". Copying file from "D:\temp[=12=]kzqakoc.4jo\input\TwitterBot\packages\TweetSharp.2.3.1\lib.0\Hammock.ClientProfile.dll" to "D:\temp[=12=]kzqakoc.4jo\output\Hammock.ClientProfile.dll". Copying file from "D:\temp[=12=]kzqakoc.4jo\input\TwitterBot\packages\log4net.2.0.3\lib\net40-full\log4net.dll" to "D:\temp[=12=]kzqakoc.4jo\output\log4net.dll". Copying file from "D:\temp[=12=]kzqakoc.4jo\input\TwitterBot\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll" to "D:\temp[=12=]kzqakoc.4jo\output\Microsoft.Web.Infrastructure.dll".

查看构建中缺少的 dll,我发现 this answer 但我已经尝试在本地构建命令提示符并且它工作正常。

更新 2 同样在尝试解决这个问题时,我注意到关于参考版本的构建评论(不是警告):

1> Consider app.config remapping of assembly "Newtonsoft.Json, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed" from Version "4.5.0.0" [C:\Users...\packages\TweetSharp.2.3.1\lib.0\Newtonsoft.Json.dll] to Version "6.0.0.0" [C:\Users...\packages\Newtonsoft.Json.6.0.6\lib\net40\Newtonsoft.Json.dll] to solve conflict and get rid of warning. 1>C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1605,5): warning MSB3247: Found conflicts between different versions of the same dependent assembly.

无法获得对其进行排序的重新映射,但确实获得了 this,其中添加了 app.config(这对 Web 应用程序没有意义)重定向修复了 [=] 中的重定向57=] 没有。这确实阻止了构建问题,但意义不大。

我把它带到了 AppHarbor 支持论坛,因为它在这里没有得到任何回应,Build succeeding but missing dll 他们非常有帮助,现在看起来它已经解决了。

尽管在 Visual Studio 2012 Professional 中,所有引用都被标记为 Copy Local True,但它们没有 True 标签,因此我为相关的三个库手动添加了这些。就是这样,复制了 DLL。

围绕这个差异有很多链接,MSBuild 需要它们(尽管我已经尝试过 MSBuild 构建并且它很好),Visual Studio 默认情况下不会插入它们(如果您可能会出现将设置切换为 false,然后切换为 true),它表现为不复制引用引用。

Stack Overflow question, see highest voted answer not accepted hack

Raised with Microsoft and closed as not reproducible