2010-03-10 7 views
8

Używam 1.0 RTM Fluent Nhibernate z wersją 3.0 NHibernate. Aby to zrobić, należy dodać następujące do mojego pliku .config:Jak zrobić NUnit szanować mój bindingRedirect w moim testassembly.dll.config?

<runtime> 
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
    <assemblyIdentity name="NHibernate" culture="neutral" publicKeyToken="aa95f207798dfdb4"/> 
    <bindingRedirect oldVersion="2.1.0.4000" newVersion="3.0.0.1001"/> 
    </dependentAssembly> 
</assemblyBinding> 

Działa to doskonale podczas uruchamiania testów integracji z wtyczką TestDriven.NET, ale nie trafia w GUI lub NUnit konsoli biegacza z następującym błędem:

System.IO.FileLoadException: Nie można załadować pliku lub zespołu "NHibernate, wersja = 2.1.0.4000, Culture = neutralny, PublicKeyToken = aa95f207798dfdb4 'lub jedną z jego zależności. Definicja manifestu zlokalizowanego złożenia nie pasuje do odwołania do zespołu. (Wyjątek od HRESULT: 0x80131040)

Jak mogę przekonać NUnit do przestrzegania mojego bindingRedirect i przeprowadzenia pomyślnie testów integracji?

Odpowiedz

3

Klucz polega na umieszczeniu go w poprawnym pliku .config. Zobacz Does redirecting assembly binding work for unit testing with a test runner?.

Innym podejściem byłoby kompilowanie fluent-nhibernate przeciwko NHibernate 3.0. Jeśli ma błędy kompilacji, poproś zespół programistów i/lub rozwidź źródło i zmodyfikuj go.

+2

Więc jaki byłby odpowiedni plik .config? –

+0

@FrancoisBotha podążaj za linkiem –

+3

To nie jest tak naprawdę w duchu StackOverflow. http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers –

11

Miałem podobne problemy przy uruchamianiu nunit na serwerze CI (bambus, to be specific). Rozumiem, że jeśli nunit działa w swojej własnej przestrzeni procesowej (jak po prostu uruchamiasz ją z wiersza poleceń), to może poprawnie odczytać przekierowania wiążące zespołu składania .dll.config. Jeśli jednak serwer CI pracuje w środowisku Nunit w przestrzeni procesowej serwera CI, próbuje pobrać konfigurację z procesu nadrzędnego. Aby mieć pewność, że komenda zostanie uruchomiona we własnej przestrzeni procesowej, dodaj opcję wiersza poleceń: /process:multiple. Przynajmniej tak to działało dla mnie, aby nunit poprawnie znalazła powiązania przekierowania.

TL; DR: użyj opcji wiersza polecenia /process:multiple

+0

UWAGA: Działa również z procesem: oddzielne –