我有一个需要为 32 位且需要为 .NET 程序集的 .NET 程序集/LARGEADDRESSAWARE
。
我知道如何做到这一点EditBin
,但我想知道 Visual Studio 2010 中是否有内置方法?或者,是否有人为此编写了 MSBuild 任务?
编辑:这是一个 C# 应用程序,所以遗憾的是没有链接器选项:(
我有一个需要为 32 位且需要为 .NET 程序集的 .NET 程序集/LARGEADDRESSAWARE
。
我知道如何做到这一点EditBin
,但我想知道 Visual Studio 2010 中是否有内置方法?或者,是否有人为此编写了 MSBuild 任务?
编辑:这是一个 C# 应用程序,所以遗憾的是没有链接器选项:(
基于@RouMao 的回答,您可能会收到一条错误消息,指出无法找到editbin 。通过指定以下内容确保正确设置构建后事件命令行中的环境:
call "$(VS100COMNTOOLS)..\tools\vsvars32.bat"
editbin /largeaddressaware $(TargetPath)
要理解的另一件事是,当(在项目属性的选项卡下)选中复选框(默认情况下)时,LARGEADDRESSAWARE
启用的应用程序将不会在调试模式下运行,因为没有正确标记。Debug
Enable the Visual Studio hosting process
vshost.exe
取消选中该框以使用LARGEADDRESSAWARE
.
您可以将其作为构建后任务来完成。在“构建事件”选项卡中,输入以下命令
editbin /largeaddressaware $(TargetPath)
进入“构建后事件命令行:”
VS2008 就是这种情况。我认为它应该以与 VS2010 相同的方式工作。
这是一个 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>
如果您使用以下命令编译您的程序集:
<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 下执行。