Могу ли я установить LARGEADDRESSAWARE из Visual Studio?
У меня есть сборка.net, которая должна быть 32-битной и должна быть /LARGEADDRESSAWARE.
Я знаю, как это сделать с помощью EditBin, но мне интересно, есть ли встроенный способ в Visual Studio 2010? Или, наоборот, кто-то написал для этого задачу MSBuild?
Редактировать: это для приложения на C#, так что, к сожалению, нет компоновщика:(
3 ответа
Вы можете сделать это как задание после сборки. На вкладке "Build Events" введите следующую команду
editbin /largeaddressaware $(TargetPath)
в "Командную строку события после сборки:"
Это касается VS2008. Я думаю, что это должно работать таким же образом для VS2010.
Опираясь на ответ @RouMao, вы можете получить сообщение об ошибке, в котором говорится, что editbin не найден. Убедитесь, что среда в командной строке события после сборки настроена правильно, указав следующее:
call "$(VS100COMNTOOLS)..\tools\vsvars32.bat"
editbin /largeaddressaware $(TargetPath)
Следует также понимать, что если на вкладке " Отладка " в свойствах проекта установлен флажок " Включить процесс размещения Visual Studio" (по умолчанию), приложение не будет работать с LARGEADDRESSAWARE (поскольку файл vshost.exe не помечен должным образом). Снимите этот флажок, чтобы отлаживать приложение, используя LARGEADDRESSAWARE.
Это пакет 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+ согласно Почему "Любой ЦП (предпочитает 32-разрядный)" позволяет мне выделять больше памяти, чем x86 под.NET 4.5?).
Так что в большинстве случаев никаких особых действий не требуется. Ваша сборка AnyCPU по умолчанию будет выполняться под x86 + LAA.