2010-09-20 59 views
6

我正在使用nUnit來測試程序集。nUnit - 忽略DLL的GAC副本

該程序集位於我的項目輸出目錄(\ bin \ debug)中,並從此位置加載到nUnit(程序集>添加程序集)中。

但是,舊版本也在GAC中,nUnit正在選擇此版本。

我當然可以刪除舊版本,並在構建時重新安裝到GAC,但這需要一些時間 - 任何強制nUnit(或更可能是.NET框架)的方式從bin \調試目錄?

編輯

的的AssemblyVersion(因而強名稱)的兩個版本是固定的 - 改變按KB 556041 - How to use Assembly Version and Assembly File Version

+0

只有當您的bin \ debug-copy(和您的項目引用)具有與GAC中相同的版本號時,纔會發生這種情況。 – sisve 2011-01-25 19:32:14

+0

AssemblyVersion數字是相同的,我已經添加了額外的註釋來解釋這個關鍵信息,我不好! – Ryan 2011-01-26 07:31:46

回答

1

你可以嘗試做一個<bindingRedirect>在你的config文件到其唯一的文件版本重定向到您的本地程序集並且不使用GAC中安裝的程序集。

當您針對強名稱程序集構建.NET Framework應用程序時,即使新版本可用,應用程序在運行時仍默認使用該版本的程序集。但是,您可以配置針對組裝

較新版本的運行應用程序...

<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> 

這也可能對你很有意思:

希望有幫助!

+2

+1作爲一個很好的參考(我知道綁定重定向雖然),但這並不能幫助我,因爲GAC中的版本具有相同的AssemblyVersion – Ryan 2011-01-26 07:30:48

+0

好吧,如果程序集版本相同並且不能更改它幾乎沒有機會,因爲.NET首先從GAC中找到它。這不是一個nUnit行爲,它是一個標準的.NET。 – 2011-01-26 21:46:15

0

我在這種情況下傾向於做的事情是在單元測試之前不要簽署程序集,直到我準備部署它。這是一個單步過程,您可以轉到項目屬性並清除簽名程序集設置。當您重新編譯時,下次運行測試時,NUnit會從本地bin文件夾中選取它,因爲未簽名的程序集無法部署到GAC。我發現,即使您已經在GAC中有一個版本的裝配,如果您引用了項目測試的裝配,它仍然會採用未簽名的版本。 完成測試後,重新打開設置並進行部署。

並不理想,因爲您現在需要經過額外的步驟,但儘可能在沒有做大量工作的情況下完成。