相关疑难解决方法(0)

何时在Visual Studio中定位x64

我最近开始了一份新工作,我注意到每个人都在谈论的第一件事就是将所有我们的.NET应用程序"更新" 到x64.我最初认为这很奇怪,因为我们都知道.NET编译为平台不可知IL并且特定CLR运行代码.

再往前看,我发现这篇有用的文章这篇SO帖子有助于解释事情.

所以现在我明白IL没有改变,只有元数据基本上说是在WOW64上运行或者不在x64系统上运行(简而言之).

因此,如果我在x64系统上,我可以指定"任何CPU"本地运行,但不支持32位dll; 我可以指定"x86",它将支持32位dll(因为它们都将在WOW64下运行); 但我什么时候会指定"x64"?在x64系统上的"Any CPU"方案中似乎支持64位dll.如果我想阻止某人在32位系统上运行我的应用程序或者在尝试加载32位dll时确保失败,这是不是?

在我看来,如果你的项目中有一些第三方dll ,你只需要将它设置为"Any CPU"以外的其他东西.对于其他不与其他dll打交道的项目,最好将其作为"任何CPU"吗?

如果我碰巧将我的目标设置为"x86",因为我有一个32位的第三方dll,如果在WOW64下的64位系统上,我的应用程序是否真的被认为是在64位运行?

.net 64-bit build visual-studio-2010

7
推荐指数
1
解决办法
1841
查看次数

为什么Visual Studio x86中的WPF应用程序的默认平台目标而不是AnyCPU?

当我在Visual Studio 2012中创建新的WPF应用程序时,默认情况下平台目标和构建配置设置为x86.为什么会这样?对于普通的WPF应用程序(没有任何对混合模式程序集的引用)使用AnyCPU是否存在任何危险,因此我的WPF可执行文件将被编译为x64机器上的x64代码和x86机器上的x86?

wpf jit build visual-studio-2010

7
推荐指数
1
解决办法
2556
查看次数

将“任何 CPU/首选 32 位”作为 VS 中的默认构建设置的基本原理

假设在 x64 Windows 机器上使用最新版本的 Visual Studio 和 C# 并分配大量数据。

果然,在使用默认构建设置(如下图为 VS 2019 Preview 2.1)进行编译时,当您的进程达到 4 GB 时,您将耗尽用户虚拟地址空间。这是意料之中的,这里讨论了原因。

在此处输入图片说明

例如,分配本身可以通过创建几百个简单数组来完成,每个数组包含几百万个int元素。

我想了解的是为什么Any CPU/Prefer 32-bit选择 被选为默认构建选项。我也注意到,2015年VS具有相同的默认设置过了,最有可能的每一个出来,因为VS 11,如所描述的版本在这里

通常被问到的问题是“什么是 AnyCPU...?” 并且已经反复回答(1 2 3 4 5),对定位的优点简要地接触x86/ x64/ Any CPU + Prefer 32-bit。但我还没有找到一个明确的答案,为什么被Any CPU + Prefer 32-bit选为 VS 中的默认设置。

查看默认情况下反对为 x64 构建的原因:

  • x64 进程将使用更多内存:对于上面描述的简单示例(数组的数组int),实际情况并非如此。当然,对数组本身的引用将是双倍的(8 个字节而不是 4 个字节),但仅此而已。根据“Windows Internals”一书(内存管理章节),页表结构本身的 PFN 条目在 x86 和 x64 架构上都是 64 位宽,只是有 3 …

.net c# memory visual-studio

6
推荐指数
0
解决办法
786
查看次数

如何知道在构建中使用哪个cpu(x86 x64或AnyCpu)?

我正在使用Windows 7和x64 cpu.这是否意味着我应该始终在Visual Studio中使用"x64"选项进行编译?那么"dll",我可以使用x64应用程序中的x86 dll吗?可能还有其他问题吗?

c# visual-studio-2010

5
推荐指数
2
解决办法
2586
查看次数

编译器错误 CS0433 - GAC 和临时 ASP.NET 文件中都存在该类型

我遇到过这样的情况:运行 ASP.NET MVC4 时出现运行时错误。我最近从 MVC3 迁移到 MVC4。

启动调试器后,我立即遇到以下错误消息:

类型“System.Web.Mvc.WebViewPage”存在于“c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\promotionweb\20a5681f\9ce59023\ assembly\dl3\29f671cf\37f0bcf2_4619d001\”中System.Web.Mvc.DLL'和'c:\ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ System.Web.Mvc \ v4.0_4.0.0.0__31bf3856ad364e35 \ System.Web.Mvc.dll'

我在 IIS 7.5 中运行,具有 MVC 项目本身的解决方案设置、另一个 C# 库以及一个控制台应用程序项目。

我已经尝试了此答案中提到的所有步骤,这些步骤源自类似的问题。然而,它对我来说根本没有帮助。

我有一些怀疑它必须对不同的编译模型执行,所以我尝试编译 x86 和 AnyCPU,并清理上面提到的所有目录。似乎没有什么帮助。

有什么想法可能会导致 GAC 和我的临时 ASP.NET 文件之间出现这种干扰吗?

c# asp.net temporary-asp.net-files iis-7.5

5
推荐指数
1
解决办法
1万
查看次数

从“任何 CPU”更改为“X64”

以前,我们的软件必须同时为 32 位和 64 位 Windows 创建。现在,产品管理层决定我们不再需要支持 32 位 Windows(这对于第三方 SDK 和驱动程序来说非常好)。

在我们几乎所有的 200 个项目中,DEBUG 和 RELEASE 配置只有“任何 CPU”的“平台目标”(只有第三方组件的一些包装器是专门的)。当然,该软件将在具有此类设置的 64 位系统上运行。但是只编译 64 位可以允许更多的编译器优化(或者我错了?),所以我更喜欢创建 64 位可执行文件。

如何为 MSBuild 指定平台?, 不可能简单地向 msbuild 命令行添加参数,而是必须更改每个项目...

最简单的方法是什么?或者我不需要关心,因为这样做没有好处?

注意:我们使用 C# 和 Visual Studio Professional 2015 版本 14.0.25425.01 更新 3。

msbuild visual-studio

5
推荐指数
1
解决办法
1760
查看次数

在Visual Studio C中设置cpu体系结构类型的重要性#

难道真的重要到指定的建筑类型,如果我做一个简单的Windows程序,利用HttpWebRequests,还是确定要离开它为"任何CPU"?

c# visual-studio-2010

3
推荐指数
1
解决办法
161
查看次数