Visual Studio 2022 игнорирует свойство BaseIntermediateOutputPath, указанное в файлах проекта.

У меня есть решение, содержащее большое количество проектов. Чтобы отделить бинарники от исходников, я изменил на "..\bin" и BaseIntermediateOutputPath свойство во всех проектах на "..\obj".

Это сработало для BaseOutputPath- все бинарники находятся в общем каталоге. Для промежуточного пути это вообще не сработало. Это сломало проекты, потому что каталог все еще создается в папках проекта, но теперь файлы не исключаются из проекта и отображаются как доступные для фиксации для Git.

Что я делаю неправильно? Это нормальное поведение? Я не хочу, чтобы каталоги obj создавались в каталогах проекта. Как я могу добиться такого поведения?

На данный момент я просто удалил свойство из проектов. По крайней мере obj папки не отображаются как папки проекта.

1 ответ

Вам необходимо использовать макросы MSBuild, такие как $(SolutionDir) или $(MSBuildThisFileDirectory) и подобные им, если вы не хотите, чтобы относительные пути начинались с файла вашего проекта.

Например, вы можете установить для «BaseIntermediateOutputPath» значение $(SolutionDir)\obj или, что еще лучше, значение $(SolutionDir)\obj-$(Configuration). Таким образом вы разделите сборки Debug и Release, что, если вы этого не сделаете, доставит вам много неприятностей.

Вот что я использую в конкретном «Directory.Build.props». Обратите внимание <OutDir>вход. Это изменит выходной каталог для всех проектов в этом каталоге на stage64\libкаталог.

        <PropertyGroup>
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
    <OutDir>$(SolutionDir)..\stage64\lib\</OutDir>
  </PropertyGroup>
Другие вопросы по тегам