2010-11-23 65 views
2

我使用的是類的佈局,看起來像這樣的時候注意到了一些非常奇怪的現象:返回或繼承了通用包含嵌套類

// Contents of assembly A: 
public class MyParentClass 
{ 
    public class NestedClass 
    { 
    } 
} 

// Contents of assembly B: 
public class AnotherClass : List<MyParentClass.NestedClass> 
{ 
} 

我可以添加組件A作爲裝配B.本的依賴例如將編譯沒有任何錯誤消息,但是當涉及到,例如,加載組件乙作爲用於單元測試的參考,我將當談到時間編譯單元測試接收此錯誤:

無法加載文件或程序集'AssemblyB,Version = 1.0.0.0,Culture = neutral, PublicKeyToken = null'或它的一個依賴關係。系統找不到指定的 文件。

該代碼生成的程序集確實可以正常工作,並且我可以運行Redgate Reflector生成的DLL並按預期查看我的代碼,但單元測試拒絕加載它。

我幾乎肯定的是,這個問題與我調用另一個程序集中的嵌套類的事實有關,而且我可能最終會重構這個設計,但我真的很想知道爲什麼會這樣不按預期工作。如果以這種方式使用類時出現問題,我希望編譯器引發異常。

謝謝你的時間。

+0

你在同一時間爲B裝載組件A,在你的單元測試組裝? – 2010-11-23 10:10:41

回答

0

是「複製本地」爲參考啓用?我假設你的測試項目測試程序集B沒有程序集A的副本。在引用時將「Copy Local」設置爲true應複製程序集,以便在編譯(並最終運行)測試時可以正確找到它們。

+0

實際上,組件B也加載了單元測試項目。在所有情況下,「複製本地」設置爲True,所以我不認爲這是問題。好主意,但。 – 2010-11-23 10:15:14

0

我懷疑,這是什麼做的嵌套類 - 只是缺乏傳遞依賴的正浮出水面.NET。

基本上,如果你打算在一個項目中使用AnotherClass,你需要一個參考明確添加到這兩個AssemblyBAssemblyA。這兩種方式都應該被複制並適當加載。

如果沒有幫助,您可以嘗試enabling fusion logging

+0

我在單元測試項目中添加了對兩個程序集的引用,所以這不是問題。綁定日誌窗口中也沒有任何東西出現,但我從來沒有遇到過這個工具,所以這仍然是我學到的新東西。感謝那! – 2010-11-23 10:51:38

+1

我上次檢查(幾年前)Fuslogvw.exe有點不靈活。所以我寧願將我的融合日誌整理到一些文件夾中。更改「HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Fusion」,將ForceLog和LogFailures設置爲1並設置LogPath = C:\ Temp \ FusionLog並創建該文件夾。 – 2010-11-23 14:03:02

0

您在Visual Studio 2010中收到此錯誤信息,如果你的項目目標框架設置爲「Framework 4的客戶端配置文件」和鏈接DLL有一個目標框架「框架4」。

檢查,在您的項目設置。