2010-06-08 87 views
4

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

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

当我将解决方案配置切换到“发布”时,构建只会失败。当解决方案配置设置为“调试”时,它不会失败。

两个配置之间唯一的区别(即我知道的)示于以下的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> 

我已经使用融合日志查看器来跟踪尝试程序集绑定问题,但它看起来像正在查找并加载程序集。这里是日志:

*** 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. 

我觉得我有一个根本的缺乏理解,在这里究竟是怎么回事。任何解释/帮助非常感谢!

+0

0x80131515是COR_E_NOTSUPPORTED,即某事正在抛出一个NotSupportedException。但是,浏览Elmah源代码时除了包含的程序集外,没有对NotSupportedException的引用: -/ – Rup 2010-06-08 16:30:10

+0

在我看来,这可能是Visual Studio 2010问题。但是,这当然只是一个猜测。关闭寻找解决方法! – 2010-06-08 16:45:19

回答

1

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

+0

是的,我看到了那些帖子,但这似乎不是问题。我已经尝试重新下载Elmah dll并在整个过程中进行,但它们似乎没有被“封锁”。尽管在第一个博客上发表评论的人(http://cantgrokwontgrok.blogspot.com/2009/10/visual-studio-unknown-build-error.html?showComment=1264721898924#c2352316767675997414)似乎正在经历精确的同样的问题。 – 2010-06-08 16:43:36

1

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

我通过在Windows资源管理器中修改Elmah.dll的属性解决了我的问题 - 从常规选项卡中,我必须单击解除阻止来说服探险家文件确实安全。之后,发布模式发布工作正常。

+0

现在重温这个 - 感谢提醒!回到我遇到这个问题时,我确实检查了文件是否被阻止(不是)。自从我开始使用NuGet将Elmah带入我的项目之后,我从未遇到过这个问题。我会提出这个答案,但我仍然不知道问题的根本原因是什么。所以我想我会更多地将它归类为解决方法。 – 2011-09-01 18:39:58

3

可能为时已晚,我遇到过这个问题。在我的情况下,我修复了以下说明,我在评论中发现(谢谢托马斯!)this post

在'开发人员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应用程序配置文件设置为true loadFromRemoteResources允许SGEN正确地从ClearCase的卷加载文件。我知道。我遇到了同样的问题,这是我如何解决它。

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


0

问题可能有多种原因。

出现加载混合模式程序集时暴露(在“ANY_CPU”和“X86”模式下进行编译。)

我修改了编译选项为我的主程序“X86”相匹配的假设模式组件DLL。问题消失了。

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

相关问题