2010-04-22 8 views
1

NDbUnit과 함께 NHiberanate를 사용하려고하지만 NDbUnit이 MySql.Data 버전 1.0.10.1을로드하려고 시도 했으므로 NHibernate가 버전 6.2.2.0을로드하려고 시도 할 수없고 그 중 하나만 참조 할 수 있습니다. 내가 NDbUnit이NDbUnit MySQL 어셈블리 버전 충돌

Set Up 
System.IO.FileLoadException: Could not load file or assembly 'MySql.Data, Version=1.0.10.1, Culture=neutral, PublicKeyToken=c5687fc88969c44d' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) 
    at NDbUnit.Core.MySqlClient.MySqlDbCommandBuilder.GetConnection(String connectionString) 
    at NDbUnit.Core.DbCommandBuilder..ctor(String connectionString) 
    at NDbUnit.Core.MySqlClient.MySqlDbCommandBuilder..ctor(String connectionString) 
    at NDbUnit.Core.MySqlClient.MySqlDbUnitTest.CreateDbCommandBuilder(String connectionString) 
    at NDbUnit.Core.NDbUnitTest.GetDbCommandBuilder() 
    at NDbUnit.Core.NDbUnitTest.ReadXmlSchema(Stream xmlSchema) 
    at NDbUnit.Core.NDbUnitTest.ReadXmlSchema(String xmlSchemaFile) 
    at Proteus.Utility.UnitTest.DatabaseUnitTestBase.SaveDatabase(String connectionString, String schemaFilePathName, String datasetFilePathName, DatabaseClientType clientType) 
    at TGS.UserAccountControlTest.UserAccountManagerTest._TestFixtureSetup() in C:\Documents and Settings\Michal\My Documents\Visual Studio 2008\Projects\TGS\TGS.UserAccountControlTest\UserAccountManagerTest.cs:line 69 

사람이 어떤 아이디어가 있습니까 실행하려고하면 다음

은 내가 오류인가?

답변

1

어셈블리 바인딩 리디렉션 중 '해키'느낀다면 (종종 있습니다) (은 전혀) 또는 '불편 취성', 당신은 또한 수 합니다 (NDbUnit 프로젝트에 대한 기본 커미터로) 제가 알기로 http://ndbunit.googlecode.com

에서 소스를 얻어서 (NDbUnit는 오픈 소스이기 때문에) 단순히 MySQL은 NO 주요 변경이없는 당신의 '희망'MySql.Data 어셈블리에 대해 NDbUnit을 다시 컴파일 데이터. v1x 및 v6x. MySql.Data 어셈블리의 의도는 ADO.NET 스택 (IDbConnection, IDBCommand 등)을 구성하는 'family'인터페이스의 MySql 특정 구현을 제공하기위한 것일 뿐이므로 MySql의 변경 사항을 깨뜨릴 수는 없습니다 v1에서 v6으로의 데이터 어셈블리 (.NET 2.0이 출시 된 이후 MS가 실제로 이러한 인터페이스를 인식하지 못했기 때문에).

이 인터페이스의 이전 MySql.Data 및 이후 MySql.Data 구현 간의 유일한 차이점은이 어셈블리의 '데이터베이스 지향'측면이 시간이 지남에 따라 변경되는 동안 지원할 예정인 MySql의 버전입니다. 이 어셈블리에서 BY DEFINITION 정렬에 포함 된 클래스의 코드 방향을 변경하면 한 버전에서 다음 버전으로 변경할 수 없습니다.

운 좋게 ~!

+0

감사합니다. 나는 다음주에 이것을 제공 할 것입니다. D –

3

당신은 설정 파일에 binding redirect을 시도해 볼 수도 있습니다 : 두 어셈블리가 다른 키를 사용하여 로그인 한 경우

<configuration> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="MySql.Data" 
          publicKeyToken="c5687fc88969c44d" 
          culture="neutral" /> 
     <bindingRedirect oldVersion="1.0.10.1" 
         newVersion="6.2.2.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

이 작동하지 않을 수 있습니다. 또한 V1과 V6 사이의 갭은 꽤 클 것입니다. 의존하는 방법은 해당 버전간에 변경해서는 안됩니다.

이 실제로 귀하의 경우는 아마되어야합니다 :

oldVersion="6.2.2.0" 
newVersion="1.0.10.1"