Можно указать расположение выходных данных, генерируемых вашим проектом, для каждой конфигурации (для отладки, релиза или обоих). При использовании параметров по умолчанию выходные папки варьируются в зависимости от типа проекта и пакета SDK, при этом некоторые проекты используют вложенные папки, специфичные для платформы или фреймворка.
Visual Studio предоставляет свойства, позволяющие размещать промежуточные и конечные выходные данные в пользовательских папках, указывая пути относительно папки проекта или абсолютный путь в любом месте файловой системы. Помимо параметров, указанных в свойствах проекта Visual Studio, можно также настроить выходные данные, изменив файл проекта и используя возможности MSBuild и пакета SDK для .NET для полного контроля над всеми аспектами выходных данных проекта либо для отдельных проектов, либо на уровне решения для многих проектов.
В Visual Studio 2022 и более поздних версиях существуют различные пользовательские интерфейсы конструктора проектов в зависимости от типа проекта. Проекты .NET Framework используют устаревший конструктор проектов .NET, но проекты .NET Core (и .NET 5 и более поздних версий) используют текущий конструктор проектов .NET. Проекты C++ используют собственный пользовательский интерфейс страниц свойств. Действия, описанные в этом разделе, зависят от используемого конструктора проектов.
Изменение каталога выходных данных сборки
Эта процедура применяется к проектам в Visual Studio 2022 и более поздних версий, предназначенных для .NET Core или .NET 5 и более поздних версий.
Очистите проект или решение, чтобы удалить все существующие выходные файлы (сборка>Clean solution).
Щелкните правой кнопкой по узлу проекта в обозревателе решений и выберите Свойства.
Для проектов C# разверните раздел сборки и прокрутите вниз до подраздела Output. В Visual Basic разверните раздел Компилятор, затем посмотрите в разделе Общие.
Найдите базовый путь выводаи введите путь, по которому будут создаваться выходные данные (абсолютный или относительно корневого каталога проекта) или выберите Просмотр, чтобы перейти в эту папку. Обратите внимание, что имя конфигурации добавляется к базовому выходному пути для создания фактического выходного пути.
C#:
Visual Basic:
Заметка
Некоторые проекты (.NET и ASP.NET Core) по умолчанию включают версию платформы или идентификатор среды выполнения в конечный выходной путь. Чтобы изменить это, щелкните правой кнопкой мыши узел проекта в обозревателе решений, выберите изменить файл проектаи добавьте следующее:
<PropertyGroup>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
</PropertyGroup>
Сборка в общий выходной каталог
По умолчанию Visual Studio создает каждый проект в решении в своей папке внутри решения. Вы можете изменить пути вывода сборки для проектов, чтобы принудительно поместить все выходные данные в одну папку.
Очистите решение для удаления существующих выходных файлов (Сборка>Чистое решение).
Щелкните на одном из проектов в решении.
В меню проекта щелкните Свойства.
В каждом проекте, в зависимости от его типа, выберите Скомпилировать или Построитьи задайте путь вывода или базовый выходной путь в папку, используемую для всех проектов в решении.
Откройте файл проекта и добавьте следующее определение свойства в первую группу свойств.
<PropertyGroup>
<!-- existing property declarations are here -->
<UseCommonOutputDirectory>true</UseCommonOutputDirectory>
</PropertyGroup>
Установка UseCommonOutputDirectory на true сообщает Visual Studio и его базовому обработчику сборки (MSBuild), что вы помещаете несколько выходных данных проекта в одну папку, поэтому MSBuild пропускает шаг копирования, который обычно происходит, когда проекты зависят от других проектов.
Повторите шаги 2–5 для всех проектов в решении. Можно пропустить некоторые проекты, если у вас есть некоторые исключительные проекты, которые не должны использовать общий выходной каталог.
Совет
Если выходные данные не создаются в указанном расположении, убедитесь, что вы создаете соответствующую конфигурацию (например, отладка или выпуск), выбрав ее в строке меню Visual Studio.
Совет
Если выходные данные не создаются в указанном расположении, убедитесь, что вы создаете соответствующую конфигурацию (например, отладка или выпуск), выбрав ее в строке меню Visual Studio.
Эта процедура применяется к проектам .NET Framework.
Очистите проект или решение, чтобы удалить все существующие выходные файлы (сборка>Clean solution).
Щелкните правой кнопкой по узлу проекта в обозревателе решений и выберите Свойства.
Выберите соответствующую вкладку на основе типа проекта:
- Для C# выберите вкладку Сборка.
- Для Visual Basic выберите вкладку Компиляция.
В раскрывающемся списке конфигурации в верхней части выберите конфигурацию, расположение выходного файла которого необходимо изменить (отладка, выпускили все конфигурации).
Найдите запись выходного пути на странице— она отличается в зависимости от типа проекта:
-
Путь вывода для проектов C# и JavaScript
- Путь вывода сборки для проектов на Visual Basic
Введите путь к созданию выходных данных (абсолютный или относительно корневого каталога проекта) или выберите Обзор, чтобы перейти к этой папке.
Сборка в общий выходной каталог
По умолчанию Visual Studio создает каждый проект в решении в своей папке внутри решения. Вы можете изменить пути вывода сборки для проектов, чтобы принудительно поместить все выходные данные в одну папку.
Очистите решение для удаления существующих выходных файлов (Сборка>Чистое решение).
Щелкните на одном из проектов в решении.
В меню проекта щелкните Свойства.
В каждом проекте, в зависимости от его типа, выберите Скомпилировать или Построитьи задайте путь вывода или базовый выходной путь в папку, используемую для всех проектов в решении.
Откройте файл проекта и добавьте следующее определение свойства в первую группу свойств.
<PropertyGroup>
<!-- existing property declarations are here -->
<UseCommonOutputDirectory>true</UseCommonOutputDirectory>
</PropertyGroup>
Установка UseCommonOutputDirectory на true сообщает Visual Studio и его базовому обработчику сборки (MSBuild), что вы помещаете несколько выходных данных проекта в одну папку, поэтому MSBuild пропускает шаг копирования, который обычно происходит, когда проекты зависят от других проектов.
Повторите шаги 2–5 для всех проектов в решении. Можно пропустить некоторые проекты, если у вас есть некоторые исключительные проекты, которые не должны использовать общий выходной каталог.
Совет
Если выходные данные не создаются в указанном расположении, убедитесь, что вы создаете соответствующую конфигурацию (например, отладка или выпуск), выбрав ее в строке меню Visual Studio.
Совет
Если выходные данные не создаются в указанном расположении, убедитесь, что вы создаете соответствующую конфигурацию (например, отладка или выпуск), выбрав ее в строке меню Visual Studio.
Чтобы изменить выходной каталог сборки для одного проекта C++, выполните следующие действия.
Очистите проект, чтобы удалить все существующие выходные файлы (сборка>Clean solution).
Щелкните правой кнопкой по узлу проекта в обозревателе решений и выберите Свойства.
Выберите вкладку Общие.
В раскрывающемся списке конфигурации в верхней части выберите конфигурацию, расположение выходного файла которого необходимо изменить (отладка, выпускили все конфигурации).
Если вы просматриваете все конфигурации или все платформы, для некоторых свойств может отображаться <different options>. Значения свойств могут отличаться для каждой комбинации конфигурации и платформы. Хотя их можно задать по отдельности, параметры по умолчанию используют одно и то же выражение для всех сочетаний, но они используют макросы $(Configuration) и $(Platform) для создания уникального выходного пути для каждой комбинации.
Найдите путь вывода в каталоге . В раскрывающемся списке предоставляются параметры редактирования выражения, просмотра пути или (при необходимости) <наследование от родительского элемента или настроек проекта по умолчанию>.
Введите путь к созданию выходных данных (абсолютный или относительно корневого каталога проекта) или выберите Обзор, чтобы перейти к этой папке.
Для выражений, зависящих от значений макросов, нажмите на Макросы >>, чтобы просмотреть доступные макросы и их значения. В диалоговом окне также отображается окончательное развернутое значение свойства с текущими значениями макросов.
Все переменные среды предоставляются в MSBuild как свойства, поэтому если вам нужно ссылаться на переменную среды, можно ссылаться на нее с помощью синтаксиса $(VAR) для переменной среды VAR. При создании пути с помощью макросов и переменных среды следует тщательно учитывать, требуется ли обратная косая черта.
Эта процедура задает свойство OutDir в файле проекта (.vcxproj). Если вы просматриваете файл проекта после задания этого свойства, вы увидите, что код, аналогичный следующему, был добавлен:
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<OutDir>C:\MyOutputFolder</OutDir>
</PropertyGroup>
Дополнительные сведения см. в странице общих свойств, а чтобы быть уверенными, что вы знаете, как работать со страницами свойств C++, и понимать, как значения свойств могут зависеть от конфигураций и платформ, см. Работа со свойствами проекта.
Эта процедура применяется к проектам в Visual Studio 2022 и более поздних версий, предназначенных для .NET Core или .NET 5 и более поздних версий.
Очистите проект, чтобы удалить все существующие выходные файлы.
Откройте файл проекта.
Добавьте следующее объявление свойства в первую группу свойств.
<PropertyGroup>
<!-- existing property declarations are here -->
<IntermediateOutputPath>path</IntermediateOutputPath>
</PropertyGroup>
Путь относится к файлу проекта или можно использовать абсолютный путь. Если вы хотите поместить имя проекта в путь, вы можете ссылаться на него с помощью свойств MSBuild $(MSBuildProjectName), $(MSBuildProjectDirectory). Дополнительные свойства, которые вы можете использовать, см. в зарезервированных и известных свойствах MSBuild.
Visual Studio по-прежнему создает папку obj под папкой проекта при сборке, но она пуста. Его можно удалить как часть процесса сборки. Один из способов сделать это — добавить событие после сборки для выполнения следующей команды:
rd "$(ProjectDir)obj" /s /q
См. раздел Указание событий пользовательской сборки.
Эта процедура применяется к проектам .NET Framework.
Очистите проект, чтобы удалить все существующие выходные файлы.
Откройте файл проекта.
Добавьте следующее объявление свойства в первую группу свойств.
<PropertyGroup>
<!-- existing property declarations are here -->
<IntermediateOutputPath>path</IntermediateOutputPath>
</PropertyGroup>
Путь относится к файлу проекта или можно использовать абсолютный путь. Если вы хотите поместить имя проекта в путь, вы можете ссылаться на него с помощью свойств MSBuild $(MSBuildProjectName), $(MSBuildProjectDirectory). Дополнительные свойства, которые вы можете использовать, см. в зарезервированных и известных свойствах MSBuild.
Visual Studio по-прежнему создает папку obj под папкой проекта при сборке, но она пуста. Его можно удалить как часть процесса сборки. Один из способов сделать это — добавить событие после сборки для выполнения следующей команды:
rd "$(ProjectDir)obj" /s /q
См. раздел Указание событий пользовательской сборки.
Используйте свойство промежуточного каталога, чтобы задать каталог для промежуточных выходных данных, таких как файлы .obj.
В файле проекта указано свойство IntDir. Чтобы задать пути для промежуточных и конечных выходных данных в файле проекта, добавьте группу свойств, например следующую:
<PropertyGroup>
<OutDir>$(SolutionDir)out\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)int\$(MSBuildProjectName)\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
Использование Directory.Build.props для задания выходного каталога
Если у вас есть большое количество проектов, и вы хотите изменить выходную папку для всех них, это будет емким и подверженным ошибкам, чтобы изменить каждую из них с помощью методов, описанных ранее в этой статье. В таких случаях можно создать файл в папке решения, Directory.Build.props, чтобы задать соответствующие свойства MSBuild в одном месте, чтобы применить все проекты в решении. Поместив файл с указанным именем в родительскую папку всех проектов, которые вы хотите затронуть, вы можете легко поддерживать настройки в одном месте и упростить изменение значений. См. Настройка сборки по папкам.
Если у вас есть большое количество проектов, и вы хотите изменить выходную папку для всех них, это будет емким и подверженным ошибкам, чтобы изменить каждую из них с помощью методов, описанных ранее в этой статье. В таких случаях можно создать файл в папке решения, Directory.Build.props, чтобы задать соответствующие свойства MSBuild в одном месте, чтобы применить все проекты в решении. Поместив файл с указанным именем в родительскую папку всех проектов, которые вы хотите затронуть, вы можете легко поддерживать настройки в одном месте и упростить изменение значений. См. Настройка сборки по папкам.
Если у вас есть большое количество проектов, и вы хотите изменить выходную папку для всех них, это будет емким и подверженным ошибкам, чтобы изменить каждую из них с помощью методов, описанных ранее в этой статье. В таких случаях можно создать файл в папке решения, Directory.Build.props, чтобы задать соответствующие свойства MSBuild в одном месте, чтобы применить все проекты в решении. Поместив файл с указанным именем в родительскую папку всех проектов, которые вы хотите затронуть, вы можете легко поддерживать настройки в одном месте и упростить изменение значений. См. Настройка сборок C++.
Чтобы задать промежуточные и конечные пути вывода в Directory.build.props, лучше использовать $(MSBuildThisFileDirectory) вместо $(SolutionDir) для поддержки сборок проекта командной строки, где $(SolutionDir) не определен. Следующий код задает как способ работы для сборок Visual Studio, так и для сборок командной строки отдельных проектов:
<Project>
<PropertyGroup>
<SolutionDir Condition="'$(SolutionDir)' == ''">$(MSBuildThisFileDirectory)</SolutionDir>
<OutDir>$(SolutionDir)out\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)int\$(MSBuildProjectName)\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
</Project>
Использование артефактов для упорядочивания выходных данных сборки
Для проектов .NET 8 и более поздних версий можно использовать функциональность артефактов, чтобы упорядочить выходные данные в высоко настраиваемый и гибкий способ. См. макет выходных данных артефактов.
Связанное содержимое