我有一个项目,其中我引用了third party assembly
。仅在Assembly有特定版本(x86或x64)时编译语句
该组件有x86 and x64 versions
。我只能参考一个,因为第三方系统依靠特定的工作。 (取决于哪台机器安装了系统)
到现在为止,我可以使用此答案管理单个项目中的两个版本。因此,我将配置管理器选项设置为x86或x64,并且知道要引用的版本。
Targeting both 32bit and 64bit with Visual Studio in same solution/project
但后来我想出了以下的问题:需要使用的方法,由具有特定版本的参数类型的组合。
x64
版本有一个IdToObject(long ID)
方法,在x86中不存在。
x86
版本的IdToObject(int ID)
方法在x64中不存在。
该ID由同一第三方的另一个程序集提供(它不是版本特定的)。 ObjectID
班给我ToInt32()
和ToInt64()
方法。
如果我尝试在x64
版本IdToObject(ID.ToInt32())
,我得到一个overflow at runtime
。
如果我尝试在x86
版本中尝试IdToObject(ID.ToInt64())
版本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,则需要另一行。我能做什么?
听起来像您可能不得不求助于使用预处理器指令?可能有另一种方式,但我不知道它会是什么。 http://msdn.microsoft.com/en-us/library/ed8yd1ha(v=vs.100).aspx –