问题标签 [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.
c# - 我什么时候应该用 /platform:x64 编译我的 c# 代码
阅读微软对 /platform 不同选项的解释,我发现当我使用 /platform:anycpu 时,它将在 32 位系统上作为 32 位应用程序运行,在 64 位系统上作为 64 位应用程序运行。
那么我为什么要强制它使用例如 x64 呢?
人们是否有理由使用其他选项?
c# - 切换“首选 32 位”时,64 位操作系统上的接口和泛型的奇怪调试器行为
我遇到了这种奇怪的行为:当我的项目设置设置为Any CPU
并Prefer 32-bit
在下面64bit Windows 7 OS
的.Net 4.5
程序上按预期工作时。但是,如果我在单步执行程序时关闭Prefer 32-bit
,我可以看到代码永远不会进入接口实现 - 但也不会引发任何错误。
我在以下控制台应用程序中将其提炼为最简单的形式:
正如预期的那样,当切换Prefer 32-bit
程序时,将在 .net 32 位程序集和 64 位程序集之间交替 - 它与 32 位程序集按预期工作,并与 64 位程序集“静默中断”。
正如@Athari 所建议的,它似乎与大型结构的大小有关。
我做错了什么导致这种行为?
c# - ComputeKeys 中的 AccessViolationException
首先,如果这对您来说显然是硬件问题,而不是编程问题,我深表歉意。如果是,希望我们可以将其迁移到适当的位置。
我有一个长期运行的 Web 服务程序(任何 CPU),它有一大堆保存在内存中的数据存储库。有些每小时刷新一次,有些则不那么频繁。其中一些存储库在从第 3 方来源检索数据后对数据(简单 POCO)进行排序。
一旦在一个蓝月亮,我AccessViolationException
在ComputeKeys
一个Sort
. 其中一些存储库List<T>.Sort
在从第 3 方来源获取数据后使用。
执行这些类型的代码很简单,并且取决于存储库,但这里有两个示例:
或者:
请注意,这些数据集相当大(相对而言)。一个有超过 140,000 个元素。我将异常记录到数据库中,这是我拥有的日志(时间与我拥有的另一个日志相关,显示存储库当时正在完成获取数据):
如您所见,它几乎同时发生在两台主机上。因此,我想知道这是否不是 .NET/编程问题 - 而是硬件问题。请注意,它们都是虚拟机,并且显然以相同的方式构建。不同主机上的两个进程都死了(我们在主机之间进行负载平衡)。
存储库刷新使用System.Threading.Timer
. 但是,查看我的存储库日志,没有存储库刷新少于一个小时,并且刷新的最长存储库是 11 分钟 - 所以没有重叠。
使用ReadWriterLockSlim
类保护对数据的访问。我知道这有点晦涩难懂,如果有人需要任何其他信息,我很乐意提供我所能提供的。
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 方法(不是完美的解决方案,但仍然......)。
知道如何解决这个问题吗?
c# - 构建平台目标 AnyCPU EXE 在 64 位机器上仍然显示 32 位标头
不确定以前是否有人问过这个问题(我找不到)。我有简单的控制台应用程序/ESE 并具有以下设置。
我正在运行 Windows 8、63 位操作系统。和 EXE 目标框架 .NET 4.5 但是,当我编译这个 EXE 时,它仍然显示为 32 位 EXE。
由于这是“任何 CPU”,我希望 EXE 编译为 64 位/PE32+。
有人可以帮忙说明为什么这仍然是32位吗?
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”?
c++ - 使用 Visual Studio 2013 创建混合(本机和托管)程序集的最简单方法是什么
我有一个我猜是在 x64 中构建的程序集,我想在任何 CPU配置的项目中引用它。但是当我使用任何 CPU 平台将该 .net 程序集引用到项目时,我收到以下警告
因此,我尝试使用此处描述的 c++ 混合模式程序集。我创建了一个 CLR 控制台应用程序(C++)。
但是我再次遇到了我长期与之抗争的同样的例外。在显示的解决方案中,CSharpT1 是引用 CppT1(一个 CLR Cpp 控制台应用程序项目)的启动项目。读完这篇文章后我所期望的是,我可以毫无问题地引用 CppT1,因为它是一个 Cpp 项目并且配置设置为 x64。但问题依然存在。我的想法是抛出 Cpp 项目,我将能够加载 x64 程序集。这是另一个参考。
c# - AnyCpu 参考 x64 有效吗?
当它将运行的系统肯定是 64 位系统时,从 AnyCpu dll 引用 x64-dll 是否有效?
我在问,因为我在这里遇到问题,得到如下异常:
“无法加载文件或程序集‘XY’或其依赖项之一。试图加载格式不正确的程序”
在过去的几年里,我用不同的解决方案多次遇到这个问题。有时它似乎有效,有时则无效。