2010-06-08 3 views
4

Visual Studio 2010에서 ASP.NET 4 프로젝트를 빌드하려고하면 다음 오류가 발생합니다. "파일 또는 어셈블리를로드 할 수 없습니다 : file : /// 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

+0

Visual Studio 2010 문제 일 수 있습니다. 그러나 그것은 물론 추측입니다. 해결 방법을 찾지 않으려 고합니다. –

답변

1

블로그 herehere에 따르면이 원인은 신뢰할 수없는 어셈블리와 관련이있을 수 있습니다. 이 경우, 한 구성에서 작동하는 이유와 다른 구성에서 작동하는 이유를 상상할 수는 없지만 적어도 살펴볼 항목이 있습니다.

+0

그래, 그 게시물을 보았지만 그게 문제가되지 않습니다. 나는 Elmah dll을 다시 다운로드하고 전체 프로세스를 수행하려고 시도했지만 "차단 된"것으로 보이지 않습니다. 첫 번째 블로그 (http://cantgrokwontgrok.blogspot.com/2009/10/visual-studio-unknown-build-error.html?showComment=1264721898924#c2352316767675997414)에 댓글을 달았던 사람들 중 한 사람이 같은 문제. –

1

나는 이것이 약간 늦은 대답이지만, 나는 릴리스 모드에서 Elmah와 똑같은 문제를 경험하고 고쳤다. (그리고 OP와 마찬가지로, 디버그 모드도 잘 동작했다.)

Windows 탐색기에서 Elmah.dll의 속성을 수정하여 문제를 해결했습니다. 일반 탭에서 파일이 실제로 안전하다는 것을 탐색기에 알리기 위해 차단 해제를 클릭해야했습니다. 그 후 릴리스 모드가 잘 작동합니다.

+0

지금 다시 방문하기 - 알림을 보내 주셔서 감사합니다! 이전에이 문제가 발생했을 때 파일 차단 여부를 확인했습니다. 나는 이후 NuGet을 사용하여 Elmah를 내 프로젝트에 참여 시켰고, 이후로이 문제를 경험하지 못했습니다. 나는 이것을 답으로 제안 하겠지만, 나는 여전히 문제의 근본 원인이 무엇인지 알지 못한다. 그래서 나는 이것을 더 많은 대안으로 분류 할 것이라고 생각합니다. –

3

너무 늦을 수 있습니다.이 문제가 발생했습니다. 필자의 경우, 주석 (감사합니다 토마스!)에서 발견 한 지침에 따라 수정했습니다. this post

app.config에서 'Developer IT'주석 대화에서 동일한 작업을 수행합니다. 사실 다른 장소에 있어야합니다. 뒤에 나오는 지침을 따르십시오.


더 나은 해결책은 Microsoft의 sgen 배포를 "수정"하는 것입니다. 먼저 sgen을 찾습니다 (예를 들어, .NET 4.0의 경우 "C : \ Program Files \ Microsoft SDKs \ Windows \ v7.0A \ bin \ NETFX 4.0 Tools"에 있습니다.) 그런 다음 sgen.exe 파일을 만듭니다. 내용과 구성은 :의 sgen 응용 프로그램의 설정 파일에 true로 설정 loadFromRemoteResources를 추가하면 제대로 ClearCase를 볼륨에서 파일을로드 할 sgen 수 있습니다

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

점입니다. 알아. 나는 같은 문제에 봉착했다.

어떤 시점에서 Microsoft는 앱 구성 파일을 만들 수 있으므로이 경우 파일이 아직 존재하지 않는지 먼저 확인하고 필요한 경우 아직 설정이 필요한지 확인하십시오.


0

문제가 여러 가지 원인 일 수 있습니다.

은 혼합 모드 어셈블리를로드 할 때 노출되는 것으로 나타난다 ("ANY_CPU"와 "X86"모드로 컴파일합니다.)

나는 "X86"는의 가정 모드에 맞게 내 주요 프로그램의 컴파일 옵션을 수정 구성 요소 DLL 문제는 사라졌습니다.

dll 파일이로드되는 순서와 관련이있을 수 있습니다.

관련 문제