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返回正確的名稱。
有沒有人有一個想法是什麼導致異常?
這兩個項目的輸出目錄是相同的。無論如何,我感到驚訝的是一個文件丟失了,因爲代碼沒有使用任何文件!? –
丟失文件的名稱是什麼?你在同一臺機器上運行測試和安裝應用程序嗎? – KernelMode
沒有提及名字。 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' –