2011-04-09 46 views
0

我有以下情況的程序集的引用:如何獲取到該實例化的類

  • Assembly A - 類庫,包含了我的控制Control A
    • Control A有財產ResourceName
  • Assembly B - Winforms應用程序,包含品牌資源(圖像,字符串等)。 Assembly B參考Assembly A並使用它的自定義控件。
  • Solution - 包含程序集AB的項目文件。

Control A定位使用GetEntryAssembly(),以獲得組裝件的參考,它在運行時的工作資源ResourceName,但在設計時我想進入組裝devenv.exe的或相似的,所以這是行不通的東西。

理想情況下,我應該能夠加載創建(實例化)控件的程序集。

我甚至可以引入一個新的Control A屬性AssemblyName,但我需要完整的路徑才能加載它,而且我無法在設計時從代碼中獲取組件B的路徑。

編輯:感謝理查德我現在在控件的構造函數中使用Assembly.GetCallingAssemby(),並在私有字段中進行緩存,這比GetEntryAssembly更普遍。它仍然不能在設計時工作(I作爲調用程序集獲得System.dll)。我懷疑這是因爲VS設計者沒有實例化整個類,而只是.designer.cs部分。

回答

2

很容易得到實現類型的程序集(System.Type具有Assembly屬性)。但是唯一一次你可以得到方法的調用者就是用這種方法。

因此,您可以在執行構造函數時獲取構造函數的程序集的調用方。

但是除了用IntelliTrace捕獲它(如果你有VS Ultimate),你不能回到以後得到堆棧跟蹤。