问题标签 [anycpu]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
319 浏览

c# - 我什么时候应该用 /platform:x64 编译我的 c# 代码

阅读微软对 /platform 不同选项的解释,我发现当我使用 /platform:anycpu 时,它将在 32 位系统上作为 32 位应用程序运行,在 64 位系统上作为 64 位应用程序运行。

那么我为什么要强制它使用例如 x64 呢?

人们是否有理由使用其他选项?

0 投票
1 回答
369 浏览

c# - 切换“首选 32 位”时,64 位操作系统上的接口和泛型的奇怪调试器行为

我遇到了这种奇怪的行为:当我的项目设置设置为Any CPUPrefer 32-bit在下面64bit Windows 7 OS.Net 4.5程序上按预期工作时。但是,如果我在单步执行程序时关闭Prefer 32-bit,我可以看到代码永远不会进入接口实现 - 但也不会引发任何错误。

我在以下控制台应用程序中将其提炼为最简单的形式:

正如预期的那样,当切换Prefer 32-bit程序时,将在 .net 32​​ 位程序集和 64 位程序集之间交替 - 它与 32 位程序集按预期工作,并与 64 位程序集“静默中断”。

正如@Athari 所建议的,它似乎与大型结构的大小有关。

我做错了什么导致这种行为?

0 投票
0 回答
134 浏览

c# - ComputeKeys 中的 AccessViolationException

首先,如果这对您来说显然是硬件问题,而不是编程问题,我深表歉意。如果是,希望我们可以将其迁移到适当的位置。

我有一个长期运行的 Web 服务程序(任何 CPU),它有一大堆保存在内存中的数据存储库。有些每小时刷新一次,有些则不那么频繁。其中一些存储库在从第 3 方来源检索数据后对数据(简单 POCO)进行排序。

一旦在一个蓝月亮,我AccessViolationExceptionComputeKeys一个Sort. 其中一些存储库List<T>.Sort在从第 3 方来源获取数据后使用。

执行这些类型的代码很简单,并且取决于存储库,但这里有两个示例:

或者:

请注意,这些数据集相当大(相对而言)。一个有超过 140,000 个元素。我将异常记录到数据库中,这是我拥有的日志(时间与我拥有的另一个日志相关,显示存储库当时正在完成获取数据):

如您所见,它几乎同时发生在两台主机上。因此,我想知道这是否不是 .NET/编程问题 - 而是硬件问题。请注意,它们都是虚拟机,并且显然以相同的方式构建。不同主机上的两个进程都死了(我们在主机之间进行负载平衡)。

存储库刷新使用System.Threading.Timer. 但是,查看我的存储库日志,没有存储库刷新少于一个小时,并且刷新的最长存储库是 11 分钟 - 所以没有重叠。

使用ReadWriterLockSlim类保护对数据的访问。我知道这有点晦涩难懂,如果有人需要任何其他信息,我很乐意提供我所能提供的。

0 投票
1 回答
391 浏览

windows - 确定程序是否使用 AnyCPU 构建

看完 这条评论

如果它内置在“任何 cpu”中,它将在 dumpbin 标头中显示为 32 位。

我想知道如何从 AnyCPU程序中分辨出普通的 32 位程序。如果可能的话,我宁愿从命令行执行此操作。我试过了

在每种类型的程序上,但无法以这种方式区分它们。

0 投票
1 回答
1210 浏览

vb.net - 当从 x64 中的外部 VB6 宏调用时,AnyCPU COM 库(.tlb 文件)不起作用

好吧,我的标题可能不够清楚。我使用一个可以开发 VB6 宏的应用程序。该宏需要与我也开发的 .NET dll 一起使用。当我在 x86 模式下启动应用程序并尝试运行宏时,它工作正常,我可以访问类的方法和所有内容。

但是当我在 x64 模式下做同样的事情时,我得到了错误:"Automation server can't create object"

真正奇怪的是,我没有使用任何x86 非托管 COM dll,这对于 x64 架构来说是个问题。当我这样做时:"Dim myClass as new MyClass.App"它正在工作,但是当我调用例如一个myClass.Start()方法时,我得到了这个错误。而且我尝试MsgBox('hello world')在我的Start方法中添加一个,以确保它与我的代码无关,仍然没有运气。我正在使用TLB文件将我的宏链接到我的班级。

