我可以在Visual Studio中设置LARGEADDRESSAWARE吗?

时间:2010-04-08 05:38:23

标签: c# .net visual-studio msbuild

我有一个.net程序集需要32位,需要/ LARGEADDRESSAWARE。

我知道如何使用EditBin执行此操作,但我想知道Visual Studio 2010中是否存在内置方式?或者,有人为此编写了MSBuild任务吗?

编辑:这是针对C#应用程序的,所以没有链接器选项可悲:(

4 个答案:

答案 0 :(得分:97)

在@ RouMao的回答基础上,您可能会收到一条错误消息,指出无法找到 editbin 。确保通过指定如下正确设置构建后事件命令行中的环境:

call "$(VS100COMNTOOLS)..\tools\vsvars32.bat"
editbin /largeaddressaware $(TargetPath)

要理解的另一件事是,当(在项目属性中的LARGEADDRESSAWARE选项卡下)选中Debug复选框时,启用了Enable the Visual Studio hosting process的应用程序将无法在调试模式下运行(这是默认情况下),因为vshost.exe未正确标记。

取消选中该框以使用LARGEADDRESSAWARE调试您的应用程序。

答案 1 :(得分:49)

您可以将其作为构建后任务执行。在“构建事件”选项卡中,输入以下命令

editbin /largeaddressaware $(TargetPath)

进入“构建后事件命令行:”

这是VS2008的情况。我认为VS2010应该以同样的方式工作。

答案 2 :(得分:13)

这是一个NuGet包,可以在构建后在你的二进制文件上设置LargeAddressAware:https://github.com/KirillOsenkov/LargeAddressAware

它不需要editbin.exe,因为它有一个托管应用程序来以编程方式设置标志:https://github.com/KirillOsenkov/LargeAddressAware/blob/master/SetLargeAddressAware/LargeAddressAware.cs

<强>更新 要使用它,只需安装包并在.csproj中添加此属性:

<PropertyGroup> <LargeAddressAware>true</LargeAddressAware> </PropertyGroup>

答案 3 :(得分:1)

如果使用以下命令编译程序集:

<PlatformTarget>AnyCPU</PlatformTarget>
<Prefer32Bit>true</Prefer32Bit> <!--Default !false!-->

您生成的程序集将自动收到LARGE ADDRESS AWARE标志。

在VS 2019上进行了测试(并且应该在较早的版本中工作)。

因此,在大多数情况下,您无需执行任何特殊操作。默认情况下,您的AnyCPU程序集将在x86 + LAA下执行。