如何绑定到/ bin文件夹外的程序集

时间:2012-08-03 17:16:40

标签: binding .net-assembly

我在IIS7中设置了一个名为CCESD的网站;我的应用程序根文件夹是D:\ Websites \ CCESD \ CCESD。我还有一个文件夹,在D:\ Websites \ CCESD \ CCESD \ BinCommon中持有第三方程序集(并非所有程序集都是强名称):这是因为我在IIS的这个根站点下还有许多其他Web应用程序共享DLL,其中一些是非托管代码,因此不能进入GAC。我的web.config文件如下所示:

<compilation defaultLanguage="c#" debug="true" targetFramework="4.0"> 
  <assemblies> 
    ... 
    <add assembly="Telerik.Web.UI, Version=2012.1.288.40, Culture=neutral, PublicKeyToken=121FAE78165BA3D4" /> 
  </assemblies> 
</compilation> 

... 

<runtime> 
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <probing privatePath="BinCommon" /> 
  </assemblyBinding> 
</runtime>

但是,当我尝试运行Web应用程序时,出现以下错误(启用程序集绑定错误日志记录后):

  

分析器错误消息:无法加载文件或程序集'Telerik.Web.UI,   版本= 2012.1.288.40,文化=中立,   PublicKeyToken = 121fae78165ba3d4'或其依赖项之一。该   系统找不到指定的文件。

     

源文件:D:\ Websites \ CCESD \ CCESD \ web.config行:144

     

装配加载跟踪:以下信息可能对您有所帮助   确定装配的原因'Telerik.Web.UI,Version = 2012.1.288.40,   Culture = neutral,PublicKeyToken = 121fae78165ba3d4'无法加载。

     

装配管理器从以下位置加载:   C:\的Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ clr.dll

     

在可执行文件c:\ windows \ system32 \ inetsrv \ w3wp.exe下运行

     

---详细的错误日志如下。

     

===预绑定状态信息===

     

日志:用户= IIS APPPOOL \ CCESD

     

LOG:DisplayName = Telerik.Web.UI,Version = 2012.1.288.40,Culture = neutral,PublicKeyToken = 121fae78165ba3d4(Full-specified)

     

日志:Appbase = file:/// D:/网站/ CCESD / CCESD /

     

日志:初始PrivatePath = D:\ Websites \ CCESD \ CCESD \ bin呼叫   汇编:(未知)。 ===

     

日志:此绑定在默认加载上下文中启动。

     

日志:使用应用程序配置文件:   D:\ Websites \ CCESD \ CCESD \ web.configLOG:使用主机配置文件:   C:\的Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ aspnet.config

     

日志:使用来自的机器配置文件   C:\的Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ CONFIG \ machine.config中

。      

日志:政策后参考:Telerik.Web.UI,版本= 2012.1.288.40,   Culture = neutral,PublicKeyToken = 121fae78165ba3d4

     

日志:尝试下载新网址   文件:/// C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary   ASP.NET Files / root / e11e9098 / 9e133b72 / Telerik.Web.UI.DLL。

     

日志:尝试下载新网址   文件:/// C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary   ASP.NET   文件/根/ e11e9098 / 9e133b72 / Telerik.Web.UI / Telerik.Web.UI.DLL。

     

日志:尝试下载新网址   文件:/// d:/Websites/CCESD/CCESD/bin/Telerik.Web.UI.DLL

     

日志:尝试下载新网址   文件:/// d:/Websites/CCESD/CCESD/bin/Telerik.Web.UI/Telerik.Web.UI.DLL

     

日志:尝试下载新网址   文件:/// C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary   ASP.NET Files / root / e11e9098 / 9e133b72 / Telerik.Web.UI.EXE。

     

日志:尝试下载新网址   文件:/// C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary   ASP.NET   文件/根/ e11e9098 / 9e133b72 / Telerik.Web.UI / Telerik.Web.UI.EXE。

     

日志:尝试下载新网址   文件:/// d:/Websites/CCESD/CCESD/bin/Telerik.Web.UI.EXE

     

日志:尝试下载新网址   文件:/// d:/Websites/CCESD/CCESD/bin/Telerik.Web.UI/Telerik.Web.UI.EXE

我已检查过该文件是否存在且版本和公钥信息是否正确。我做错了什么?

1 个答案:

答案 0 :(得分:1)

我最终找到了它;最后,归结为:

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">

我的项目开始于Visual Studio 2005;因此,上面显示的xmlns属性出现在我的web.config文件的contains元素中。删除它修复了问题,现在我的程序集正确加载。

谷歌搜索显示xmlns属性是在Visual Studio中实现智能感知(确实如此):它没有说明对加载程序集有任何影响,所以这有点奇怪(更不用说烦人)。不过,现在它正在发挥作用。