2010-08-03 3 views
5

내가 닷넷 DLL에 소모하고 타사 COM 개체에 대한 비주얼 스튜디오에 의해 생성 된 상호 운용성의 DLL을 가지고있다.GAC - 조립은 "파일 또는 어셈블리를로드 할 수 없습니다"는 GAC에 있지만

내 소모 DLL 및 GAC에 Interop를 dll을 모두 등록했다. 이 DLL은 SharePoint 2010 워크 플로에서 사용되기 때문에 GAC를 사용해야합니다.

내 dll이 Interop DLL을 호출하는 지점에 도달하면 다음 오류가 발생합니다. ""파일 또는 어셈블리를로드 할 수 없습니다 "..."시스템이 예상되는 버전과 공개와 함께 지정된 파일을 찾을 수 없습니다 " 키.

내가 로그 뷰어를 결합 퓨전 총회를 살펴보면, 다음과 같은 오류가 인터롭의 DLL의 로그 항목에 나열되어 있습니다 : 내가 GAC에서 해당 어셈블리를 볼 수 있습니다

LOG: GAC Lookup was unsuccessful. 

, 그리고 올바른 버전이 및 FileNotFound 예외로 지정된 공개 키 토큰

무슨 일이야?

답변

4

문제는 버전 및 공개 키가 유효 인 것을뿐만 아니라, 인터롭의 프로세서 아키텍처가 부르심의 일치해야합니다입니다 DLL. 물론 대상 프레임 워크는 동일한 버전이어야합니다.

내 DLL은 MSIL (불가지론, anycpu를) 프로세서로 컴파일하지만, 어떤 이상한 이유로 Visual Studio에서 X386에 상호 운용성을 컴파일 주장했다.

은 (어쩌면 이것은 일반적으로 문제가 발생하지 것입니다,하지만 내 SharePoint 서버는 증상이 나타나는 원인이 될 수 64 비트)입니다. 당신의 DLL과 GAC에서 상호 운용성을 등록 취소 -

1 :

이 솔루션은 상호 운용성 자신을 컴파일하는 것입니다.

2 - 비주얼 스튜디오 명령이 DLL이을 대상으로하는 .NET 프레임 워크에 관한 비주얼 스튜디오 버전의 을 프롬프트를 시작합니다 (즉, 내가 .NET 3.5을 대상으로, 비주얼 스튜디오 2010에서 내 DLL을 개발하고이 작업을 수행하려면. 단계 나는 비주얼 스튜디오 2008 명령 프롬프트)

3 시작하는 데 필요한 -

tlbimp <full path and filename of COM .tlb> /out:c:\.\Interop.CoolThirdParty.dll /keyfile: <full path and filename of snk> /machine:Agnostic /Namespace:CoolThirdParty 

/기계 Tlbmp

를 사용하여 상호 운용성을 생성을 : 불가지론는 MSIL 프로세서 아키텍처를 대상으로 구축 할 수있는 상호 운용성을 일으키는 ~이다. 그는 내 DLL과 동일합니다.

4 - 당신의 DLL 프로젝트

5의 상호 운용성에 대한 기존 참조를 제거 - 기존의 상호 운용성 파일을 삭제하고 (방금 생성 한 하나 예를 들어 C로 교체 : \ Interop.CoolThirdParty.dll합니다.)

6 - 새로운 상호 운용성에 프로젝트에 대한 참조를 추가합니다.

7 -

8 다시 - 새로

그것은 작업을 시작해야 GAC

에 DLL 새로운 상호 운용성을 구축하여 등록합니다.

0

희망 타사 COM 객체는 시스템에 등록되어

2

닫기 비주얼 스튜디오 .... C에서 모든 폴더를 삭제 : \ 임시 ASP.NET 파일이

이이 문제를 해결해야 Microsoft.NET 프레임 워크 \ \ v4.0.30319 \ ....

\ 윈도우
0

GAC에있는 어셈블리를 참조하는 compilation.assemblies의 내 webconfig에서이 줄을 받았습니다. 문제는 누군가가 GAC에있는 버전에서 다른 존재하지 않는 버전으로 리디렉션하는 web.config에 어셈블리 리디렉션을 넣었습니다.

관련 문제