我有一个项目,我在其中引用了third party assembly
.
那个大会有x86 and x64 versions
。我只能参考一个,因为第三方系统依赖于一个特定的工作。(取决于安装系统的机器)
到目前为止,我可以使用这个答案在一个项目中管理这两个版本。因此,我将配置管理器选项设置为 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())
在一个x86
版本中尝试,doesn't compile
(试图通过 int 长)。
我已经尝试过了,在 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 时编译单行,如果项目设置为 x64,则避免编译另一行。我能做些什么?