2012-07-28 82 views
1

我已經創建了一個程序集,例如Static.dll,以及我在運行時創建的動態程序集,例如DynamicDynamic創建一些IL代碼以創建一個Static.dll的新類型。當Dynamic被創建(它成功保存)時,可執行文件在運行時出錯,因爲它無法加載程序集類型Static.dll。我相信這是因爲Dynamic EXE輸出找不到這個DLL(或者至少這是我的猜測)。將程序集/模塊加載到動態程序集中

如何在此Static.dll引用中完成添加,以便當某人運行Dynamic的結果可執行輸出時,它可以找到引用的類型?

我知道Assembly.Load(),但這本身並沒有改變任何東西。或者至少,我不確定這是什麼給我的,因爲我不需要在運行時使用該類型,而是在運行Dynamic可執行文件時。

最後,我控制着Static.dll,所以如果有什麼我可以用項目來解決它,它可以做到,但是,它確實需要保持分離(我不想讓這個庫發送每次我創建一個動態組件)。基本上,我認爲我想我的動態程序集有一個.assembly extern mscorlib它的清單保存Static是mscorlib的地方。

感謝

+0

您是否將Static.dll和Dynamic.dll一起發佈?如果您正在使用Reflection.Emit,則會自動添加實際的*參考*。你應該能夠使用反射器來確認這一點。程序集加載仍然遵循相對於exe根的探測規則。 – 2012-07-28 06:56:16

+0

有沒有辦法將Static.dll類型加載到Dynamic,而不必提供Static.dll(可能通過反射將類型加載到動態中)?我可以確認.assembly extern Static雖然存在。 – OnResolve 2012-07-28 07:06:05

+0

@OmResolve ILMerge也許?見答案。 – 2012-07-28 07:10:05

回答

2

如何能做到將在此Static.dll參考,這樣,當有人運行的Dynamic生成的可執行文件的輸出,它可以查找引用類型?

該引用將自動添加。請注意,正常的裝配探測規則適用於執行動態裝配時,所以爲了找到裝配。你必須(之一):

  • 船static.dll一起在GAC dynamic.dll
  • 放static.dll(但請:不這樣做!)
  • 運行dynamic.dll在使用自定義的探測路徑配置的自定義應用程序域,讓static.dll找到
  • 手柄AppDomain.AssemblyResolve提供static.dll
  • 使用像ILMerge融合static.dll和dynamic.dll