我可以在 Visual Studio 中设置 LARGEADDRESSAWARE 吗?
Posted
技术标签:
【中文标题】我可以在 Visual Studio 中设置 LARGEADDRESSAWARE 吗?【英文标题】:Can I set LARGEADDRESSAWARE from within Visual Studio? 【发布时间】:2011-02-05 13:38:57 【问题描述】:我有一个需要为 32 位且需要为 /LARGEADDRESSAWARE
的 .NET 程序集。
我知道如何使用EditBin
执行此操作,但我想知道 Visual Studio 2010 中是否有内置方法?或者,是否有人为此编写了 MSBuild 任务?
编辑:这是一个 C# 应用程序,所以遗憾的是没有链接器选项:(
【问题讨论】:
【参考方案1】:基于@RouMao 的回答,您可能会收到一条错误消息,指出找不到 editbin。通过如下指定确保构建后事件命令行中的环境设置正确:
call "$(VS100COMNTOOLS)..\tools\vsvars32.bat"
editbin /largeaddressaware $(TargetPath)
要了解的另一件事是,当(在项目属性中的 Debug
选项卡下)选中 Enable the Visual Studio hosting process
复选框(默认情况下)时,启用 LARGEADDRESSAWARE
的应用程序将不会在调试模式下运行,因为 vshost.exe
未正确标记。
取消选中该框以使用 LARGEADDRESSAWARE
调试您的应用程序。
【讨论】:
对于 VS 2013,您需要将第一行更改为call "$(DevEnvDir)..\tools\vsvars32.bat"
对于那些使用 VS 2012 的人来说,第一行是call "$(VS110COMNTOOLS)..\tools\vsvars32.bat"
别忘了将$(TargetPath)
用引号括起来"$(TargetPath)"
对于VS2010,我也使用@WiiMaxx提到的$(DevEnvDir)
快速更新 - 由于路径的变化,DevEnvDir 自 VS2017 起不再工作(请参阅***.com/questions/42805662/…)。我最终不得不使用 $(VS140COMNTOOLS)【参考方案2】:
您可以将其作为构建后任务来完成。在“构建事件”选项卡中,输入以下命令
editbin /largeaddressaware $(TargetPath)
进入“构建后事件命令行:”
VS2008 就是这种情况。我认为它应该以与 VS2010 相同的方式工作。
【讨论】:
这很好用,但如果您使用 ClickOnce 发布,请注意它使用obj
文件夹中的文件而不是 @ 中的文件发布987654324@。要涵盖正常的构建输出(用于调试/本地运行)以及 ClickOnce 发布,您需要在 Post Build 事件中针对 both 目录运行 editbin
。我还建议将 TargetPath
宏用引号括起来。
请务必查看 Kirill 的回答。他的 nuget 包非常有帮助。 ***.com/a/45182578/55721【参考方案3】:
这是一个 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>
【讨论】:
添加这个 nuget 包后会自动设置 largeaddressaware 吗?或者我需要在我的代码中做些什么? 添加 NuGet 包并设置<LargeAddressAware>
标记放在 x86 平台上的 <PropertyGroup>
s 中。
您需要对项目中的 DLL 文件以及 exe 执行此操作,还是只需要 exe?
@rolls 只是 exe【参考方案4】:
如果你编译你的程序集:
<PlatformTarget>AnyCPU</PlatformTarget>
<Prefer32Bit>true</Prefer32Bit> <!--Default !false!-->
您生成的程序集将自动收到LARGE ADDRESS AWARE
标志。
使用 VS 2019 进行测试(根据 Why does 'Any CPU (prefer 32-bit)' allow me to allocate more memory than x86 under .NET 4.5? 需要 Visual Studio 2015+)。
因此,在大多数情况下,您不需要任何特殊操作。默认情况下,您的 AnyCPU 程序集将在 x86 + LAA 下执行。
【讨论】:
以上是关于我可以在 Visual Studio 中设置 LARGEADDRESSAWARE 吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual Studio / OpenGL 中设置 GPU [重复]
有没有办法在Visual Studio Code中设置环境变量?
使用 Visual Studio 构建任务在 azure devops 中设置工作目录