Как настроить LARGEADRESSAWARE в проектах без подписи для сборки приложения ClickOnce?

У меня есть приложение со следующими двумя командами после компиляции:

call editbin /LARGEADDRESSAWARE $(TargetPath)
call editbin /LARGEADDRESSAWARE $(ProjectDir)obj\$(PlatformName)\$(ConfigurationName)\$(TargetFileName)

и работает отлично.

Но когда я публикую на сервере приложение ClickOne, оно работает без ошибок, но при попытке установить на клиенте хэш файла отличается от значения, вычисленного в манифесте.

Я попытался использовать следующую команду:

sn -Ra $(ProjectDir)obj\$(PlatformName)\$(ConfigurationName)\$(TargetFileName) PublicPrivateKeyFile.snk

но не работает и показывает следующее сообщение:

app.exe не представляет собой сборку со строгим именем.

Я полагаю, это потому, что во всех моих проектах есть опция "подписывать сборку" со значением false. Перед использованием LARGEADDRESSAWARE приложение ClickOnce работало нормально.

Необходимо установить для параметра "подпись сборки" значение true для всех проектов, или есть ли способ использовать LARGEADDRESSAWARE со значением false для этой опции?

РЕДАКТИРОВАТЬ:

Решение Mark Sowul работает отлично: также я добавил в AfterBuild следующие строки, чтобы проверить, работает ли AfterCompile нормально

call "$(VS110COMNTOOLS)vsvars32.bat"
dumpbin /headers "$(TargetPath)" > "$(TargetPath).info"
findstr "(>2GB)" "$(TargetPath).info"
set BUID_ERRORLEVEL=%ERRORLEVEL%
del "$(TargetPath).info"
if [%BUID_ERRORLEVEL%]==[0] echo EXE program updated to use more than 2GB
if [%BUID_ERRORLEVEL%]==[1] echo ERROR: EXE PROGRAM WAS NOT UPDATED TO USE MORE THAN 2GB
set ERRORLEVEL=%BUID_ERRORLEVEL%

1 ответ

Решение

События Post Build слишком поздние в игре. Вы выяснили это до такой степени, как я, поняв, что вам нужно изменить файл в obj.

Однако Post Build происходит после генерации манифеста. Так что редактировать файл obj слишком поздно. Лучшее место для этого - цель сборки AfterCompile.

Вам придется редактировать csproj; добавьте после строк, которые вы уже увидите для этого:

<!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
       Other similar extension points exist, see Microsoft.Common.targets.
  <Target Name="BeforeBuild">
  </Target>
  <Target Name="AfterBuild">
  </Target>
  -->
    **<Target Name="AfterCompile">
        <Exec Command="
call &quot;$(VS110COMNTOOLS)\vsvars32.bat&quot;
editbin /largeaddressaware &quot;$(IntermediateOutputPath)$(TargetFileName)&quot;
" />
    </Target>**
Другие вопросы по тегам