我終於有這個似乎工作的答案。
編譯兩個32 & 64位版本 - 兩個管理的&非託管 - 到單獨的文件夾。然後讓.NET應用程序在運行時選擇從哪個目錄加載程序集。
使用ResolveEvent的問題在於,如果找不到組件,它只會被調用,所以很容易意外終止32位版本。相反,使用第二個AppDomain對象,我們可以將ApplicationBase屬性更改爲指向正確的文件夾。所以,你最終用類似的代碼:
static void Main(String[] argv)
{
// Create a new AppDomain, but with the base directory set to either the 32-bit or 64-bit
// sub-directories.
AppDomainSetup objADS = new AppDomainSetup();
System.String assemblyDir = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
switch (System.IntPtr.Size)
{
case (4): assemblyDir += "\\win32\\";
break;
case (8): assemblyDir += "\\x64\\";
break;
}
objADS.ApplicationBase = assemblyDir;
// We set the PrivateBinPath to the application directory, so that we can still
// load the platform neutral assemblies from the app directory.
objADS.PrivateBinPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
AppDomain objAD = AppDomain.CreateDomain("", null, objADS);
if (argv.Length > 0)
objAD.ExecuteAssembly(argv[0]);
else
objAD.ExecuteAssembly("MyApplication.exe");
AppDomain.Unload(objAD);
}
你最終2個EXE文件 - 您的正常應用,並且選擇哪些位加載第二切換應用程序。 注 - 我不能讚揚這個我自己的細節。我的一位同事懷疑我已經給了我最初的指示。如果當他註冊到StackOverflow時,我會給他分配答案