C# 在某些项目中添加dll会出现以下错误:无法加载文件或程序集[…]

C# 在某些项目中添加dll会出现以下错误:无法加载文件或程序集[…],c#,asp.net,visual-studio,debugging,dll,C#,Asp.net,Visual Studio,Debugging,Dll,我正在尝试将DLL添加到我的解决方案中。我通过一个后期构建脚本来实现这一点,我可以看到DLL文件被完美地添加到了我的bin文件夹中 特别是,我通过后期构建脚本将gsdll32.dll加载到bin文件夹 在我的ASP.NET MVC 4.5项目中,我得到一个包含以下信息的错误页面: Could not load file or assembly 'mypath\bin\gsdll32.dll' or one of its dependencies. The module was expected

我正在尝试将DLL添加到我的解决方案中。我通过一个后期构建脚本来实现这一点,我可以看到DLL文件被完美地添加到了我的bin文件夹中

特别是,我通过后期构建脚本将
gsdll32.dll
加载到bin文件夹

在我的ASP.NET MVC 4.5项目中,我得到一个包含以下信息的错误页面:

Could not load file or assembly 'mypath\bin\gsdll32.dll' or one of its dependencies. The module was expected to contain an assembly manifest.
然而,我已经能够在另外两个网站(一个是Web Forms 4.5,另一个是ASP.NET MVC 4.5)上使用它

因此,我的问题是:如何调试这样的错误

问题不在于问题(尽管标题相同),而是我的项目中存在问题,并导致DLL文件给我一个
“无法加载”
错误

我的web.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=c55a5c561934e089" requirePermission="false" />
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <connectionStrings>
    my connection strings
  </connectionStrings>
  <appSettings>
    <add key="webpages:Version" value="2.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="PreserveLoginUrl" value="true" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
    <add key="RouteDebugger:Enabled" value="false" />

  </appSettings>
  <!--
    For a description of web.config changes see http://go.microsoft.com/fwlink/?LinkId=235367.

    The following attributes can be set on the <httpRuntime> tag.
      <system.Web>
        <httpRuntime targetFramework="4.5.1" />
      </system.Web>
  -->
  <system.web>
    <httpRuntime targetFramework="4.5" />
    <compilation debug="true" targetFramework="4.5.1" />
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880" />
    </authentication>
    <pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Optimization" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <handlers />
    <rewrite>
      <rules>
        <rule name="Redirect domain.com to www" patternSyntax="Wildcard" stopProcessing="true">
          <match url="*" />
          <conditions>
            <add input="{HTTP_HOST}" pattern="website.com" />
          </conditions>
          <action type="Redirect" redirectType="Permanent" url="http://www.domain.com/{R:0}" />
        </rule>
        <!--To always remove trailing slash from the URL-->
        <rule name="Remove trailing slash" stopProcessing="true">
          <match url="(.*)/$" />
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
          </conditions>
          <action type="Redirect" redirectType="Permanent" url="{R:1}" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-1.3.0.0" newVersion="1.3.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
  </entityFramework>
  <log4net>
    <root>
      <level value="DEBUG" />
      <appender-ref ref="ADONetAppender" />
    </root>
    <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
      <bufferSize value="1" />
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=publickey3134" />
      <connectionString value="server=.\SQLEXPRESS;initial catalog=LetterAmazer;integrated security=true" />
      <commandText value="INSERT INTO DbLog ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
      <parameter>
        <parameterName value="@log_date" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.RawTimeStampLayout" />
      </parameter>
      <parameter>
        <parameterName value="@thread" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%thread" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@log_level" />
        <dbType value="String" />
        <size value="50" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%level" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logger" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%logger" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%message" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@exception" />
        <dbType value="String" />
        <size value="2000" />
        <layout type="log4net.Layout.ExceptionLayout" />
      </parameter>
    </appender>
  </log4net>
</configuration>

我的连接字符串
最常见的原因——链接帖子中包含的“文件丢失”——根据OP不适用


第二个原因是进程位(对于ASP.Net站点可能是x64)和互操作/本机库(基于文件名可能是x86/32位)之间不匹配。解决方案-确保为每种口味使用匹配的程序集/本机映像。可能将托管代码复制到x64或x86平台上,以强制使用正确的本机二进制文件。

谢谢您的回答。我有两个网站在同一个解决方案,一个工作,和另一个,它没有。您是说我的解决方案中的两个网站(即一个运行x64,另一个运行x86)很可能存在差异吗?:-)@LarshHoldGaard,因为您已经检查过所有文件都已就位,所以我接下来要检查的是位不匹配(假设您使用IIS托管站点)。原因是在解决方案之外控制的进程比特数(即,在IIS中,这是您设置应用程序池的方式)-因此,即使两个站点位于同一个解决方案中,一个可以作为x86运行,另一个可以作为x64运行,如果托管在两个不同配置的应用程序池中。IIS不托管文件。但是,现在我一次删除一个DLL文件。当我删除一些“WebActivator.dll”文件时,我发现它起了作用。。。你知道DLL文件是如何产生这种影响的吗?:)非常感谢你的帮助wya@LarsHoldgaard-不知道。。。也许您可以尝试指定完整的ghostscript dll路径。