我的場景是我有一個創建AppDomain的.net應用程序(我們說一個控制檯應用程序)。然後它需要在該AppDomain中的類型上創建實例和調用方法。每個AppDomain都有一個特定的目錄,它的依賴性應該在哪裏,哪個不在控制檯應用程序目錄下(甚至不在)。這是我的簡單代碼:另一個AppDomain中的類型的CreateInstance
string baseDirectory = "c:\foo"; // <- where AppDomain's dependecies
// set up the app domain
AppDomainSetup setup = new AppDomainSetup();
setup.ApplicationName = DateTime.Now.ToString("hh:MM:ss:ffff");
setup.ApplicationBase = baseDirectory;
setup.PrivateBinPath = baseDirectory;
// create app domain
AppDomain domain = AppDomain.CreateDomain(
name,
AppDomain.CurrentDomain.Evidence,
setup);
// instantiate Type from an assembly in that AppDomain
ObjectHandle handle = domain.CreateInstanceFrom(
"SampleClassLibrary.dll", // <- exists in "c:\foo"
"SomeClassInTheDll");
對CreateInstanceFrom的調用導致FileNotFoundExcepotion。 FusionLog顯示它搜索的目錄是Console應用程序目錄。它沒有包含從AppDomain設置的搜索文件夾 - 在「baseDirecory」變量中。
我在做什麼錯?是否有另一種方法來執行另一個AppDomain中的代碼?
謝謝...
只是提供對DLL的完全限定路徑的伎倆,至少我能加載該類型。似乎奇怪的是,AppDomain確實在「baseDirectory」中查找該dll。我想知道是否會有問題,如果該dll引用了該目錄中的其他dll。我會測試一下,看看。 謝謝布魯斯 – will 2010-01-16 05:26:17
就像我認爲的,上述解決方案不起作用。這就像AppDomain無法找到它的任何依賴dll,因爲它正在查找的目錄是Console Apps目錄列表,而不是AppDomains ... 任何想法?這不可能很難嗎? – will 2010-01-16 22:39:42
找出使用AssemblyResolve處理程序的技巧。 – will 2010-02-07 19:36:22