2012-04-16 6 views
5

DLL을 참조하는 EXE가 있습니다.이 예제에서는 TestDLL.dll이라고합니다.
EXE는 C#으로 작성되었으며 DLL은 VB .Net으로 작성되었습니다.어셈블리 바인딩 및 리디렉션

DLL의 데모 어셈블리 버전을 만들었습니다 (예 : TestDLL.dll 버전 1.0.0.0).
데모 버전 DLL (1.0.0.0)에 대한 참조로 EXE를 컴파일하려고합니다. 그 다음 - EXE가 같은 DLL을 사용하기를 원하지만 모든 버전의 GAC에 넣을 것입니다. 그렇게하기 위해서는
, 나는 FALSE"로컬 복사"DLL의 참조의 속성을 설정합니다.

목표는 예를 들어 - 컴파일 한 후 어셈블리 버전 2.1.6.0을 사용하여 GAC TestDLL.dll을 넣을 것이고 EXE는 어셈블리 리디렉션 바인딩을 사용하여 찾을 것입니다. 이를 위해 설정 파일을 사용했습니다.
http://msdn.microsoft.com/en-us/library/7wd6ex19(v=vs.71).aspx

그래서 내 config 파일은 다음과 같이 약 같습니다 : 나는 그것을 만들려면이 링크를 사용

<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="myAssembly" 
          publicKeyToken="32ab4ba45e0a69a1" 
          culture="en-us" /> 
     <!-- Assembly versions can be redirected in application, publisher policy, or machine configuration files. --> 
     <bindingRedirect oldVersion="1.0.0.0" 
          newVersion="2.1.6.0"/> 
     </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

문제 모두 그 일을 한 후, 나는 EXE를 실행하고있는 DLL을 액세스 할 때, 내가 유명한 오류가 발생했습니다 : System.IO.FileNotFoundException : 파일 또는 어셈블리 'TestDLL, 버전 = 1.0.0.0, 문화 = 중립, PublicKeyToken = 9d8162944bd6fdc7'또는 해당 종속성 중 하나를로드 할 수 없습니다. 시스템이 지정된 파일을 찾을 수 없습니다. 파일 이름 : 'TestDLL, 버전 = 1.0.0.0는 문화 =, PublicKeyToken = 9d8162944bd6fdc7 중립'

의미, EXE 파일은 I가 참조하는 원래의 DLL를 찾을 수 없습니다. GAC를 "참조"하거나 리플렉션을 사용할 수 있음을 알고 있지만이 EXE는이 방법으로 만 작동하기 때문에 원하지 않습니다.

누구에게 어떤 문제가 있으며 문제를 해결하는 방법을 알고 있습니까?
감사합니다.

+0

참조의 "특정 버전"속성을 false로 설정 했습니까? –

+0

.config 파일을 게시 할 수 있습니까? – Xharze

+0

물론, 참조의 "특정 버전"속성도 false로 설정합니다. –

답변

11

publicKeyToken을 올바르게 설정했는지 확인하십시오. 표시된 코드에서 MSDN 링크의 공개 키 토큰 인 publicKeyToken="32ab4ba45e0a69a1"을 사용하고 있습니다. 이것은 분명히 이 아니며,이 아니라 어셈블리의 공개 키 토큰입니다. 이 기능을 사용하려면 동일한 키로 서명 된 두 어셈블리 (1.0.0.0 및 2.1.6.0)가 있어야합니다.

sn.exe -Tp myassembly.dll 

을하지만 실행 파일에 컴파일하는 어셈블리가 아닌 경우 : 공개 키 토큰을 추출하려면 당신이 sn.exe 도구를 사용하거나 점점 예외 스택 추적을 바라 보았다 수 있습니다 (이것은 publicKeyToken="9d8162944bd6fdc7" 있음을 말하고있다) 동일한 키로 서명하면 작동하지 않습니다.

또한 culture="en-us"을 설정했지만 어셈블리에서이 culture를 사용합니까? 시도해 볼 수도 있습니다 culture="Neutral".

마지막으로 적절한 버전의 어셈블리를 GAC에 배포했는지 확인하십시오.

+1

그럴 겁니다. 문화가 올바르지 않습니다. –

관련 문제