【发布时间】:2015-05-19 15:37:19
【问题描述】:
我有一个非常小的、简单的 ASP.NET MVC 应用程序(我认为是 MVC 4。.NET Framework 4)它由一个控制器和一个操作为一页提供服务。
我在 AppHarbor 上部署它,在我的本地机器上用 git 推送它,我在本地运行它从来没有遇到过问题,它从来没有在 AppHarbour 上遇到过构建问题/错误,但时不时地有一个新构建(使用没有相关改变我的想法)将开始抛出以下错误:
无法加载文件或程序集“Microsoft.Threading.Tasks, 版本=1.0.12.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a' 或 它的依赖项之一。系统找不到指定的文件。
查看这个最佳答案here 对其进行了排序,我删除了列出的依赖程序集并且它再次工作。但后来它又回来了。尝试了很多不同的建议,它一直使用 nuget,尝试删除所有内容并重新安装,当我什至不确定我改变了什么时它又开始工作了,现在它不再工作了。今天我按照here 的概述将它切换到 NuGet 包还原,但这并没有任何区别。
我可以重新部署最后一个工作构建,我注意到比较从 AppHarbor 下载的工作/不工作构建是 Web/App.configs 是相同的(没有依赖的程序集条目)但 Microsoft.Threading.Tasks dll 和 xmls(包括 Extensions 和 Extensions.Desktop)不在损坏的构建中(在工作构建中它们出现在根目录和 bin 中)?
在项目中,dll 从应用程序的包文件夹中链接,并且 Copy Local 为 True,它们不是 Web 应用程序的直接依赖项,而是其使用的 Google Calendar API 的直接依赖项。
更新 在写完答案后,我更仔细地查看了构建日志,并注意到工作和不工作构建之间的明显区别。
Microsoft.Threading.Tasks.dll 不是直接依赖项,它是 Google.Apis.Gmail.v1.dll 所必需的,在工作构建中构建日志将包含(请参阅复制 Microsoft.Threading.Tasks 的底线.dll):
\Google.Apis.Gmail.v1.dll”。 从“D:\temp\voz3srsa.vhb\input\TwitterBot\packages\Google.Apis.1.9.0\lib\net40\Google.Apis.PlatformServices.dll”复制文件 到“D:\temp\voz3srsa.vhb\output\Google.Apis.PlatformServices.dll”。 从“D:\temp\voz3srsa.vhb\input\TwitterBot\packages\TweetSharp.2.3.1\lib\4.0\Hammock.ClientProfile.dll”复制文件 到“D:\temp\voz3srsa.vhb\output\Hammock.ClientProfile.dll”。 从“D:\temp\voz3srsa.vhb\input\TwitterBot\packages\log4net.2.0.3\lib\net40-full\log4net.dll”复制文件 到“D:\temp\voz3srsa.vhb\output\log4net.dll”。 从“D:\temp\voz3srsa.vhb\input\TwitterBot\packages\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.dll”复制文件 到“D:\temp\voz3srsa.vhb\output\Microsoft.Threading.Tasks.dll”。
一个不工作的构建将有一个不同的 dll 代替(再次参见底线,Microsoft.Web.Infrastructure.dll):
\Google.Apis.Gmail.v1.dll”。 从“D:\temp\0kzqakoc.4jo\input\TwitterBot\packages\Google.Apis.1.9.0\lib\net40\Google.Apis.PlatformServices.dll”复制文件 到“D:\temp\0kzqakoc.4jo\output\Google.Apis.PlatformServices.dll”。 从“D:\temp\0kzqakoc.4jo\input\TwitterBot\packages\TweetSharp.2.3.1\lib\4.0\Hammock.ClientProfile.dll”复制文件 到“D:\temp\0kzqakoc.4jo\output\Hammock.ClientProfile.dll”。 从“D:\temp\0kzqakoc.4jo\input\TwitterBot\packages\log4net.2.0.3\lib\net40-full\log4net.dll”复制文件 到“D:\temp\0kzqakoc.4jo\output\log4net.dll”。 从“D:\temp\0kzqakoc.4jo\input\TwitterBot\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll”复制文件 到“D:\temp\0kzqakoc.4jo\output\Microsoft.Web.Infrastructure.dll”。
查看构建中缺少的 dll,我发现了 this answer,但我已尝试在本地构建命令提示符,它工作正常。
更新 2 同样在尝试解决这个问题时,我注意到关于参考版本的构建(不是警告)的评论:
1> 考虑从版本 "4.5.0.0" [C:\Users...\packages\TweetSharp.2.3.1\lib 重新映射程序集 "Newtonsoft.Json, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed" \4.0\Newtonsoft.Json.dll] 到版本 "6.0.0.0" [C:\Users...\packages\Newtonsoft.Json.6.0.6\lib\net40\Newtonsoft.Json.dll] 解决冲突并获取摆脱警告。 1>C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1605,5):警告MSB3247:发现同一依赖程序集的不同版本之间存在冲突。
无法获得对其进行排序的重新映射,但确实获得了this,其中添加了一个 app.config(这对 Web 应用程序没有意义)重定向修复了它,而 web.config 中的重定向没有。这确实停止了构建问题,但意义不大。
【问题讨论】:
标签: c# asp.net-mvc-4 appharbor