我有以下代码,不能在x64操作系统上运行,因为notepad.exe是x64,x86应用程序无法获取x64进程的模块信息.
prc.Modules[0].FileName
Run Code Online (Sandbox Code Playgroud)
.Net异常会抛出我的代码
System.ComponentModel.Win32Exception(0x80004005):32位进程无法获得64位进程的模块.
根据这个论坛上的许多答案和文章,MSDN,...,我知道我需要使用AnyCPU,因为使用x64对我没有特别的好处.(不好意思:我测试了一个检查性能的代码,x64代码跑得快了~40毫秒.没关系我不希望我的代码运行速度快40毫秒:D)相反我不会有这样的问题.但即使在AnyCPU配置上编译时也是如此.我的错误仍然存在,此外,在任务管理器中,我在进程名称的末尾看到一个(32位).
我不知道那是错的.VS 2011 Beta(x64)Windows 8 Consumer Preview(x64)
真诚的,Peyman Mortazavi
我们有一个包含许多不同库的大型解决方案.我们刚刚迁移到64位系统上的开发,这让我们考虑了我们应该为解决方案中的每个项目指定的平台目标.
目前,我们只有一个引用32位DLL文件的库项目.我们引用了此DLL文件的Interop,但是当将x86作为此项目的平台时,我们收到错误,同时将解决方案中的其余项目保留为"Any CPU".
我的问题是,除了引用32位互操作的项目之外,我们可以在所有项目上定位任何CPU吗?或者应该只为x86构建一切,因为这似乎没有任何错误.
我有一个.Net4 WinForms应用程序引用第三方.Net2程序集,其中包含图形密集的可视控件.当我意外地将它从AnyCpu切换到x86编译模式时,我注意到应用程序的视觉性能有了很大的提高.我的开发工具是x64 Windows 7.当控件渲染其图形元素时,改进至少为两倍.
这是一个众所周知的事实还是我做错了什么?
可能重复:
加载x86或x64程序集
我正在尝试编译任何CPU .NET项目,但我必须链接SQLite库,它具有x86和x64平台的不同版本.仅将DLL版本更改为x64没有帮助,应用程序无法启动,我需要使用x64引用重新编译代码.当我添加x86和x64引用时,由于冲突,它无法编译.我无法使用x86编译应用程序,因为我正在使用的系统COM库之一在WOW64下无法运行.
All 32-bit VSS applications (requesters, providers, and writers) must run as native 32-bit or 64-bit applications. Running them under WOW64 is not supported
所以我需要构建任何CPU项目,但我目前看到的唯一解决此问题的方法是为x86和x64重复项目.有更好的吗?
UPDATE
当我在项目中引用x64库,但尝试加载x86库时,我得到以下异常.
The located assembly's manifest definition does not match the assembly reference.
一个非常大的解决方案中的许多项目之一以某种方式设置为Build Platform == Active(x86).我希望它匹配所有其他项目("任何CPU").
我成功地将平台目标下拉列表从"Active(x86)"更改为"Any CPU",但Platform下拉列表中的"Active(x86)"是唯一选项:

