我有一个 .NET 程序集需要是32位的,并且需要设置 /LARGEADDRESSAWARE
。
我知道可以使用 EditBin
来完成此操作,但我想知道在 Visual Studio 2010 中是否有内置的方法?或者,是否有人为此编写了 MSBuild 任务?
编辑:这是针对 C# 应用程序的,所以不幸的是没有链接器选项 :(
我有一个 .NET 程序集需要是32位的,并且需要设置 /LARGEADDRESSAWARE
。
我知道可以使用 EditBin
来完成此操作,但我想知道在 Visual Studio 2010 中是否有内置的方法?或者,是否有人为此编写了 MSBuild 任务?
编辑:这是针对 C# 应用程序的,所以不幸的是没有链接器选项 :(
在@ RouMao的回答上进行完善,您可能会收到一个错误消息,其中提示无法找到editbin。 通过指定以下方式,确保后构建事件命令行中的环境设置正确:
call "$(VS100COMNTOOLS)..\tools\vsvars32.bat"
editbin /largeaddressaware $(TargetPath)
另一个需要理解的是,启用了LARGEADDRESSAWARE
的应用程序在调试模式下不会运行,因为(在项目属性的Debug
选项卡下)默认勾选了启用Visual Studio托管进程
复选框,这会导致vshost.exe
未被正确标记。
取消该复选框以使用LARGEADDRESSAWARE
调试您的应用程序。
editbin /largeaddressaware $(TargetPath)
在“生成后事件命令行:”中输入。
这适用于VS2008,我认为在VS2010中应该也是同样的方式运作。
obj
文件夹中的文件而不是bin
文件夹中的文件进行发布。为了同时处理正常生成输出(用于调试/本地运行)和ClickOnce发布,你需要在Post Build事件中对两个**目录运行editbin
。我还建议将TargetPath
宏用引号括起来。 - Nick这是一个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>
<LargeAddressAware>
标签放在条件为x86平台的<PropertyGroup>
中。 - jpmc26<PlatformTarget>AnyCPU</PlatformTarget>
<Prefer32Bit>true</Prefer32Bit> <!--Default !false!-->
如果你的汇编代码是 AnyCPU 的,那么它会自动获得 LARGE ADDRESS AWARE
标志。
根据 Why does 'Any CPU (prefer 32-bit)' allow me to allocate more memory than x86 under .NET 4.5?的描述,使用VS 2019测试成功(需要Visual Studio 2015+)。
因此,在大多数情况下,您不需要采取任何特殊措施。您的 AnyCPU 汇编代码将默认在 x86 + LAA 下执行。
call "$(DevEnvDir)..\tools\vsvars32.bat"
。 - WiiMaxxcall "$(VS110COMNTOOLS)..\tools\vsvars32.bat"
。 - agez$(TargetPath)
周围加上引号,变成"$(TargetPath)"
。 - Freestyle076$(DevEnvDir)
,就像@WiiMaxx提到的那样。 - ToolmakerSteve