AppHarbor构建没有失败,缺少dll

时间:2015-05-19 15:37:19

标签: c# asp.net-mvc-4 appharbor

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

我在AppHarbor上部署它,在我的本地计算机上使用git推送它,我从来没有遇到过本地运行它的问题,它从来没有在AppHarbour上出现构建问题/错误但是偶尔会出现问题新版本(我的脑海中没有相关的更改)将开始抛出以下错误:

  

无法加载文件或程序集' Microsoft.Threading.Tasks,   Version = 1.0.12.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'要么   其中一个依赖项。系统找不到指定的文件。

调查这个最顶层的答案here对它进行了排序,我删除了列出的依赖程序集,然后又重新运行了。但后来又回来了。尝试了很多不同的建议,它总是使用nuget,尝试删除所有内容并重新安装,当我甚至不确定我改变了什么并且它现在不起作用时它再次开始工作再次。今天我按照概述here将其切换到NuGet Package Restore,但这没有任何区别。

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

在项目中,dll从应用程序的packages文件夹链接,Copy Local为True,它们不是Web App的直接依赖,而是它使用的Google Calendar API。

更新 在撰写答案的背后,我更仔细地查看了构建日志,并注意到工作和非工作构建之间存在明显差异。

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

  

\ Google.Apis.Gmail.v1.dll&#34 ;.            从" 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&#34 ;.            从" 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>考虑app.config重新映射程序集" Newtonsoft.Json,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed"来自版本" 4.5.0.0" [C:\ Users ... \ packages \ TweetSharp.2.3.1 \ lib \ 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中的重定向所在的位置#39;吨。这确实阻止了构建问题,但没有任何意义。

1 个答案:

答案 0 :(得分:0)

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

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

有很多关于这种差异的链接,MSBuild需要它们(尽管我已经尝试过MSBuild构建并且没问题),Visual Studio默认情况下不会插入它们(如果你切换设置可能会出现)假,然后是真的)并且它表现在不复制引用的引用。

Stack Overflow question, see highest voted answer not accepted hack

Raised with Microsoft and closed as not reproducible