2017-02-06 79 views
0

以下代碼實際上在我的安裝應用程序中運行。但是,如果我從一個單元測試項目調用它,tmpDom.DoCallBack(theCallback);會導致異常。我已經將代碼剝離爲「無所事事」的Skeleton,但無論如何都沒有改變!AppDomain的DoCallBack()發生意外的異常

using System; 
using System.Diagnostics; 
using System.Reflection; 
using System.Runtime.InteropServices; 

namespace Setup 
{ 
    internal class BMRegAsm 
    { 
     public bool RegisterDll() 
     { 
     AppDomain tmpDom = AppDomain.CreateDomain("DOMAIN-XYZ"); 
     string theName= tmpDom.FriendlyName; // Returns the correct name! 
     try 
     { 
      CrossAppDomainDelegate theCallback = new CrossAppDomainDelegate(BMRegAsm.RegX); 
      tmpDom.DoCallBack(theCallback); 
     } 
     catch (Exception exc) 
     { 
      Trace.WriteLine("==RegisterDll== " + exc.Message); 
     } 
     } 

     private static void RegX() // Due to "static"-callback, no frmMain objects available. 
     { 
     } 
    } 
} 

以下異常由tmpDom.DoCallBack(theCallback)拋出;

==RegisterDll== Die Datei oder Assembly "Setup, Version=4.14.4.199, Culture=neutral, PublicKeyToken=null" oder eine Abhängigkeit davon wurde nicht gefunden. Das System kann die angegebene Datei nicht finden. 

對不起,德語文本。這意味着系統無法找到指定的文件。

即使我有CallStack,我無法評估是什麼錯誤。 tmpDom.FriendlyName返回正確的名稱。

有沒有人有一個想法是什麼導致異常?

回答

0

右鍵單擊測試項目,查看測試版本的輸出文件夾是什麼。將這些文件列表與「安裝應用程序」輸出文件夾下的文件進行比較,並查看缺少的文件。

要添加缺少的文件有幾種方法,取決於文件。例如:

  • 爲參考文件設置「Copy Local」爲true。

  • 添加了複製命令後生成事件

+0

這兩個項目的輸出目錄是相同的。無論如何,我感到驚訝的是一個文件丟失了,因爲代碼沒有使用任何文件!? –

+0

丟失文件的名稱是什麼?你在同一臺機器上運行測試和安裝應用程序嗎? – KernelMode

+0

沒有提及名字。 fllowing顯示堆棧,最後一行:'\t mscorlib.dll!System.Reflection.RuntimeAssembly.nLoad(System.Reflection.AssemblyName fileName,string codeBase,System.Security.Policy.Evidence assemblySecurity,System.Reflection.RuntimeAssembly locationHint,ref System.Threading.StackCrawlMark stackMark,System.IntPtr pPrivHostBinder,bool throwOnFileNotFound,bool forIntrospection,bool suppressSecurityChecks)\t Unknown' –

相關問題