Могу ли я установить 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.

Другие вопросы по тегам