2013-06-12 1 views
2

여기 상황은 다음과 같습니다.gacutil과 환경의 주요한 두통의 차이점

전역 어셈블리 캐시에있는 DLL이 .NET 2에서 컴파일되었습니다. 내가

를 사용하여 전역 어셈블리 캐시에 정책 파일을로드 할 때

al /link:myDLL.dll.config /out:policy.1.2.myDLL.dll /keyfile:myDLL.snk 

그러나 :

<configuration> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="myDLL" publicKeyToken="c426c33bab532523" /> 
     <bindingRedirect oldVersion="1.2.2.0-1.2.2.22" newVersion="1.2.2.23" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

내가 다음 정책 파일을 생성 할 어셈블리 링커를 사용 : 나는 읽고 myDLL.dll.config 파일이

Failure adding assembly to the cache: This assembly is built by a 
runtime newer than the currently loaded runtime and cannot be loaded. 
:
gacutil -i policy.1.2.myDLL.dll 

나는 오류를 얻을

닷넷 전역 어셈블리 캐시 유틸리티 버전 2.0.50727.42이지만, 나는 다음과 같은 새로운 C의 # .NET이 콘솔 프로젝트를 생성하고 실행하여 빌드 환경의 버전을 확인 :

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Windows.Forms; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      MessageBox.Show(Environment.Version.ToString()); 
     } 
    } 
} 

내 Environment.Version은 2.0.50727.5466입니다.

이것은 모두 같은 컴퓨터, 특히 내 devbox에서 발생합니다.

\ bin \ release 폴더의 myDLL.dll을 c : \ Windows \ assembly 폴더에 복사해도 문제가 없습니다. 그러나 policy.1.2.myDLL.dll 파일을 \ bin \ release에서 \ assembly로 복사하거나 gacutil을 사용하면 실패합니다.

+0

http://social.msdn.microsoft.com/Forums/en-US/biztalkgeneral/thread/e76f5c46-e679-4923-bf9d-1f883074eb2e/? –

+0

.NET 2.x 버전을 사용하고 있습니까? –

+0

@TimB 잘 모르겠습니다. "al"을 입력하고 Assembly Linker 버전 10.0.30319.1을 사용하는 새 Visual Studio 2010 명령 프롬프트를 열었습니다. 전역 어셈블리 캐시에서 DLL을 사용하여 작업 할 때는 약간 새로운 기능입니다. – CurtisHx

답변

4

문제는 정책 어셈블리가 .NET 4.x 용으로 컴파일되고 있다는 것입니다.

% PROGRAMFILES (X86) % \ Microsoft SDKs \ Windows \ v7.0A \ Bin에있는 al.exe와 % PROGRAMFILES (X86) % \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ NETFX에있는 다른 프로그램이 있습니다. 4.0 도구. 둘 다 동일한 버전 번호를 가지고 있지만 첫 번째 버전은 .NET 2.x 용이고 후자는 .NET 4.x 용입니다. 전체 경로를 지정해야 올바른 경로를 사용할 수 있습니다.

+0

Tim 감사합니다. 고마워. – Thomas