を参照するプロジェクトがあり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())
を試すと、 .x64
overflow at runtime
バージョンで試してみるとIdToObject(ID.ToInt64())
、(int として long を渡そうとしています)。x86
doesn'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 に設定されている場合は別の行をコンパイルすることを避けるだけで十分です。私に何ができる?