VS2010装配加载错误

时间:2010-06-08 16:23:32

标签: asp.net visual-studio-2010

当我尝试在Visual Studio 2010中构建ASP.NET 4项目时出现以下错误:“无法加载文件或程序集”文件:/// C:\ Dev \ project \ trunk \ bin \ Elmah .dll'或其中一个依赖项。不支持操作。(HRESULT异常:0x80131515)“。

我已经确认dll确实存在,并且正在被正确复制到bin文件夹。我也尝试删除然后重新添加项目的引用。

当我将解决方案配置切换为“发布”时,构建仅失败。当Solution Configuration设置为“Debug”时,它不会失败。

两个配置(我所知道的)之间的唯一区别显示在以下Web.config转换中,Web.Release.config:

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
    <connectionStrings>
      <add name="SqlServer" connectionString="" providerName="System.Data.SqlClient" xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    </connectionStrings>
    <system.web>
        <compilation xdt:Transform="RemoveAttributes(debug)" />
        <customErrors mode="On" xdt:Transform="Replace">
            <error statusCode="404" redirect="lost.htm" />
            <error statusCode="500" redirect="uhoh.htm" />
        </customErrors>
    </system.web>
</configuration>

我尝试使用Fusion Log Viewer来追踪程序集绑定问题,但看起来它正在查找并正确加载程序集。这是日志:

*** Assembly Binder Log Entry  (6/8/2010 @ 10:01:54 AM) ***

The operation was successful.
Bind result: hr = 0x0. The operation completed successfully.

Assembly manager loaded from:  C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
Running under executable  c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\sgen.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: User = User
LOG: Where-ref bind. Location = C:\Dev\project\trunk\bin\Elmah.dll
LOG: Appbase = file:///c:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/bin/NETFX 4.0 Tools/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = sgen.exe
Calling assembly : (Unknown).
===
LOG: This bind starts in LoadFrom load context.
WRN: Native image will not be probed in LoadFrom context. Native image will only be probed in default load context, like with Assembly.Load().
LOG: No application configuration file found.
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Attempting download of new URL file:///C:/Dev/project/trunk/bin/Elmah.dll.
LOG: Assembly download was successful. Attempting setup of file: C:\Dev\project\trunk\bin\Elmah.dll
LOG: Entering run-from-source setup phase.
LOG: Assembly Name is: Elmah, Version=1.1.11517.0, Culture=neutral, PublicKeyToken=null
LOG: Re-apply policy for where-ref bind.
LOG: Where-ref bind Codebase does not match what is found in default context. Keep the result in LoadFrom context.
LOG: Binding succeeds. Returns assembly from C:\Dev\project\trunk\bin\Elmah.dll.
LOG: Assembly is loaded in LoadFrom load context.

我觉得我对这方面到底发生了什么的根本缺乏了解。任何解释/帮助都非常感谢!

4 个答案:

答案 0 :(得分:3)

可能为时已晚,我遇到过这个问题。就我而言,我修复了我在this post

中的评论(感谢Thomas!)中发现的说明

在'开发者IT'评论中谈到在app.config中做同样的事情。实际上必须在其他地方。按照背后的说明进行操作。


更好的解决方案是“修复”微软的sgen发行版。首先找到sgen(例如,在我的.Net 4.0系统上,它位于“C:\ Program Files \ Microsoft SDKs \ Windows \ v7.0A \ bin \ NETFX 4.0 Tools”。)接下来,创建文件sgen.exe。配置内容:

<configuration> 
  <runtime> 
    <loadFromRemoteSources enabled="true" /> 
  </runtime> 
</configuration> 

关键是,在sgen app配置文件中将loadFromRemoteResources设置为true允许sgen从ClearCase卷正确加载文件。我知道。我遇到了同样的问题,这就是我修复它的方法。

请注意,在某些时候Microsoft可能会创建应用程序配置文件,因此如果您这样做,请先检查该文件是否已存在,如果存在,请检查是否仍需要该设置。


答案 1 :(得分:1)

根据博客herehere,原因可能与不受信任的程序集有关。如果是这种情况,我无法想象它为什么会在一种配置中起作用而不是另一种配置,但至少要看一下。

答案 2 :(得分:1)

我意识到这是一个稍晚的回复,但我刚刚在发布模式中遇到并修复了与Elmah完全相同的问题(和OP一样,调试模式工作正常)。

我通过在Windows资源管理器中修改Elmah.dll的属性来修复我的问题 - 从常规选项卡中,我必须单击“取消阻止”以说服资源管理器该文件确实是安全的。之后,发布模式发布工作正常。

答案 3 :(得分:0)

问题可能有多种原因。

加载混合模式程序集时似乎暴露出来(在&#34; ANY_CPU&#34;&#34; X86&#34;模式下编译。)

我将主程序的编译选项修改为&#34; X86&#34;匹配组件DLL的假定模式。问题消失了。

这可能与加载dll文件的顺序有关。