繁体   English   中英

仅当Assembly具有特定版本(x86或x64)时才编译语句

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM