私はついにこれに対する答えがうまくいくように見えます。
32ビットバージョンと64ビットバージョンの両方(マネージドバージョンとアンマネージドバージョンの両方)を別々のフォルダーにコンパイルします。次に、実行時に.NETアプリにアセンブリのロード元のディレクトリを選択させます。
ResolveEventを使用する際の問題は、アセンブリが見つからない場合にのみ呼び出されることです。そのため、誤って32ビットバージョンになってしまう可能性があります。代わりに、適切なフォルダーを指すようにApplicationBaseプロパティを変更できる2番目のAppDomainオブジェクトを使用します。したがって、次のようなコードになります。
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が作成されます。通常のアプリと、ロードするビットを選択する2番目のスイッチングアプリです。注-私はこれの詳細を自分で信用することはできません。私の同僚の一人は、私の最初の指針を与えられてそれを議論しました。彼がStackOverflowにサインアップした場合、私は彼に答えを割り当てます