我已經搜查了地獄,這一點,但我不能完全弄清楚爲什麼我得到一個FileNotFoundException異常時,該文件明確存在,並且可以與File.ReadAllBytes如何將此程序集加載到我的AppDomain中?
這是我當前的代碼打開:
AppDomainSetup domainInfo = new AppDomainSetup();
domainInfo.ApplicationBase = PluginDirectory;
Evidence adEvidence = AppDomain.CurrentDomain.Evidence;
AppDomain pluginDomain = AppDomain.CreateDomain("pluginDomain", adEvidence, domainInfo);
foreach (FileInfo file in files)
{
if (m_AssemblyIgnoreList.Contains(file.Name))
continue;
byte[] assemblyBytes = File.ReadAllBytes(file.FullName);
//Assembly plugin = Assembly.LoadFrom(file.FullName);
Assembly plugin = pluginDomain.Load(assemblyBytes);
LoadPlayerEvents(plugin);
}
AppDomain.Unload(pluginDomain);
我試圖從一個插件文件夾中加載所有.dll文件,並加載一堆屬性類型和函數。
當我使用Assembly.LoadFrom(file.FullName)時,加載屬性類型和函數的工作文件。然而,pluginDomain.Load(assemblyBytes)導致了以下異常:
FileNotFoundException: Could not load file or assembly 'Example Mod, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
它肯定找到指定的文件,因爲File.ReadAllBytes完美的作品,作爲異常顯示我試圖加載程序集的全名。因此我得出結論:它不能加載依賴項。
所有的依賴項已經加載到CurrentDomain中。雖然,即使將這些依賴關係置於.dll旁邊(這發生在所有.dll的生成過程中),也會產生相同的異常。
爲什麼我得到這個異常,當文件明顯存在?
您可以運行[進程監視器(https://technet.microsoft.com/en-us/sysinternals/bb896645 .aspx)來檢查應用程序在哪些位置搜索DLL,也許你會明白爲什麼它不在你想要的位置搜索。 – Oliver