我加載大會在運行時在我的應用程序:IO異常裝載組件無法找到文件
FileStream lDLLStream = lDLLPath.OpenRead();
byte[] lDLLArray = new byte[lDLLStream.Length];
lDLLStream.Read(lDLLArray, 0, (int)lDLLStream.Length);
Assembly lAssembly = Assembly.Load(lDLLArray);
不過,我收到以下異常:
Could not load file or assembly 'UnityEngine, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
但是,如果我從同一個目錄中加載了一個不同的DLL,這個DLL引用了我最初試圖加載的DLL(並且自然也是UnityEngine,因爲它也有依賴關係),所以我沒有收到任何錯誤消息。
事實上,在負載可以看到第二個(工作)DLL在其引用的程序正是:
UnityEngine, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
所以我沒有怎麼看它是否能夠加載第二DLL,這可能是導致它無法加載第一個。
一些附加信息:第一個(非工作)DLL正好是由Unity(3D遊戲引擎)生成的DLL,而第二個DLL是我在Unity解決方案中創建的項目。
我的項目是.NET 4.0(和Unity是3.5),但我試圖設置我的測試DLL編譯爲3.5,並沒有在加載時崩潰。
我不知道這是否會更好地問統一答案?
更新:好吧,也許不像我想的那麼古怪。第二個工作的DLL只能工作,因爲它沒有使用DLL,因此無法加載,所以永遠不會失敗。此外,可以通過在執行目錄中轉儲Unity DLL來加載第一個DLL,所以我想我只需要找到一種將目錄添加到它應該看起來的方式。
更新2:所以我的「固定」這個問題通過聽取
AppDomain.CurrentDomain.AssemblyResolve
,並提出一個對話框,用戶找到丟失的DLL已經固定例外。我希望知道是否有更好的方法來做到這一點。由於用戶正在指定自定義DLL,因此這可能是唯一合理的事情。否則,我會發布這個答案。