Как получить путь к последней версии Windows SDK в событии предварительной сборки и после сборки проекта С#?

В моем проекте Visual Studio 2010 мы запускаем pre-build и post-buildevent в проекте C# следующим образом:

prebuildevent: C:\Program Files (x86)\Microsoft SDK\Windows\v7.0A\Bin\rc.exe $(ProjectDir)$(ProjectName).rc

postbuildevent: C:\Program Files (x86)\Microsoft SDK\Windows\v7.0A\Bin\mt.exe -manifest $(ProjectDir)$(TargetName).exe.manifest -outputresource:$(TargetDir)$(TargetFileName) ;#1

Где пути для rc.exe и mt.exe жестко запрограммированы для Visual Studio 2010. Сейчас мы переходим с Visual Studio 2010 на Visual Studio 2019.

В Visual Studio 2019 файлы rc.exe и mt.exe находятся по этому пути: C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x86\rc.exe и C:\Program Files ( x86)\Windows Kits\10\bin\10.0.17763.0\x86\mt.exe.

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

Я обнаружил, что мы можем использовать переменную WindowsSdkverbinpath для получения пути к последней версии Windows SDK, но в моем случае я могу использовать ее как $(WindowsSdkverbinpath) для проектов c++ и он разрешает путь и проекты С#, я не могу использовать его, как в проектах С++.

Цель поиска WindowsSdkverbinpath — использовать его в событиях до и после сборки для доступа к mt.exe и rc.exe.

Пожалуйста, помогите мне заставить WindowsSdkverbinPath использовать его в предварительной и последующей сборке для проекта C#, заранее спасибо.


person Karthikgr    schedule 10.11.2020    source источник


Ответы (1)


Я боюсь, что вы пока не можете получить то, что хотите, в проектах C#.

$(WindowsSdkverbinpath) и $(WindowsSdkDir) пока работают над C++ проектами, а не над C# проектами.

Поэтому вы не можете получить последнюю версию комплектов Win10 с помощью MSBuild для C# проектов.

Если вы хотите получить последнюю версию комплектов Win10 для C# проектов, вы должны использовать жестко заданный подход.

Поскольку открытие каждого проекта C#, а затем изменение пути к rc.exe и mt.exe может быть неудобным.

Поэтому я предлагаю вам использовать это:

Предложение

создайте файл с именем Directory.Build. props в папке вашего проекта

введите здесь описание изображения

Затем добавьте в этот файл следующий контент:

<Project>
<PropertyGroup>

 <PreBuildEvent>C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x86\rc.exe "$(ProjectDir)$(ProjectName).rc"</PreBuildEvent>
 <PostBuildEvent>"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\mt.exe" -manifest "$(ProjectDir)$(TargetName).exe.manifest" -outputresource:"$(TargetDir)$(TargetFileName)";#1</PostBuildEvent>

</PropertyGroup>
</Project>

И файл будет интегрирован в ваш проект в процессе сборки. И вам нужно только один раз изменить файл и изменить версию SDK, а затем сохранить этот файл. Скопируйте этот файл в каждую папку проекта C#.

Это может быть удобнее.

person Mr Qian    schedule 12.11.2020