我有一个项目,我引用third party assembly
。
该集会有x86 and x64 versions
。我只能引用一个,因为第三方系统依赖于特定的一个工作。 (取决于安装系统的机器)
到目前为止,我可以使用此答案在单个项目中管理这两个版本。因此,我将配置管理器选项设置为x86或x64,它知道要引用的版本。
Targeting both 32bit and 64bit with Visual Studio in same solution/project
但后来我遇到了以下问题:需要使用具有版本特定参数类型的程序集中的方法。
x64
版本的x86中不存在IdToObject(long ID)
方法。
x86
版本的x64中不存在IdToObject(int ID)
方法。
ID由同一第三方的另一个程序集提供(不是特定于版本的)。 ObjectID
课程为我提供了ToInt32()
和ToInt64()
方法。
如果我在IdToObject(ID.ToInt32())
版本中试用x64
,我会收到overflow at runtime
。
如果我在IdToObject(ID.ToInt64())
版本x86
中尝试doesn't compile
(尝试将long作为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则避免编译另一行。我该怎么办?
答案 0 :(得分:1)
看起来您需要使用预处理程序指令。在64位构建配置的项目属性中,在Build,Conditional compilation symbols下添加WIN64。然后将您的代码更改为:
#if WIN64
return Document.IdToObject(ObjectID.ToInt64()); //returns an object
#else
return Document.IdToObject(ObjectID.ToInt32()); //returns an object
#endif