66

我有一个需要为 32 位且需要为 .NET 程序集的 .NET 程序集/LARGEADDRESSAWARE

我知道如何做到这一点EditBin,但我想知道 Visual Studio 2010 中是否有内置方法?或者,是否有人为此编写了 MSBuild 任务?

编辑:这是一个 C# 应用程序,所以遗憾的是没有链接器选项:(

4

4 回答 4

98

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

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

要理解的另一件事是,当(在项目属性的选项卡下)选中复选框(默认情况下)时,LARGEADDRESSAWARE启用的应用程序将不会在调试模式下运行,因为没有正确标记。DebugEnable the Visual Studio hosting processvshost.exe

取消选中该框以使用LARGEADDRESSAWARE.

于 2010-10-18T20:39:56.127 回答
50

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

editbin /largeaddressaware $(TargetPath)

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

VS2008 就是这种情况。我认为它应该以与 VS2010 相同的方式工作。

于 2010-04-08T08:15:04.717 回答
20

这是一个 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>
于 2017-07-19T06:33:13.030 回答
6

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

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

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

使用 VS 2019 测试(需要 Visual Studio 2015+,根据Why does 'Any CPU (prefer 32-bit)' allow me to allocate more memory than x86 under .NET 4.5?)。

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

于 2019-12-23T01:30:08.377 回答