Web.config system.webserver错误

时间:2014-12-08 08:31:32

标签: asp.net

我正在尝试将我的C#ASP.Net应用部署到我的托管网站。问题是我有2个应用程序使用的C ++ dll,但是使用共享主机,它们不能位于bin文件夹中。它们已在项目中被引用,名为' bin_native'。该应用程序在我的机器上运行,使用我的Default.aspx文件顶部的web.config和Assembly指令的运行时部分中的探测privatePath。但它不会像这样在服务器上运行。在网站加载时解析default.aspx时无法找到dll,并且该文件顶部的2 Assembly指令出错。

所以我试图在web.config的system.webserver部分添加对dll的引用。对该网站的支持说,如果我可以这样做,也许应用程序可以使用位于我的网站wwwroot文件夹(ASP.Net bin文件夹所在的位置)的父目录中的单独bin文件夹。这样,应用程序就可以找到dll。

但是我无法正确地使system.webserver部分正确无误。当我在我的机器上测试时,我收到以下错误:

Server Error in '/' Application.

Could not load file or assembly 'find_duplicates, Version=0.0.0.0, Culture=neutral, PublicKeyToken=e02ee5289fcc8248' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.IO.FileLoadException: Could not load file or assembly 'find_duplicates, Version=0.0.0.0, Culture=neutral, PublicKeyToken=e02ee5289fcc8248' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

以下是我迄今为止所做项目的变化:

Default.aspx的:

<%@ Assembly Name="find_duplicates" %>
<%@ Assembly Name="trim_combos" %>

的Web.config:

 <system.webServer>

    <modules runAllManagedModulesForAllRequests="true">

     <add name="find_duplicates" type="find_dups.find_duplicates, find_duplicates,Version=0.0.0.0, Culture=neutral, PublicKeyToken=e02ee5289fcc8248"  />

      <add name="trim_combos" type="trim_coms.trim_combos, trim_combos, Version=0.0.0.0, Culture=neutral, PublicKeyToken=e02ee5289fcc8248"  />

     </modules>

    <validation validateIntegratedModeConfiguration="false" />

  </system.webServer>

 <runtime>  

    <dependentAssembly>

       <assemblyIdentity name="find_dups.find_duplicates.find_duplicates" publicKeyToken="e02ee5289fcc8248" culture="neutral" />

    </dependentAssembly>

    <dependentAssembly>

        <assemblyIdentity name="trim_coms.trim_combos.trim_combos" publicKeyToken="e02ee5289fcc8248" culture="neutral" />

    </dependentAssembly> 



   <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

        <probing privatePath="bin_native"/>

   </assemblyBinding>

</runtime>

我的dll在头文件中定义为:

find_duplicates dll

namespace   find_dups
class       find_duplicates

trim_combos   dll

namespace   trim_coms
class       trim_combos

我在Windows 7 64位上以集成管道模式运行IIS。这就是为什么我使用system.webserver部分而不是web.config中的system.web部分。

对此的任何帮助将不胜感激。提前谢谢。

1 个答案:

答案 0 :(得分:1)

我得到了它的工作。我的dll没有被管理(它们是本机模块)所以它无法为它们加载类型,即使它们有类和命名空间。显然,对于本机模块,您只需使用添加名称,而不是其他内容,如下所示:

<system.webServer>

    <globalModules>

      <add name="find_duplicates"/>

    </globalModules>

  </system.webServer>