我最近开始了一份新工作,发现大家都在谈论将我们所有的.NET应用程序更新为x64。起初我觉得这很奇怪,因为我们都知道.NET编译成平台无关的IL代码,而特定的CLR运行代码。
进一步了解后,我找到了这篇有用的文章和这个SO帖子,帮助我理解了事情的原委。
所以现在我明白了,IL代码没有改变,只是元数据基本上告诉它在WOW64上运行或不在x64系统上运行(简而言之)。
因此,如果我在x64系统上,可以指定“Any CPU”来本地运行,但不支持32位dll;我可以指定“x86”,它将支持32位dll(因为它们都将在WOW64下运行);但是,什么时候我才需要指定“x64”呢?似乎64位dll会在x64系统上的“Any CPU”场景中受支持。这是为了防止某人在32位系统上运行我的应用程序还是为了确保在尝试加载32位dll时失败?
对我来说,似乎只有在项目中涉及某些第三方dll时才需要将其设置为“Any CPU”以外的其他选项。对于没有涉及其他dll的每个其他项目,最好将其保留为“Any CPU”吗?
如果我确实将目标设置为“x86”,因为我有一个32位的第三方dll,那么如果在64位系统上仅在WOW64下运行,我的应用程序是否实际上被认为是在64位下运行?
进一步了解后,我找到了这篇有用的文章和这个SO帖子,帮助我理解了事情的原委。
所以现在我明白了,IL代码没有改变,只是元数据基本上告诉它在WOW64上运行或不在x64系统上运行(简而言之)。
因此,如果我在x64系统上,可以指定“Any CPU”来本地运行,但不支持32位dll;我可以指定“x86”,它将支持32位dll(因为它们都将在WOW64下运行);但是,什么时候我才需要指定“x64”呢?似乎64位dll会在x64系统上的“Any CPU”场景中受支持。这是为了防止某人在32位系统上运行我的应用程序还是为了确保在尝试加载32位dll时失败?
对我来说,似乎只有在项目中涉及某些第三方dll时才需要将其设置为“Any CPU”以外的其他选项。对于没有涉及其他dll的每个其他项目,最好将其保留为“Any CPU”吗?
如果我确实将目标设置为“x86”,因为我有一个32位的第三方dll,那么如果在64位系统上仅在WOW64下运行,我的应用程序是否实际上被认为是在64位下运行?