2010-09-20 7 views
6

Ich benutze eine nUnit, um eine Baugruppe zu testen.nUnit - ignoriere GAC-Kopie einer DLL

Die Assembly befindet sich in meinem Projektausgabeverzeichnis (\ bin \ debug) und wird von diesem Speicherort in nUnit (Assemblys> Add Assembly) geladen.

Allerdings ist auch eine ältere Version im GAC und nUnit wählt diese stattdessen aus.

Ich kann natürlich die alte Version entfernen und neu auf dem GAC nach dem Build installieren, aber das dauert einige Zeit - jede Möglichkeit, um nUnit (oder wahrscheinlicher das .NET-Framework) zu zwingen, die Version aus dem bin \ debuggen dir?

EDIT

Die Assemblyversion (und damit starke Namen) beiden Versionen behoben werden - es ist nur die Dateiversion, die ändert ich pro KB 556041 - How to use Assembly Version and Assembly File Version

+0

Dies sollte nur passieren, wenn Ihre bin \ debug-copy (und Ihre Projektreferenz) dieselbe Versionsnummer haben wie die im GAC. – sisve

+0

Die AssemblyVersion-Nummern sind die gleichen, ich habe zusätzliche Kommentare hinzugefügt, die diesen Schlüssel der Information erklären, mir schlecht! – Ryan

Antwort

1

Sie könnten versuchen, ein <bindingRedirect> in Ihrer CONFIG-Datei zu machen Umleitung zu Ihrer lokalen Assembly und nicht zur Verwendung der im GAC installierten Assembly.

Wenn Sie eine .NET Framework-Anwendung für eine Assembly mit starkem Namen erstellen, verwendet die Anwendung diese Version der Assembly standardmäßig zur Laufzeit, auch wenn eine neue Version verfügbar ist. Sie können jedoch die Anwendung so konfigurieren gegen eine neuere Version der Assembly

...

<configuration> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity 
      name="myAssembly" 
      publicKeyToken="32ab4ba45e0a69a1" 
      culture="neutral" /> 
     <bindingRedirect 
      oldVersion="1.0.0.0" 
      newVersion="2.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

Dies könnte auch interessant sein, laufen für Sie:

Hoffe, dass hilft!

+2

+1 als seine eine gute Referenz (ich war der verbindlichen Umleitungen obwohl bewusst), aber das hilft mir nicht, wie die Version in der GAC hat die gleiche AssemblyVersion – Ryan

+0

Nun, wenn die Assembly-Version die gleiche ist und Sie nicht ändern können Es hat so gut wie keine Chance, weil .NET es zuerst aus dem GAC findet. Es ist kein nUnit-Verhalten, es ist ein Standard .NET. –

0

In dieser Situation tendiere ich dazu, die Baugruppe beim Komponententest NICHT zu signieren, bis ich sie bereitstellen kann. Es ist ein einstufiger Prozess, bei dem Sie zu den Projekteigenschaften wechseln und die Einstellung zum Signieren der Baugruppe löschen. Wenn Sie das nächste Mal, wenn Sie die Tests ausführen, erneut kompilieren, wird NUnit es aus einem lokalen Bin-Ordner abholen, da nicht signierte Assemblys nicht in GAC bereitgestellt werden können. Was ich gefunden habe, ist, dass, selbst wenn Sie bereits eine Version der Assembly in GAC haben, die unsignierte Version immer noch verwendet wird, wenn Sie die zu testende Assembly vom Projekt referenzieren. Wenn Sie mit den Tests fertig sind, können Sie die Einstellung wieder aktivieren und bereitstellen.

Nicht ideal, da Sie jetzt diesen zusätzlichen Schritt haben, aber so nah wie möglich, ohne viel Arbeit zu machen.