问题标签 [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 投票
1 回答
163 浏览

c# - 在任何机器 X86、X64 或 AnyCpu 上部署 C#

我是一名 C# 程序员。在我的公司,我们开发了一个程序,该程序具有一个可执行文件,部署在各种机器上。我的老板说这样做的唯一方法是制作一个 X86 可执行文件,如果在 X86 机器上工作,那么它肯定也可以在 X64 上工作。所以我想知道:这是正确的吗?在 X86/X64 上使用相同的 exe 有什么缺点。无论如何,AnyCpu 设置是什么。

此外,由于大多数 IT 公司都在 X86/X64 中实现多元化,这不是更好吗?

谢谢帕特里克

0 投票
1 回答
404 浏览

.net - 我可以在运行 x64 操作系统的 VB.NET 中开发 x86 应用程序吗?

我有一台 W7 x64 PC,但当最终应用程序安装在另一台 PC 上时,我知道兼容性。

是否会在任何 Windows PC 上自动运行?我应该考虑什么来提高兼容性?

0 投票
1 回答
640 浏览

c# - 是否建议始终为 Xamarin 项目选择目标 AnyCPU?

当尝试除 AnyCPU 之外的其他目标时,我会遇到更多错误,并且依赖关系更难以解决。

But when choosing AnyCPU target, I get less errors.

是否建议始终为 Xamarin 项目选择此目标?

0 投票
0 回答
1051 浏览

visual-studio - Visual Studio 任何 CPU = 总是 x86?

以前曾提出过类似的问题(如 5 年前)。今天我寻找这个问题,因为它似乎有一些改变。

您会看到,作为对“任何 CPU 目标是什么意思?”问题的明确标记答案。其中“它在 64 位系统上表现为 x64,在 32 位系统上表现为 x86。”。

我刚刚尝试过,它在我的任务管理器中告诉我它实际上是作为 32 位应用程序运行的。是一直这样还是多年来发生了一些变化?还是我做错了什么?任务管理器在说谎吗?

这是一个屏幕截图,显示了在 64 位系统上运行的 Any-CPU 应用程序:

这是一个屏幕截图,显示了在 64 位系统上运行的 Any-CPU 应用程序。

我如何才能真正确保我的应用程序在 64 位架构上作为 64 位进程运行?或者我们是否需要返回始终发布我们的应用程序的两个版本?

0 投票
1 回答
477 浏览

c# - 编译为 AnyCPU 生成在 64 位机器上设置了 32BIT 标志的程序集

我在 64 位机器上的 Visual Studio 2013 中创建了一个全新的 .NET 4.5 WinForm 项目。编译后,我在 .exe 中运行 corflags 并设置了 32BIT 标志。

当我查看任务管理器时,它也被标记为 32 位进程。

我没有添加任何可能会强制它以 32 位模式运行的引用。我查看了项目文件,也没有发现任何可疑之处。

我可以corflags /32BIT-在程序集上运行,它作为 64 位进程运行得很好。

什么可能导致它编译为 32 位可执行文件?

0 投票
1 回答
409 浏览

solace - 为 AnyCPU 编译的 Solace .Net API

为什么 Solace .Net API 不针对 AnyCPU?我在 Reflector 中比较了SolaceSystems.Solclient.Messaging.dllSolaceSystems.Solclient.Messaging_64.dllSolaceNativeAPI程序集,除了一个指向libsolclient.dlllibsolclient_64.dll的类之外,它们完全一样。似乎很容易将此类转换为非静态、公开通用接口ISolaceNativeAPI,而不是SolaceNativeAPI创建一个检查当前进程架构并返回 32 或 64 位实现的工厂。

如果 Solace 代码存储库是公开的,我很乐意提交拉取请求,因为它会使我当前的工作更轻松。

0 投票
1 回答
980 浏览

c# - 如何将两个托管的 x86/x64 dll 合并到一个托管的 AnyCpu 库中?

第三方编译非托管代码(x86/x64 分离)并为任一平台(x86/x64 分离)提供托管 C# .NET dll:

  • FooManaged_x86.dll
  • FooManaged_x64.dll

这是我收到的(既不是本机代码,也不是非托管 dll)。

然后,我可以创建一个针对 x86 或 x64 的 C#.NET 应用程序(或库),并直接引用相应的托管 dll - 一切都很好,但仅限于一个特定平台(不是我的目标)。

我的应用程序可以针对 AnyCpu(我的目标),引用 x64 dll(错误,编译器警告),并且只有当它实际以 x64 运行时才能工作。同样,这绑定到一个特定的平台。

我知道,我可以通过在运行时动态加载适当的 dll(在后台使用 DllImport 和手动 AssemblyLoad)将非托管x86/x64 dll(使用 Fody.Costura)合并到一个托管 dll 中。我已经非常成功地做到了这一点,但是这种方法不太适合托管dll。我将不得不从托管 C# PInvoke 到托管 C# dll - 这对我来说听起来不对。

问:有没有什么方法可以将两个托管的 x86/x64 dll 合并为一个托管的 AnyCpu dll,而无需 PInvoke?

0 投票
0 回答
112 浏览

c# - 为什么“任何 CPU”应用程序在 32 位上运行

我创建了一个新的 C# 控制台应用程序,并且 Main 方法中只有一行代码

当我使用 Any CPU 平台构建项目时,应用程序作为 32 位应用程序运行。(我在任务管理器和 SigCheck 工具中检查了这个)。当我使用 x64 平台构建项目时,应用程序作为 64 位应用程序运行。

我的问题是为什么“任何 cpu”应用程序不能在 Windows x64 中作为 64 位应用程序运行。

系统:Windows 8.1 x64、Visual Studio 2015、.Net framework 4.5.2

0 投票
2 回答
798 浏览

c# - c#visual studio build exe 与目标anycpu 但这决定了它在调用进程平台(x86/x64)上的平台(x86/x64)

我们有一个 32 位和 64 位的软件,它调用我们的 exe 并将事件传递给它(如插件)。

问题是我们的 exe 必须以与调用软件相同的位数(x86/x64)执行(如果软件以 32 位版本运行,我们的 exe 必须以 32 位运行,如果软件以 64 位版本运行,我们的 exe必须以 64 位运行)。windows 版本为 64 位,但客户端可以运行 32 位或 64 位版本的软件。

在 Visual Studio(2015) 中,Target AnyCPU 选项仅取决于 windows 版本(+ 首选 32 位复选框),但我们需要依赖于调用软件进程。

有没有我们可以实施的选项或解决方案,而不是编译到每个平台(x86 和 x64)?

0 投票
1 回答
260 浏览

c# - 如何启动一个 AnyCPU 编译的 COM 服务器

我将 Microsoft 示例用于 COM-Server: 进程外 C# COM 服务器 (CSExeCOMServer)

一个简单的控制台 COM 客户端应该只启动服务器并使用它的方法、属性和事件。

这实际上直接起作用。由于其配置的平台目标 x86,服务器以 32 位出现。但是我有一个 64 位操作系统,现在我想让它在 64 位上运行。注册在服务器的构建后事件中完成。所以我更改了注册(使用Framework64 regasm.exe),以便服务器也将以64位注册。然后我将平台目标更改为 AnyCPU。如果我现在启动客户端,它会挂在行中

但我可以在任务管理器中看到服务器以 64 位正确启动。大约 1 分钟后,我得到以下异常:

由于以下错误,检索具有 CLSID {DB9935C1-19C5-4ED2-ADD2-9A57E19F53A3} 的组件的 COM 类工厂失败:80080005 服务器执行失败(来自 HRESULT 的异常:0x80080005 (CO_E_SERVER_EXEC_FAILURE))。

在 System.RuntimeTypeHandle.CreateInstance(RuntimeType 类型,Boolean publicOnly,Boolean noCheck,Boolean& canBeCached,RuntimeMethodHandleInternal& ctor,Boolean& bNeedSecurityCheck)在 System.RuntimeType.CreateInstanceSlow(Boolean publicOnly,Boolean skipCheckThis,Boolean fillCache,StackCrawlMark 和 stackMark)在 System.RuntimeType.CreateInstanceDefaultCtor (Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark & stackMark)
在 System.Activator.CreateInstance(Type type, Boolean nonPublic) at System.Activator.CreateInstance(Type type) at ConsoleClient.Program.Main(String[] args) 在 C:\Source\User\MaLe\Tests\CSExeCOMServer\C# \ConsoleClient\Program.cs:第 17 行 System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 在 Microsoft.VisualStudio.HostingProcess.HostProc .RunUsersAssembly()
在 System.Threading.ThreadHelper.ThreadStart_Context(对象状态)
在 System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 在 System.Threading.ExecutionContext.Run System.Threading.ThreadHelper.ThreadStart() 处的(ExecutionContext executionContext、ContextCallback 回调、对象状态)

如果我手动启动服务器 exe 并尝试再次通过 COM 连接到它,我可以在任务管理器中看到客户端启动了第二个服务器而不是连接到第一个服务器。这个确实是 64 位的,但是会发生异常,并且在关闭客户端后,第二台服务器也会关闭。如果我在 AnyCPU 中使用 Prefere 32-bit 标志强制服务器为 32 位,则一切正常,但在 32 位中。如果我将平台目标设置为 x64,那么在 64 位下一切正常。因此,如果它以 64 位启动,它仅在 AnyCPU 配置中不起作用。

有谁知道我做错了什么?我真的需要一个 COM-Server 才能在 AnyCPU 配置中运行,即使是 64 位。我实际上不想拥有单独的 32 位和 64 位 exe。顺便说一句,当我测试它时,它也起作用了。

感谢您的帮助。