[英]Compile a statement only if Assembly has specific version (x86 or x64)
我有一个引用third party assembly
。
该程序集具有x86 and x64 versions
。 我只能引用一个,因为第三方系统依赖于特定的系统来工作。 (取决于安装了系统的机器)
到目前为止,我可以使用此答案在一个项目中管理两个版本。 因此,我将配置管理器选项设置为x86或x64,它知道要引用的版本。
在同一解决方案/项目中使用Visual Studio定位32位和64位
但是随后我遇到了以下问题:需要使用该程序集中具有特定于版本参数类型的方法。
x64
版本具有x86中不存在的IdToObject(long ID)
方法。
x86
版本具有x64中不存在的IdToObject(int ID)
方法。
该ID由同一第三方的另一个程序集提供(不是特定于版本的)。 ObjectID
类为我提供了ToInt32()
和ToInt64()
方法。
如果我尝试在x64
版本中使用IdToObject(ID.ToInt32())
,则会overflow at runtime
。
如果我尝试在x86
版本中使用IdToObject(ID.ToInt64())
, 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
因此,我需要做的是避免在project设置为x86时编译一行,而在project设置为x64时避免另一行。 我能做什么?
看起来您将需要使用预处理程序指令。 在用于64位生成配置的项目属性中,在“生成”,“条件编译”符号下添加WIN64。 然后将您的代码更改为此:
#if WIN64
return Document.IdToObject(ObjectID.ToInt64()); //returns an object
#else
return Document.IdToObject(ObjectID.ToInt32()); //returns an object
#endif
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.