對於這個狡猾的問題抱歉 - 如果有人有更好的建議,很樂意改寫。如何動態引用查找其他程序集的程序集?
我想通過動態調用屬於另一個應用程序的程序集來創建一個對象。
以下PowerShell代碼工作很好地對我說:
[Reflection.Assembly]::LoadFrom("C:\Program Files\Vendor\Product\ProductAPI.dll")
$bobject = new-object ProductAPI.BasicObject
$bobject.AddName("Some Name")
我掙扎做在C#同樣的事情。基於在計算器上其他職位目前,我有這樣的:
System.Reflection.Assembly myDllAssembly =
System.Reflection.Assembly.LoadFile("C:\\Program Files\\Vendor\\Product\\ProductAPI.dll");
System.Type BasicObjectType = myDllAssembly.GetType("ProductAPI.BasicObject");
var basicObjectInstance = Activator.CreateInstance(BasicObjectType);
最後一行導致TargetInvocationException。
{「無法加載文件或程序集'AnotherObject,Version = 1.2.345.0,Culture = neutral,PublicKeyToken = null'或其依賴項之一,系統找不到指定的文件。
似乎BasicObject構造函數試圖調用另一個對象(來自AnotherObject.dll在同一個文件夾中)但找不到它。
有關如何解決此問題的任何提示?
我認爲您正在加載的DLL需要另一個DLL才能工作。您可以使用此工具探索DLL的依賴關係。 http://www.dependencywalker.com/ – cgTag
當您找到缺少的DLL。將其複製到發佈文件夾或修改Windows PATH以包含它。 – cgTag
值得檢查什麼是無法加載['FUSLOGVW.exe'](http://msdn.microsoft.com/en-us/library/e74a18c4.aspx)(* Assembly Binding Log Viewer *),它會告訴你什麼是無法加載(以及.NET加載器所在的位置)。 – Richard