【问题标题】:AppHarbor build doesn't fail, is missing dllsAppHarbor 构建没有失败,缺少 dll
【发布时间】: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


    【解决方案1】:

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

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

    围绕这种差异有很多链接,MSBuild 需要它们(尽管我已经尝试过 MSBuild 构建并且很好),Visual Studio 默认不插入它们(如果您切换设置 false 和然后为真)并且它表现在不复制引用的引用。

    Stack Overflow question, see highest voted answer not accepted hack

    Raised with Microsoft and closed as not reproducible

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-20
      • 2016-03-25
      • 2019-12-14
      相关资源
      最近更新 更多