1

を参照するプロジェクトがありthird party assemblyます。

そのアセンブリにはx86 and x64 versions. サードパーティのシステムは特定のシステムに依存しているため、参照できるのは 1 つだけです。(システムがインストールされているマシンによって異なります)


これまでは、この回答を使用して 1 つのプロジェクトで両方のバージョンを管理できました。そのため、構成マネージャーのオプションを x86 または x64 に設定すると、参照するバージョンが認識されます。

同じソリューション/プロジェクトで Visual Studio を使用して 32 ビットと 64 ビットの両方をターゲットにする


しかし、次の問題が発生しました。バージョン固有のパラメーター型を持つアセンブリのメソッドを使用する必要がありました。

このx64バージョンにはIdToObject(long ID)、x86 には存在しないメソッドがあります。

このx86バージョンにはIdToObject(int ID)、x64 には存在しないメソッドがあります。

ID は、同じサード パーティの別のアセンブリによって提供されます (バージョン固有ではありません)。ObjectIDクラスはとToInt32()メソッドを提供しToInt64()ます。


バージョンでIdToObject(ID.ToInt32())を試すと、 .x64overflow at runtime

バージョンで試してみるとIdToObject(ID.ToInt64())、(int として long を渡そうとしています)。x86doesn't compile

これを試してみましたが、x64 バージョンでは問題なく動作しますが、x86 ではコンパイルできません。

if (System.Reflection.Assembly.GetExecutingAssembly().GetName().ProcessorArchitecture == System.Reflection.ProcessorArchitecture.X86)
    return Document.IdToObject(ObjectID.ToInt32()); //returns an object
else
    return Document.IdToObject(ObjectID.ToInt64()); //returns an object

したがって、プロジェクトが x86 に設定されている場合は 1 行をコンパイルし、プロジェクトが x64 に設定されている場合は別の行をコンパイルすることを避けるだけで十分です。私に何ができる?

4

1 に答える 1