我尝试使用 注册我的 DLL RegAsm,但它仍然无法在 x64 中工作。有没有办法生成我的 x86 和 x64 版本TLB?然后我会添加两个引用,如果 x64 版本在 Start 方法上引发错误,我只需调用 x86 方法(不是完美的解决方案,但仍然......)。

知道如何解决这个问题吗?

0 投票
2 回答
1289 浏览

c# - 构建平台目标 AnyCPU EXE 在 64 位机器上仍然显示 32 位标头

不确定以前是否有人问过这个问题(我找不到)。我有简单的控制台应用程序/ESE 并具有以下设置。

在此处输入图像描述

我正在运行 Windows 8、63 位操作系统。和 EXE 目标框架 .NET 4.5 但是,当我编译这个 EXE 时,它仍然显示为 32 位 EXE。

在此处输入图像描述

由于这是“任何 CPU”,我希望 EXE 编译为 64 位/PE32+。

有人可以帮忙说明为什么这仍然是32位吗?

0 投票
2 回答
13276 浏览

c# - C++/C# 解决方案中不可用的任何 CPU

我有一个包含 C# 和托管 C++ 项目的解决方案。它在解决方案平台 x64 和 x86 中编译。由于它是托管的 C++,我想创建一个“任何 CPU”解决方案并摆脱旧的解决方案。

我将 C++ 项目链接器设置更改为针对 x64 和 x86 的强制安全 IL 映像。

接下来,我使用配置管理器创建了一个名为“Any CPU”的新解决方案平台。接下来,我添加了一个项目平台,也称为“Any CPU”。

我继续将所有 C# 项目设置为“任何 CPU”,但对于 C++,我不能这样做。项目平台“Any CPU”不在下拉列表中,也没有选项“New...”。

VS 对此很满意,所以我保持原样并开始构建。令我惊讶的是,结果 DLL(来自 C++ 项目)是 MSIL,即使 C++ 的平台是 x64。编译 x32 时也会发生同样的情况,生成的 DLL 位于 MSIL 中。

是什么赋予了?为什么我不能将 C++ 项目设置为“任何 CPU”?

0 投票
0 回答
458 浏览

c++ - 使用 Visual Studio 2013 创建混合(本机和托管)程序集的最简单方法是什么

我有一个我猜是在 x64 中构建的程序集,我想在任何 CPU配置的项目中引用它。但是当我使用任何 CPU 平台将该 .net 程序集引用到项目时,我收到以下警告

因此,我尝试使用此处描述的 c++ 混合模式程序集。我创建了一个 CLR 控制台应用程序(C++)。

在此处输入图像描述

但是我再次遇到了我长期与之抗争的同样的例外。在显示的解决方案中,CSharpT1 是引用 CppT1(一个 CLR Cpp 控制台应用程序项目)的启动项目。读完这篇文章后我所期望的是,我可以毫无问题地引用 CppT1,因为它是一个 Cpp 项目并且配置设置为 x64。但问题依然存在。我的想法是抛出 Cpp 项目,我将能够加载 x64 程序集。这是另一个参考。

0 投票
1 回答
2853 浏览

c# - AnyCpu 参考 x64 有效吗?

当它将运行的系统肯定是 64 位系统时,从 AnyCpu dll 引用 x64-dll 是否有效?

我在问,因为我在这里遇到问题,得到如下异常:

“无法加载文件或程序集‘XY’或其依赖项之一。试图加载格式不正确的程序”

在过去的几年里,我用不同的解决方案多次遇到这个问题。有时它似乎有效,有时则无效。

0 投票
1 回答
2035 浏览

c# - 应用程序在 Visual Studio 的单元测试中以 x86 运行,但在独立时以 x64 运行

这行代码

当我的应用程序单独运行时评估为真。

但是,当它在 Visual Studio 的单元测试中运行时,相同的表达式的计算结果为 false。

我选择了“Any CPU”作为解决方案平台,机器是64位的。

为什么是这样?

在此处输入图像描述

即使我像上图那样设置它,Resharper 仍然将它作为 x86 运行