【发布时间】:2017-01-24 00:28:33
【问题描述】:
我已经为这个问题苦苦挣扎了几个星期了。我所有的 DLL 都被正确引用,设置为复制本地,我可以从本地机器构建我的应用程序到我们的构建机器。我的本地和构建框都安装了 Azure SDK 2.9,但是在我们的暂存环境中运行应用程序时,我们得到了
“无法加载文件或程序集 'Microsoft.Practices.EnterpriseLibrary.Common, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 或其依赖项之一。系统找不到指定的文件。”
我在登台机器上启用了融合日志,输出如下:
=== Pre-bind state information ===
日志:DisplayName = Microsoft.Practices.EnterpriseLibrary.Common,版本=5.0.505.0,文化=中性,PublicKeyToken=31bf3856ad364e35 (完全指定) 日志:Appbase = file:///F:/sitesroot/3/ 日志:初始 PrivatePath = F:\sitesroot\3\bin
调用程序集:(未知)。
LOG:此绑定在默认加载上下文中开始。 LOG:使用应用程序配置文件:F:\sitesroot\3\web.config LOG:使用主机配置文件:D:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet.config 日志:使用 D:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config 中的机器配置文件。 日志:策略后参考:Microsoft.Practices.EnterpriseLibrary.Common,Version=5.0.505.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35 日志:尝试下载新 URL 文件:///D:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files/public_[my DLL]/80b18788/752a457e/Microsoft.Practices.EnterpriseLibrary.Common .DLL。 日志:尝试下载新 URL 文件:///D:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files/public_[my DLL]/80b18788/752a457e/Microsoft.Practices.EnterpriseLibrary.Common /Microsoft.Practices.EnterpriseLibrary.Common.DLL。 日志:正在尝试下载新的 URL 文件:///F:/sitesroot/3/bin/Microsoft.Practices.EnterpriseLibrary.Common.DLL。 日志:正在尝试下载新的 URL 文件:///F:/sitesroot/3/bin/Microsoft.Practices.EnterpriseLibrary.Common/Microsoft.Practices.EnterpriseLibrary.Common.DLL。 日志:尝试下载新 URL 文件:///D:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files/public_[my DLL]/80b18788/752a457e/Microsoft.Practices.EnterpriseLibrary.Common 。EXE文件。 日志:尝试下载新 URL 文件:///D:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files/public_[my DLL]/80b18788/752a457e/Microsoft.Practices.EnterpriseLibrary.Common /Microsoft.Practices.EnterpriseLibrary.Common.EXE。 日志:正在尝试下载新的 URL 文件:///F:/sitesroot/3/bin/Microsoft.Practices.EnterpriseLibrary.Common.EXE。 日志:正在尝试下载新的 URL 文件:///F:/sitesroot/3/bin/Microsoft.Practices.EnterpriseLibrary.Common/Microsoft.Practices.EnterpriseLibrary.Common.EXE。
当我转到 D:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET 时,DLL 不存在,因此它显然是在寻找该 DLL 的“错误”位置。
我正在使用 VS 2013。有人有什么想法吗?
编辑:当我从本地构建时,我可以确认 bin 文件夹已被清除,然后再将一些 DLL 重新复制回该文件夹。奇怪的是,在那里成功复制的 DLL 不再在我的代码或配置文件中的任何地方引用。我也有一个后期构建脚本,但我确认这些旧的 DLL 也没有被引用。
第二次编辑:
我在其中一个暂存实例上找到了企业库 DLL,但它不在错误所指的目录中。我们有一个 Web 项目,它引用了第二个项目,该项目实际上是一个 Azure 云服务。所以看起来服务的文件夹是在 Temporary ASP.NET Files 文件夹下创建的,但它是空的。
DLL 在这里:
D:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\59a01799\5b6b1a2\assembly\dl3\11d624d2\4e820e1f_4413d201
我假设“root”是 Web 应用程序。错误在此文件夹中:
D:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files/[我的服务类库]/060e4c2a/e3b3457e/
适用于 Microsoft.Practices.EnterpriseLibrary.Common.DLL。我们为 Web 项目和引用的服务类库都有一个“包”文件夹,它们都包含所有必要的 DLL。所以我认为服务类库中可能有一个设置仍然指向根 Web 应用程序项目文件夹来查找 DLL,我只是不知道那是什么。
【问题讨论】:
-
您的暂存环境中似乎缺少 MS 企业库,您可以安装它吗? Microsoft Enterprise Library 5.0
-
我的所有引用都收到此错误,包括我们正在将此应用程序转换到的新添加的 Redis SessionStateProvider。而且我不相信 Redis DLL 依赖于正在安装的 EL DLL,所以我认为我在 Redis 引用中看到的错误与 EL 不在 Staging 中没有任何关系....
-
检查你是否达到了这个 MSBuild 限制,stackoverflow.com/questions/36270073/…