C# AppHarbor build不';t失败,则缺少DLL

C# AppHarbor build不';t失败,则缺少DLL,c#,asp.net-mvc-4,appharbor,C#,Asp.net Mvc 4,Appharbor,我有一个非常小、简单的ASP.NETMVC应用程序(我想是MVC4.NETFramework4),它由一个控制器和一个操作组成,服务于一个页面 我正在AppHarbor上部署它,在本地机器上用git推送它,我在本地运行它从来没有遇到过问题,AppHarbor上也从来没有出现过构建问题/错误,但偶尔一个新的构建(我的想法没有相关的改变)会开始抛出以下错误: 无法加载文件或程序集的Microsoft.Threading.Tasks, 版本=1.0.12.0,区域性=中性,PublicKeyToken

我有一个非常小、简单的ASP.NETMVC应用程序(我想是MVC4.NETFramework4),它由一个控制器和一个操作组成,服务于一个页面

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

无法加载文件或程序集的Microsoft.Threading.Tasks, 版本=1.0.12.0,区域性=中性,PublicKeyToken=b03f5f7f11d50a3a'或 它的一个依赖项。系统找不到指定的文件

在这个问题上,最上面的答案对它进行了排序,我删除了列出的依赖程序集,它再次起作用。但后来它又回来了。尝试了很多不同的建议,它总是使用nuget,尝试删除所有内容并重新安装,当我甚至不确定我更改了什么时,它又开始工作了,现在它不再工作了。今天我把它切换到了NuGet Package Restore,正如所述,但这并没有带来任何区别

我可以重新部署上一个工作版本,我注意到比较从AppHarbor下载的工作/不工作版本时,Web/App.configs是相同的(没有相关的程序集entry),但Microsoft.Threading.Tasks DLL和xmls(包括Extensions和Extensions.Desktop)不在损坏的版本中(在工作构建中,它们出现在根目录和bin中)

在该项目中,DLL是从应用程序的packages文件夹链接而来的,如果Copy Local是真的,它们不是Web应用程序的直接依赖项,而是其使用的Google Calendar API的直接依赖项

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

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

\Google.api.Gmail.v1.dll”。 正在从“D:\temp\voz3sra.vhb\input\TwitterBot\packages\Google.api.1.9.0\lib\net40\Google.api.PlatformServices.dll”复制文件 到“D:\temp\voz3srsa.vhb\output\Google.api.PlatformServices.dll”。 正在从“D:\temp\voz3sra.vhb\input\TwitterBot\packages\TweetSharp.2.3.1\lib\4.0\Hammock.ClientProfile.dll”复制文件 到“D:\temp\voz3sra.vhb\output\Hammock.ClientProfile.dll”。 正在从“D:\temp\voz3sra.vhb\input\TwitterBot\packages\log4net.2.0.3\lib\net40 full\log4net.dll”复制文件 至“D:\temp\voz3sra.vhb\output\log4net.dll”。 从“D:\temp\voz3sra.vhb\input\TwitterBot\packages\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.dll”复制文件 至“D:\temp\voz3sra.vhb\output\Microsoft.Threading.Tasks.dll”。

不工作的生成将有一个不同的dll(请再次查看底线Microsoft.Web.Infrastructure.dll):

\Google.api.Gmail.v1.dll”。 正在从“D:\temp\0kzqakoc.4jo\input\TwitterBot\packages\Google.api.1.9.0\lib\net40\Google.api.PlatformServices.dll”复制文件 到“D:\temp\0kzqakoc.4jo\output\Google.api.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\lib\net40\Microsoft.Web.Infrastructure.dll”复制文件 到“D:\temp\0kzqakoc.4jo\output\Microsoft.Web.Infrastructure.dll”。

查找构建中缺少的DLL,但我在本地尝试了命令提示符构建,效果很好

更新2 在试图解决这个问题的过程中,我注意到了关于参考版本构建的一条评论(不是警告):

< P> > 1考虑从“4.5.0.0”版本[C:\\用户\\Pult\tWeeTyp.2.3.1\LIB \\\NeNothSoop.JSO.DLL]到“60.0.0”版本[C:\用户\\Pult\NethOpth.JSO.60.6\Lab\NET40\NeNethSoop.JSO.DLL]来解决冲突和消除警告的App.CONFIG重新映射组件“Newtonsoft.Json,CuleKeNosik= 30AD4FE6B2A6AEED”。 1> C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1605,5):警告MSB3247:在同一依赖程序集的不同版本之间发现冲突


无法获取对其进行排序的重新映射,但确实获取了添加app.config的位置(这对于web应用程序来说毫无意义)重定向修复了web.config中的重定向没有修复的问题。这确实停止了构建问题,但没有什么意义。

我将此带到AppHarbor支持论坛,因为这里没有得到任何响应,他们非常有帮助,现在看起来它已经解决了

虽然在VisualStudio2012 Professional中,所有引用都标记为Copy Local True,但它们没有True标记,所以我手动添加了这三个库的引用。就是这样,DLL复制了

围绕这一差异有很多链接,MSBuild需要它们(尽管我尝试了MSBuild生成,但效果很好),Visual Studio默认情况下不会插入它们(如果将设置切换为false,然后切换为true,则可能会出现),并且它表现为不复制引用的引用