我有一个.net程序集需要32位,需要/ LARGEADDRESSAWARE。
我知道如何使用EditBin执行此操作,但我想知道Visual Studio 2010中是否存在内置方式?或者,有人为此编写了MSBuild任务吗?
编辑:这是针对C#应用程序的,所以没有链接器选项可悲:(
答案 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下执行。