我有一個使用幾個類庫的項目,這些類庫是我的項目的一部分,首先AssemblyA被加載,然後AssemblyB被加載。在AssemblyA存在代碼執行以下操作強制彙編載入當前域的正確方法
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
var assemblyB = assemblies
.Where(x=>x.GetName() == "AssemblyB")
.First();
var type = assemblyB.GetType("AssemblyB_Type");
不幸的是,當AssemblyA試圖做到這一點,AssemblyB是尚未加載到CurrentDomain,所以加載組件我做下面的事情沒有必要:
var x = typeof(AssemblyB.AssemblyB_Type);
編譯器顯示警告,這一行是不需要的,雖然我找不到解釋它的單詞,否則它將無法正常工作,所以問題是,你如何正確地(以風水術語)強制裝配加載到CurrentDomain而不會做無用的管道工程
如果要按需加載的程序集就用Assembly.Load()。或者使用var type = typeof(NamespaceNameInAssemblyB.AssemblyB_Type)讓CLR自動加載程序集。 – 2011-12-15 22:25:03
我想我有點困惑。如果你能夠做typeof(AssemblyB.AssemblyB_Type),那麼爲什麼你需要做assemblyB.GetType(「AssemblyB_Type」)? – 2011-12-15 22:33:36
還有第三方JInt庫(JavaScript interpriter)。它允許從JavaScript源內綁定CLR類型。首先它使用AppDomain.CurrentDomain.GetAssemblies(),然後它會嘗試在該程序集中找到適當的類型,如果我的程序集未被C#代碼觸及,則它不會加載到CurrentDomain,並且無法從JavaScript訪問... – Lu4 2011-12-16 13:15:34