U kunt de locatie opgeven van de uitvoer die door uw project wordt gegenereerd per configuratie (voor foutopsporing, release of beide). Met standaardinstellingen variëren uitvoermappen per projecttype en SDK, met sommige projecten die platformspecifieke of frameworkspecifieke submappen gebruiken.
Visual Studio biedt eigenschappen waarmee u tussenliggende en uiteindelijke uitvoer in aangepaste mappen kunt plaatsen door de paden op te geven ten opzichte van de projectmap of een absoluut pad ergens in het bestandssysteem. Naast de instellingen die u opgeeft in de eigenschappen van het Visual Studio-project, kunt u ook de uitvoer verder aanpassen door het projectbestand te bewerken en de mogelijkheden van MSBuild en de .NET SDK te gebruiken voor volledige controle over alle aspecten van projectuitvoer, voor afzonderlijke projecten of op oplossingsniveau voor veel projecten.
In Visual Studio 2022 en hoger zijn er verschillende gebruikersinterfaces voor Project Designer, afhankelijk van uw projecttype. .NET Framework-projecten maken gebruik van de verouderde .NET Project Designer, maar .NET Core-projecten (en .NET 5 en hoger) maken gebruik van de huidige .NET Project Designer. C++ projecten gebruiken hun eigen gebruikersinterface voor eigenschappenpagina's. De stappen in deze sectie zijn afhankelijk van de projectontwerper die u gebruikt.
De build-uitvoermap wijzigen
Deze procedure is van toepassing op projecten in Visual Studio 2022 en hoger die gericht zijn op .NET Core of .NET 5 en hoger.
Schoon het project of de oplossing op om bestaande uitvoerbestanden te verwijderen (Build>Clean solution).
Klik met de rechtermuisknop op het projectknooppunt in Solution Explorer- en selecteer Eigenschappen.
Vouw voor C#-projecten de sectie Build uit en schuif omlaag naar de subsectie Output. Vouw voor Visual Basic de sectie Compile uit en kijk onder General.
Zoek het basisuitvoerpaden typ het pad waarnaar uitvoer moet worden gegenereerd (absoluut of relatief ten opzichte van de hoofdmap van het project) of kies Bladeren om naar die map te bladeren. Houd er rekening mee dat de configuratienaam wordt toegevoegd aan het basisuitvoerpad om het werkelijke uitvoerpad te genereren.
C#:
Visual Basic:
Notitie
Sommige projecten (.NET en ASP.NET Core) bevatten standaard de frameworkversie of runtime-id in het uiteindelijke uitvoerpad. Als u dit wilt wijzigen, klikt u met de rechtermuisknop op het projectknooppunt in Solution Explorer-, selecteert u Projectbestand bewerkenen voegt u het volgende toe:
<PropertyGroup>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
</PropertyGroup>
Bouwen naar een algemene uitvoermap
Visual Studio bouwt standaard elk project in een oplossing in een eigen map in de oplossing. U kunt de build-uitvoerpaden van uw projecten wijzigen om ervoor te zorgen dat alle uitvoer in dezelfde map wordt geplaatst.
Schoon de oplossing op om bestaande uitvoerbestanden te verwijderen (Build>Clean solution).
Klik op één project in de oplossing.
Klik in het menu Project op Eigenschappen.
Kies in elk project, afhankelijk van het type, Compileer of Bouwenen stel uitvoerpad of basisuitvoerpad in op een map voor gebruik door alle projecten in de oplossing.
Open het projectbestand voor het project en voeg de volgende eigenschapsdeclaratie toe aan de eerste eigenschapsgroep.
<PropertyGroup>
<!-- existing property declarations are here -->
<UseCommonOutputDirectory>true</UseCommonOutputDirectory>
</PropertyGroup>
Als u UseCommonOutputDirectory instelt op true vertelt Visual Studio en de onderliggende build-engine (MSBuild) dat u meerdere projectuitvoer in dezelfde map plaatst. MsBuild laat dus de kopieerstap weg die normaal gesproken plaatsvindt wanneer projecten afhankelijk zijn van andere projecten.
Herhaal stap 2-5 voor alle projecten in de oplossing. U kunt sommige projecten overslaan als u een aantal uitzonderlijke projecten hebt die de algemene uitvoermap niet mogen gebruiken.
Fooi / Tip
Als de uitvoer niet wordt gegenereerd op de locatie die u hebt opgegeven, moet u ervoor zorgen dat u de bijbehorende configuratie bouwt (bijvoorbeeld Foutopsporing of Release) door deze te selecteren op de menubalk van Visual Studio.
Fooi / Tip
Als de uitvoer niet wordt gegenereerd op de locatie die u hebt opgegeven, moet u ervoor zorgen dat u de bijbehorende configuratie bouwt (bijvoorbeeld Foutopsporing of Release) door deze te selecteren op de menubalk van Visual Studio.
Deze procedure is van toepassing op .NET Framework-projecten.
Schoon het project of de oplossing op om bestaande uitvoerbestanden te verwijderen (Build>Clean solution).
Klik met de rechtermuisknop op het projectknooppunt in Solution Explorer- en selecteer Eigenschappen.
Selecteer het juiste tabblad op basis van uw projecttype:
- Selecteer voor C# het tabblad Build.
- Selecteer voor Visual Basic het tabblad Compileren.
Kies in de vervolgkeuzelijst configuratie bovenaan de configuratie waarvan u de locatie van het uitvoerbestand wilt wijzigen (Foutopsporing, Releaseof Alle configuraties).
Zoek de vermelding van het uitvoerpad op de pagina. Dit verschilt afhankelijk van uw projecttype:
-
uitvoerpad voor C#- en JavaScript-projecten
-
Uitvoerpad maken voor Visual Basic-projecten
Typ het pad in voor het genereren van de uitvoer (absoluut of relatief ten opzichte van de rootmap van het project) of kies Bladeren om naar die map te bladeren.
Bouwen naar een algemene uitvoermap
Visual Studio bouwt standaard elk project in een oplossing in een eigen map in de oplossing. U kunt de build-uitvoerpaden van uw projecten wijzigen om ervoor te zorgen dat alle uitvoer in dezelfde map wordt geplaatst.
Schoon de oplossing op om bestaande uitvoerbestanden te verwijderen (Build>Clean solution).
Klik op één project in de oplossing.
Klik in het menu Project op Eigenschappen.
Kies in elk project, afhankelijk van het type, Compileer of Bouwenen stel uitvoerpad of basisuitvoerpad in op een map voor gebruik door alle projecten in de oplossing.
Open het projectbestand voor het project en voeg de volgende eigenschapsdeclaratie toe aan de eerste eigenschapsgroep.
<PropertyGroup>
<!-- existing property declarations are here -->
<UseCommonOutputDirectory>true</UseCommonOutputDirectory>
</PropertyGroup>
Als u UseCommonOutputDirectory instelt op true vertelt Visual Studio en de onderliggende build-engine (MSBuild) dat u meerdere projectuitvoer in dezelfde map plaatst. MsBuild laat dus de kopieerstap weg die normaal gesproken plaatsvindt wanneer projecten afhankelijk zijn van andere projecten.
Herhaal stap 2-5 voor alle projecten in de oplossing. U kunt sommige projecten overslaan als u een aantal uitzonderlijke projecten hebt die de algemene uitvoermap niet mogen gebruiken.
Fooi / Tip
Als de uitvoer niet wordt gegenereerd op de locatie die u hebt opgegeven, moet u ervoor zorgen dat u de bijbehorende configuratie bouwt (bijvoorbeeld Foutopsporing of Release) door deze te selecteren op de menubalk van Visual Studio.
Fooi / Tip
Als de uitvoer niet wordt gegenereerd op de locatie die u hebt opgegeven, moet u ervoor zorgen dat u de bijbehorende configuratie bouwt (bijvoorbeeld Foutopsporing of Release) door deze te selecteren op de menubalk van Visual Studio.
De builduitvoermap voor één C++-project wijzigen:
Schoon het project op om bestaande uitvoerbestanden te verwijderen (Build>Clean solution).
Klik met de rechtermuisknop op het projectknooppunt in Solution Explorer- en selecteer Eigenschappen.
Selecteer het tabblad Algemeen.
Kies in de vervolgkeuzelijst configuratie bovenaan de configuratie waarvan u de locatie van het uitvoerbestand wilt wijzigen (Foutopsporing, Releaseof Alle configuraties).
Als u alle configuraties of alle platformsbekijkt, ziet u mogelijk <different options> bij sommige eigenschappen. Eigenschapswaarden kunnen verschillen voor elke combinatie van configuratie en platform. Hoewel u ze afzonderlijk kunt instellen, gebruiken de standaardinstellingen dezelfde expressie voor alle combinaties, maar ze gebruiken de macro's $(Configuration) en $(Platform) om voor elke combinatie een uniek uitvoerpad te produceren.
Zoek het uitvoerpad in uitvoermap. De vervolgkeuzelijst bevat opties voor het bewerken van de expressie, het bladeren naar een pad, of, indien van toepassing, <overnemen van een bovenliggende of de projectstandaard>.
Typ het pad in voor het genereren van de uitvoer (absoluut of relatief ten opzichte van de rootmap van het project) of kies Bladeren om naar die map te bladeren.
Voor expressies die afhankelijk zijn van macrowaarden, klikt u op Macro's >> om de beschikbare macro's en de bijbehorende waarden weer te geven. In het dialoogvenster ziet u ook de uiteindelijke uitgevouwen waarde van de eigenschap met de huidige macrowaarden.
Alle omgevingsvariabelen worden weergegeven in MSBuild als eigenschappen. Als u dus naar een omgevingsvariabele wilt verwijzen, kunt u ernaar verwijzen met behulp van de syntaxis $(VAR) voor de omgevingsvariabele VAR. Wanneer u een pad bouwt met behulp van macro's en omgevingsvariabelen, moet u overwegen of een backslash wel of niet nodig is.
Met deze procedure wordt een eigenschap ingesteld OutDir in het projectbestand (.vcxproj). Als u het projectbestand bekijkt nadat u deze eigenschap hebt ingesteld, ziet u dat de code vergelijkbaar is met het volgende toegevoegd:
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<OutDir>C:\MyOutputFolder</OutDir>
</PropertyGroup>
Zie pagina algemene eigenschappen voor meer informatie en om er zeker van te zijn dat u bekend bent met het werken met C++-eigenschappenpagina's om te begrijpen hoe eigenschapswaarden afhankelijk kunnen zijn van configuraties en platforms. Zie Werken met projecteigenschappen.
Deze procedure is van toepassing op projecten in Visual Studio 2022 en hoger die gericht zijn op .NET Core of .NET 5 en hoger.
Schoon het project op om bestaande uitvoerbestanden te verwijderen.
Open het projectbestand.
Voeg de volgende eigenschapsdeclaratie toe aan de eerste eigenschapsgroep.
<PropertyGroup>
<!-- existing property declarations are here -->
<IntermediateOutputPath>path</IntermediateOutputPath>
</PropertyGroup>
Het pad is relatief ten opzichte van het projectbestand of u kunt een absoluut pad gebruiken. Als u de projectnaam in het pad wilt plaatsen, kunt u ernaar verwijzen met behulp van de MSBuild-eigenschappen $(MSBuildProjectName), $(MSBuildProjectDirectory). Voor meer eigenschappen die u kunt gebruiken, zie gereserveerde en bekende eigenschappen van MSBuild.
Visual Studio maakt nog steeds de obj-map onder de projectmap wanneer u bouwt, maar deze is leeg. U kunt het verwijderen als onderdeel van het buildproces. Een manier om dit te doen, is door een gebeurtenis na de build toe te voegen om de volgende opdracht uit te voeren:
rd "$(ProjectDir)obj" /s /q
Zie Aangepaste bouwactiviteiten opgeven.
Deze procedure is van toepassing op .NET Framework-projecten.
Schoon het project op om bestaande uitvoerbestanden te verwijderen.
Open het projectbestand.
Voeg de volgende eigenschapsdeclaratie toe aan de eerste eigenschapsgroep.
<PropertyGroup>
<!-- existing property declarations are here -->
<IntermediateOutputPath>path</IntermediateOutputPath>
</PropertyGroup>
Het pad is relatief ten opzichte van het projectbestand of u kunt een absoluut pad gebruiken. Als u de projectnaam in het pad wilt plaatsen, kunt u ernaar verwijzen met behulp van de MSBuild-eigenschappen $(MSBuildProjectName), $(MSBuildProjectDirectory). Voor meer eigenschappen die u kunt gebruiken, zie gereserveerde en bekende eigenschappen van MSBuild.
Visual Studio maakt nog steeds de obj-map onder de projectmap wanneer u bouwt, maar deze is leeg. U kunt het verwijderen als onderdeel van het buildproces. Een manier om dit te doen, is door een gebeurtenis na de build toe te voegen om de volgende opdracht uit te voeren:
rd "$(ProjectDir)obj" /s /q
Zie Aangepaste bouwactiviteiten opgeven.
Gebruik de eigenschap Tussenliggende map om de map in te stellen voor tussenliggende uitvoer, zoals .obj bestanden.
In het projectbestand is de eigenschap IntDir. Als u de paden wilt instellen voor tussenliggende en uiteindelijke uitvoer in het projectbestand, voegt u een eigenschapsgroep als volgt toe:
<PropertyGroup>
<OutDir>$(SolutionDir)out\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)int\$(MSBuildProjectName)\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
Directory.Build.props gebruiken om de uitvoermap in te stellen
Als u een groot aantal projecten hebt en u de uitvoermap voor deze projecten wilt wijzigen, is het tijdrovend en foutgevoelig om elk project te wijzigen met behulp van de methoden die eerder in dit artikel zijn beschreven. In dergelijke gevallen kunt u een bestand maken in de oplossingsmap, Directory.Build.props, om de juiste MSBuild-eigenschappen op één plaats in te stellen, zodat deze van toepassing is op alle projecten in de oplossing. Door een bestand met deze specifieke naam in de bovenliggende map te plaatsen van alle projecten die u wilt wijzigen, kunt u eenvoudig aanpassingen op één plaats onderhouden en de waarden eenvoudig wijzigen. Zie De build op map aanpassen.
Als u een groot aantal projecten hebt en u de uitvoermap voor deze projecten wilt wijzigen, is het tijdrovend en foutgevoelig om elk project te wijzigen met behulp van de methoden die eerder in dit artikel zijn beschreven. In dergelijke gevallen kunt u een bestand maken in de oplossingsmap, Directory.Build.props, om de juiste MSBuild-eigenschappen op één plaats in te stellen, zodat deze van toepassing is op alle projecten in de oplossing. Door een bestand met deze specifieke naam in de bovenliggende map te plaatsen van alle projecten die u wilt wijzigen, kunt u eenvoudig aanpassingen op één plaats onderhouden en de waarden eenvoudig wijzigen. Zie De build op map aanpassen.
Als u een groot aantal projecten hebt en u de uitvoermap voor deze projecten wilt wijzigen, is het tijdrovend en foutgevoelig om elk project te wijzigen met behulp van de methoden die eerder in dit artikel zijn beschreven. In dergelijke gevallen kunt u een bestand maken in de oplossingsmap, Directory.Build.props, om de juiste MSBuild-eigenschappen op één plaats in te stellen, zodat deze van toepassing is op alle projecten in de oplossing. Door een bestand met deze specifieke naam in de bovenliggende map te plaatsen van alle projecten die u wilt wijzigen, kunt u eenvoudig aanpassingen op één plaats onderhouden en de waarden eenvoudig wijzigen. Zie C++-builds aanpassen.
Als u zowel de tussenliggende als de uiteindelijke uitvoerpaden wilt instellen in Directory.build.props, kunt u het beste $(MSBuildThisFileDirectory) gebruiken in plaats van $(SolutionDir) om opdrachtregelprojectbuilds te ondersteunen, waarbij $(SolutionDir) niet is gedefinieerd. De volgende code stelt beide in op een manier die werkt voor Visual Studio-builds en opdrachtregel-builds van afzonderlijke projecten:
<Project>
<PropertyGroup>
<SolutionDir Condition="'$(SolutionDir)' == ''">$(MSBuildThisFileDirectory)</SolutionDir>
<OutDir>$(SolutionDir)out\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)int\$(MSBuildProjectName)\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
</Project>
Artefacten gebruiken om build-uitvoer te organiseren
Voor .NET 8- en latere projecten kunt u de functionaliteit voor artefacten gebruiken om uitvoer op een zeer aanpasbare en flexibele manier te rangschikken. Zie Indeling van de uitvoer van artefacten.
Verwante inhoud