你的位置:首页 > 软件开发 > ASP.net > C#在不同平台下DLL的引用问题

C#在不同平台下DLL的引用问题

发布时间:2015-04-18 00:00:22
很多时候,我们需要引用在不同平台下的DLL,32位(X86)和64位(X64)。如果平台错误,在C#中会引发BadImageFormatException异常,未能加载或程序集。 解决思路 我们同时不能添加不同平台下的DLL,即使名称不一样(会报类型同时存在于两个DLL中)。能不 ...

很多时候,我们需要引用在不同平台下的DLL,32位(X86)和64位(X64)。如果平台错误,在C#中会引发BadImageFormatException异常,未能加载或程序集。

解决思路

我们同时不能添加不同平台下的DLL,即使名称不一样(会报类型同时存在于两个DLL中)。能不能只在某种平台下引用,在其他平台下不引用呢?

我们知道,VS工程的配置都保存在配置文件(.csproj)中。在VS中,找到相应的项目,右键选择卸载项目,完成后项目变为灰色,与下图类似C#在不同平台下DLL的引用问题。然后在项目上单击右键,选中编辑(项目名称).csproj。这们我们就可以查看VS工程文件。如下图:C#在不同平台下DLL的引用问题

在其中,我们惊喜的发现有Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "。我们猜想$(Platform)是具体的平台,包括AnyCPU、X86、X64。Condition表示条件。我们通过修改Debug和Release情况下的配置可以验证这一点(在工程的属性->生成标签页中可修改)。

 

再往下查看工程文件,我们发现有:C#在不同平台下DLL的引用问题

这正是我们在VS工程中所引用的DLL,那我们试试在其中能否设置Condition,答案是可以,C#在不同平台下DLL的引用问题

那么我们尝试着在不同平台上添加不同的条件,如下图:

C#在不同平台下DLL的引用问题

经过验证,我们发现,成功了……

在64位情况下C#在不同平台下DLL的引用问题,在32位情况下C#在不同平台下DLL的引用问题

扩展

Condition除了可以用==以外,还可以用!=,<, >, <=, >=等关系操作符,!,And,Or等逻辑操作符,详见MSBuild Conditions。

VS工程文件中包含Properties(定义于PropertyGroup中) 和ItemGroups (定义在ItemGroup中)两种类型的变量。$(PropertyName) 可引用所有定义在PropertyGroup中的变量,详见MSBuild的简单介绍与使用

在VS工程文件中最下面还有一行注释了的代码,这就是著名的生成前和生成后事件C#在不同平台下DLL的引用问题

关于MSBuild的更多知识,感兴趣的可以查看MSDN相关文档。

平台和平台目标

平台是指在配置管理器中定义的平台(位于生成菜单下),对应于PlatformC#在不同平台下DLL的引用问题

平台目标是指在项目生成属性中设置的目标平台,对应于PlatformTarget

C#在不同平台下DLL的引用问题

在C++中的应用

在C++中未测试过,原则上应该可以,下图是在C++中添加一个库目录后工程文件中添加的条目。

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:C#在不同平台下DLL的引用问题

关键词:C#

C#
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录