我不知道这个项目是如何与其他人一起"不同步"开始的,更重要的是如何让它与其他人一致...
我认为问题可能是我的VS安装设置为VB而不是C#(它是由IT完成的,这里的大多数猫都是VB开发人员).
这:http://go4answers.webhost4life.com/Example/buildsolution-configuration-dropdown-188435.aspx提到工具| 设置,但我没有这样的菜单项.
我确实选择了将设置重置为原始设置的选项,并且"设置重置进行中"对话框现在已经转动了半小时,现在是VS"(无响应")
现在我遇到了与Windows CE项目相反的问题 - 我需要它是"x86"并且它拒绝改变为"任何CPU".
我想要更改此设置的原因是因为当尝试在手持设备上运行此应用程序时,我收到"无法找到P/Invoke DLL sqlcemeNN.dll"错误信息.
根据此:" 如果你的机器是64位中,您可能已经得到陷入默认目标平台'任何CPU’陷阱,请设置目标平台为'86’需要更多详细资讯,请访问ErikEJ的博客文章. "
我的机器是 64位,我确实阅读了引用的博客文章
...但我的配置管理器的"Active Solution Platform"下拉列表中没有"x86"选项."任何CPU"是它给我的唯一选择......
我能够以某种方式强制"Active Solution Platform"下拉列表在输入后输入"x86",但我认为它确实没有改变任何东西.在网格中,唯一的选择是"任何CPU".从"项目"列中选择"编辑..."(没有"新建...")只显示列表中的"任何CPU",灰色的"删除"按钮和关闭按钮("greyedoutprojectplatforms巴纽")
所以我尝试的是将项目的.csproj文件中的"Any CPU"的每个实例更改为"x86",并且在项目>属性>构建>平台目标中仍然显示"任何CPU"!
我是创建 .NET 应用程序的新手,尤其是混合应用程序。
最近,我在(非托管)C++(在 MS Visual Studio 2010 下)中为客户端创建了一组(静态)库,支持 32 位和 64 位编译,由某些应用程序加载,通常很好. (在内部,此功能使用各种其他第三方库,如 OpenGL、boost、glm 等)
现在,他还希望能够在他的 C# 应用程序中使用我作为自定义控件提供的一些功能。
所以我创建了一个支持 CLR 的 dll,使用 C++/CLI 为我的功能创建包装类,然后创建一个自定义的 WPF 控件,它是公共的(因此可以从外部访问),再次在两者中构建都可以正常工作32 位和 64 位。
然后为了测试,我创建了一个简单的 C# 应用程序(它真的很简单,因为我是 C# 新手,我的背景是 C/C++),它可以内置 32 位或 64 位,并且可以成功地从我的 DLL 加载控件并做它应该做的事情。
我现在遇到的问题是,他说他只想将单个可执行文件作为“任何 CPU”分发,然后根据启动位置加载适当的代码(即 32 位或 64 位)。
所以我所做的是在 C# 测试项目中添加一个“Any CPU”配置,并将“build”选项卡下的“platform target”设置为“Any CPU”。但现在我不确定在配置管理器下为其他项目设置什么平台(即 C++ 静态库,由 C++/CLI 混合模式 dll 使用)。所以为了测试我把它留在 x64 上,但是当我构建它时,我收到警告:
Warning MSB3270: There was a mismatch between the processor architecture of the project being built "MSIL" and the …Run Code Online (Sandbox Code Playgroud) 当它运行的系统肯定是64位系统时,从AnyCpu dll引用x64-dll是一个有效的方案吗?
我问,因为我在这里有问题,得到如下例外:
"无法加载文件或程序集'XY'或其依赖项之一.尝试加载格式不正确的程序"
在过去的几年里,我用不同的解决方案多次遇到这个问题.有时它似乎工作,有时不工作.
我已经研究了有关在visual studio中使用不同目标平台选项构建应用程序的信息,但我仍然无法理解以下内容:
我们什么时候需要设置 x86 或 x64 目标?
与设置“任何 cpu”相比,设置特定目标平台(x86 或 x64)有何优势?
总是设置“任何cpu”不是更容易吗?
我有一个基于 .net Framework 4.7.2 构建的 .net 程序,它调用 rdotnet DLL(基于 .net 标准 2.0 构建)来运行 R 脚本,该程序和 DLL 均针对“Any”进行编译CPU的平台,当我将其部署到64位Windows 10机器并执行程序时,它一直显示以下内容:
This 64-bit process failed to load the library R.dll. Native error message is 'The operation completed successfully'
Run Code Online (Sandbox Code Playgroud)
但是,当我在调试模式下运行程序时,我没有收到此消息。我的问题是我的上述设置是否正确,或者我应该在不同的框架/平台组合中编译它们?
当我按F5时,我已将VSIX-Project配置为运行devenv.exe.这将从Visual Studio打开起始页.为了测试我的扩展,我必须手动打开一个特定的解决方案.
我尝试使用参数'/ Run PathToSolution.sln'运行devenv,这将使用指定的解决方案启动VS,但也运行启动项目.有没有办法运行devenv并打开一个特定的解决方案?