我有三个项目:ProjectA (exe)、ProjectB (exe)和ProjectD (类库)
项目A引用System.Data.OracleClient.dll和ProjectD。项目B只是引用了ProjectD。安装了32位客户端版本的oracle,因此ProjectA必须是32位应用程序。项目B可以作为64位应用程序构建.
项目A构建设置:
平台:活动(x86)
平台目标: x86
项目B构建设置:
平台:活动(任意CPU)
平台目标:任意CPU
我的问题是,ProjectD (类库)的构建设置应该是什么?当构建ProjectA和ProjectB时,它构建ProjectD的方式不同吗?就项目的沟通而言,对CLR作更深入的解释将是很好的。
ProjectA和ProjectB将用于64位Windows 2008.没有安装,只有独立的exe。
发布于 2013-03-19 12:57:11
只有EXE项目的平台目标设置才重要。这是首先加载并确定整个进程的比特性的程序集。
DLL没有选择,它必须与EXE项目所选择的任何内容兼容。因此,为DLL项目选择AnyCPU几乎总是正确的选择。
在一些情况下,可以使用显式设置。只有当您知道类库依赖于某种类型的本机代码时才会这样做,比如Oracle、和,它们试图在错误的bitness中运行本机代码会产生一个完全无法理解的异常。您可以避免该异常,并通过为DLL选择平台目标获得(稍微)更好的异常,当程序试图加载程序集时,程序将在早期使用BadImageFormatException失败。尽管这一例外并不是一个非常有用的例外。一些可能性,管理员将尝试重新安装DLL几次,然后决定真正的问题是在其他地方。
因此,基本的基本规则是:为EXE项目选择x86,为所有其他类库项目选择AnyCPU,为Oracle选择nastygram,因为它不做任何事情来使这件事变得简单。
发布于 2013-03-19 12:39:43
我的问题是,ProjectD (类库)的构建设置应该是什么?当构建ProjectA和ProjectB时,它构建ProjectD的方式不同吗?就项目的沟通而言,对CLR作更深入的解释将是很好的。
只需在库中使用Any CPU即可。它将构建一个独特的程序集,可以在32位en 64位环境中执行。
从技术上讲,实时编译可以生成32位代码,也可以在运行时生成64位代码.
https://stackoverflow.com/questions/15499553
复制相似问题