2010-02-17 5 views
3

NHibernate (Mysql.Data.dll)에 대한 Mysql 커넥터를 사용해야하는 프로젝트가 있습니다. 또한 동일한 프로젝트에서 다른 프로젝트 (Migrator.NET)를 참조하려고합니다. 문제는 Migrator.NET이 특정 버전이 false 인 MySql.Data에 대한 참조로 작성되었지만 라이브러리가 설치된 버전을 사용하는 대신 이전 버전의 MySql.Data를 참조하려고 시도하는 것입니다. .. 내가 제목에 나와있는 예외를 얻을 :두 개의 다른 어셈블리 버전 "찾은 어셈블리의 매니페스트 정의가 어셈블리 참조와 일치하지 않습니다."

----> System.IO.FileLoadException : 파일 또는 어셈블리 'MySql.Data, 버전 = 1.0.10.1, 문화를로드 할 수 없습니다 = 중립, PublicKeyToken = c5687fc88969c44d '또는 해당 종속성 중 하나입니다. 위치한 어셈블리의 매니페스트 정의는 이 어셈블리 참조와 일치하지 않습니다. (HRESULT 예외 : 0x80131040)

주 어셈블리에서 참조하는 버전은 6.1.3.0입니다. 두 어셈블리를 어떻게 협력시킬 수 있습니까?

편집 : 어셈블리 바인딩 리디렉션을 지정하는 당신의 사람들을 위해

, 나는이 설정 한 : 같은 오류를

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral"/> 
     <bindingRedirect oldVersion="0.0.0.0-6.1.3.0" newVersion="6.1.3.0"/> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

나는 다른 프로젝트에서이에게 주 어셈블리를 참조하고 여전히 점점 . 내 주 어셈블리를 다른 어셈블리에서 사용할 수 있도록 로컬로 복사 한 경우 app.config의 설정을 사용합니까, 아니면 주 어셈블리를 참조하는 모든 응용 프로그램이나 어셈블리에이 정보를 포함해야합니까?

답변

2

. bindingRedirect는 버전이 많이 다를 때 도움이되지 않습니다. 당신은 그것이 틀린 btw를 얻었다, 당신은 발견 된 것과 일치하는 newVersion을 원할 것이다. 그러나 거기에 가지 마라.

Migrator.NET 다운로드를 보면 문제가있는 것 같습니다. lib 폴더에는 MySql.Data.dll 이전 버전이 포함되어 있으며 .NET 1.0에서 실행됩니다. 압축을 시작한 다음 해당 어셈블리의 버전 6으로 다시 작성하십시오. 행운을 빌어, 네가 필요로 할 것 같아.

+0

이것은 나의 마지막 행락지이었다. 그러나 내가 그것을 그것을 직접 만들어야 할 것이다라고 예상되는 이분의 일. – snicker

+0

이것이 내가해야 할 일입니다. 어셈블리 바인딩 리디렉션을 작동시키지 못했습니다. 내 손가락을 건너. – snicker

+2

나는 결코 뒤쫓아 다닐 수 없다고 생각한다. 나는 이것을했고 잘 작동했다. – snicker

3

당신은 Assembly Binding Redirection을 찾고 있습니다.

이렇게하면 다른 어셈블리 버전을 찾도록 응용 프로그램을 구성 할 수 있습니다.

+0

작동하지 않기 때문에 잘못해야합니다. – snicker

+0

새로운 어셈블리의 PublicKeyToken은 무엇입니까? – Oded

+0

c5687fc88969c44d – snicker

1

두 버전의 어셈블리가있는 경우 하나의 옵션을 나란히 사용하여 올바른 위치에서 볼 수 있도록 응용 프로그램을 구성하면됩니다. app.config에 몇 줄을 추가하여이 작업을 수행 할 수 있지만 가장 안정적인 방법은 항상 AppDomain.AssemblyResolve 이벤트에 등록하고 필요한 라이브러리의 경로를 제공하는 것이 었습니다. 당신이보고 here 가질 수있는 간단한 예를 들어

(하지 않은 매우 관련 질문에 대한 대답을하지만, 같은 기술을 사용하여)) 꽤 심한 버전 불일치의

1

간단한 솔루션은 Migrator.NET 프로젝트에서 Mysql.data.dll (이전 MySql 버전 참조) 참조를 제거하고 새로운 참조 MySql.data.dll (다른 프로젝트에서 사용하는 동일한 버전)을 추가하는 것입니다. Migrator.NET을 다시 빌드하면 이제는 제대로 작동합니다.나는 똑같은 문제에 직면했다. 내가 언급 한 해결책이 나를 위해 완벽하게 작동했다.

+0

감사합니다. 그것이 받아 들여지는 대답이하는 것입니다. 나는 그렇게했습니다. 그것은 일했다 =] – snicker

-1

나는 또한 같은 문제에 직면 해 있었고 위의 해결책으로 해결할 수 없었다. 그래서 마지막으로 이것에 대한 해결책이 하나 더 있습니다 ... solution.licx 파일에서 프로젝트 => 솔루션 탐색기의 모든 항목을 제거하십시오.

이 파일에서 모든 것을 제거했을 때 프로젝트를 성공적으로 빌드 할 수있게되었습니다.

관련 문제