Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Visual Studio host MSBuild voor het laden en bouwen van beheerde projecten. Omdat MSBuild verantwoordelijk is voor het project, kan bijna elk project in de MSBuild-indeling worden gebruikt in Visual Studio, zelfs als het project is gemaakt door een ander hulpprogramma en een aangepast buildproces heeft.
In dit artikel worden specifieke aspecten van MSBuild-hosting van Visual Studio beschreven die moeten worden overwogen bij het aanpassen van projecten en .targets-bestanden die u wilt laden en bouwen in Visual Studio. Deze helpen u ervoor te zorgen dat Visual Studio-functies zoals IntelliSense en foutopsporing werken voor uw aangepaste project.
Zie Project-bestanden voor meer informatie over C++-projecten.
Bestandsnaamextensies van Project
MSBuild.exe herkent elke bestandsnaamextensie van het project die overeenkomt met het patroon .*proj. Visual Studio herkent echter alleen een subset van deze bestandsnaamextensies van het project, waarmee het taalspecifieke projectsysteem wordt bepaald dat het project wordt geladen. Visual Studio heeft geen taalneutraal MSBuild-projectsysteem.
Het C#-projectsysteem laadt bijvoorbeeld .csproj-bestanden , maar Visual Studio kan geen .xxproj-bestand laden. Een projectbestand voor bronbestanden in een willekeurige taal moet dezelfde extensie gebruiken als Visual Basic- of C#-projectbestanden die moeten worden geladen in Visual Studio.
De extensie *.msbuildproj wordt ook ondersteund.
Bekende doelnamen
Als u op de opdracht Build in Visual Studio klikt, wordt het standaarddoel in het project uitgevoerd. Vaak heeft dit doel ook de naam Build. Als u de opdracht Opnieuw opbouwen of opschonen kiest, wordt geprobeerd een doel van dezelfde naam in het project uit te voeren. Als u op Publiceren klikt, wordt een doel met de naam PublishOnly in het project uitgevoerd.
Configuraties en platforms
Configuraties worden weergegeven in MSBuild-projecten op eigenschappen gegroepeerd in een PropertyGroup element dat een Condition kenmerk bevat. Visual Studio bekijkt deze voorwaarden om een lijst met projectconfiguraties en platforms te maken die moeten worden weergegeven. Als u deze lijst wilt extraheren, moeten de voorwaarden een indeling hebben die vergelijkbaar is met de volgende:
Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "
Condition=" '$(Configuration)' == 'Release' "
Condition=" '$(Something)|$(Configuration)|$(SomethingElse)' == 'xxx|Debug|yyy' "
Visual Studio bekijkt voor dit doel de voorwaarden voor PropertyGroup, ItemGroupeigenschappen Importen itemelementen.
Aanvullende build-acties
Met Visual Studio kunt u de naam van het itemtype van een bestand in een project wijzigen met de eigenschap Build Action van het venster Bestandseigenschappen .
De namen van het itemtype Compile, EmbeddedResource, Content en None worden altijd vermeld in dit menu, samen met eventuele andere itemtypenamen die al in uw project aanwezig zijn. Om ervoor te zorgen dat namen van aangepaste itemtypen altijd beschikbaar zijn in dit menu, kunt u de namen toevoegen aan een itemtype met de naam AvailableItemName. Als u bijvoorbeeld het volgende toevoegt aan uw projectbestand, wordt het aangepaste type JScript toegevoegd aan dit menu voor alle projecten die het importeren:
<ItemGroup>
<AvailableItemName Include="JScript"/>
</ItemGroup>
Als u itemtypenamen toevoegt aan het AvailableItemName itemtype, worden items van dat type weergegeven in Solution Explorer.
Opmerking
Sommige itemtypenamen zijn speciaal voor Visual Studio, maar worden niet vermeld in deze vervolgkeuzelijst.
In-procescompilers
Indien mogelijk probeert Visual Studio de in-procesversie van de Visual Basic-compiler te gebruiken voor betere prestaties. (Niet van toepassing op C#.) Om dit goed te laten werken, moet aan de volgende voorwaarden worden voldaan:
Er moet binnen een doel van het project een taak zijn met de naam
Vbcvoor Visual Basic-projecten.De
UseHostCompilerIfAvailableparameter van de taak moet worden ingesteld op waar.
Ontwerptijd IntelliSense
Voor het verkrijgen van IntelliSense-ondersteuning in Visual Studio voordat een build een uitvoerassembly heeft gegenereerd, moet aan de volgende voorwaarden worden voldaan:
Er moet een doel met de naam
Compilezijn.CompileHet doel of een van de afhankelijkheden moet de compilertaak voor het project aanroepen, zoalsCscofVbc.CompileHet doel of een van de afhankelijkheden moet ervoor zorgen dat de compiler alle benodigde parameters voor IntelliSense ontvangt, met name alle verwijzingen.Aan de voorwaarden in de sectie In-process compilers moet worden voldaan.
Oplossingen bouwen
In Visual Studio worden het oplossingsbestand en de volgorde van projectbuilds beheerd door Visual Studio zelf. Bij het bouwen van een oplossing met msbuild.exe op de opdrachtregel parseert MSBuild het oplossingsbestand en ordeert de projectbuilds. In beide gevallen worden de projecten afzonderlijk in afhankelijkheidsvolgorde gebouwd en worden project-naar-projectverwijzingen niet doorkruist. In tegenstelling, wanneer individuele projecten worden gebouwd met msbuild.exe, worden project-naar-project verwijzingen doorkruist.
Wanneer u in Visual Studio bouwt, wordt de eigenschap $(BuildingInsideVisualStudio) ingesteld op true. Dit kan worden gebruikt in uw project- of .targets-bestanden om ervoor te zorgen dat de build zich anders gedraagt.
Eigenschappen en items weergeven
Visual Studio herkent bepaalde eigenschapsnamen en -waarden. De volgende eigenschap in een project zorgt er bijvoorbeeld voor dat Windows Application wordt weergegeven in het vak Toepassingstype in Projectontwerper.
<OutputType>WinExe</OutputType>
De eigenschapswaarde kan worden bewerkt in Projectontwerper en opgeslagen in het projectbestand. Als een dergelijke eigenschap een ongeldige waarde krijgt door handmatig te bewerken, wordt in Visual Studio een waarschuwing weergegeven wanneer het project wordt geladen en wordt de ongeldige waarde vervangen door een standaardwaarde.
Visual Studio begrijpt de standaardinstellingen voor sommige eigenschappen. Deze eigenschappen worden niet bewaard in het projectbestand, tenzij ze niet-standaardwaarden hebben.
Eigenschappen met willekeurige namen worden niet weergegeven in Visual Studio. Als u willekeurige eigenschappen in Visual Studio wilt wijzigen, moet u het projectbestand openen in de XML-editor en ze handmatig bewerken. Zie de sectie Projectbestanden bewerken in Visual Studio verderop in dit onderwerp voor meer informatie.
Items die zijn gedefinieerd in het project met willekeurige itemtypenamen, worden standaard weergegeven in Solution Explorer onder hun projectknooppunt. Als u een item wilt verbergen voor weergave, stelt u de Visible metagegevens in op false. Het volgende item neemt bijvoorbeeld deel aan het buildproces, maar wordt niet weergegeven in Solution Explorer.
<ItemGroup>
<IntermediateFile Include="cache.temp">
<Visible>false</Visible>
</IntermediateFile>
</ItemGroup>
Opmerking
De Visible metagegevens worden genegeerd door Solution Explorer voor C++-projecten. Items worden altijd weergegeven, zelfs als Visible op false staat.
Items die zijn gedeclareerd in bestanden die in het project worden geïmporteerd, worden niet standaard weergegeven. Items die tijdens het buildproces zijn gemaakt, worden nooit weergegeven in Solution Explorer.
Voorwaarden voor items en eigenschappen
Tijdens een bouw worden alle voorwaarden volledig gerespecteerd.
Bij het bepalen van de weer te geven eigenschapswaarden worden eigenschappen die in Visual Studio afhankelijk zijn van de configuratie anders geëvalueerd dan eigenschappen die onafhankelijk zijn van de configuratie. Voor eigenschappen die afhankelijk zijn van de configuratie, stelt Visual Studio de Configuration en eigenschappen op de juiste wijze in Platform en geeft MSBuild opdracht om het project opnieuw te evalueren. Voor eigenschappen die onafhankelijk van de configuratie worden beschouwd, is het onbepaald hoe voorwaarden worden geëvalueerd.
Voorwaardelijke expressies voor items worden altijd genegeerd om te bepalen of het item moet worden weergegeven in Solution Explorer.
Fouten opsporen
Om de uitvoerassembly te vinden en te starten en het foutopsporingsprogramma te koppelen, heeft Visual Studio de eigenschappen OutputPath, AssemblyName en OutputType juist gedefinieerd nodig. Het foutopsporingsprogramma kan niet worden gekoppeld als het buildproces niet heeft veroorzaakt dat de compiler een .pdb-bestand genereert.
Uitvoering van ontwerptijddoel
Visual Studio probeert doelen met bepaalde namen uit te voeren wanneer een project wordt geladen. Deze doelen omvattenCompile, , ResolveAssemblyReferences, ResolveCOMReferencesen GetFrameworkPathsCopyRunEnvironmentFiles. Visual Studio voert deze doelen uit, zodat de compiler kan worden geïnitialiseerd om IntelliSense te bieden, het foutopsporingsprogramma kan worden geïnitialiseerd en verwijzingen die worden weergegeven in Solution Explorer kunnen worden omgezet. Als deze doelen niet aanwezig zijn, wordt het project geladen en correct gebouwd, maar is de ontwerpervaring in Visual Studio niet volledig functioneel.
Projectbestanden bewerken in Visual Studio
Als u een MSBuild-project rechtstreeks wilt bewerken, kunt u het projectbestand openen in de XML-editor van Visual Studio.
Een projectbestand verwijderen en bewerken in Visual Studio
Klik in Solution Explorer met de rechtermuisknop op het projectknooppunt en kies Project verwijderen.
Het project is gemarkeerd (niet beschikbaar).
Klik in Solution Explorer met de rechtermuisknop op het niet-beschikbare projectknooppunt en kies Projectbestand< bewerken>.
Het projectbestand wordt geopend in de Xml-editor van Visual Studio.
Bewerk, sla het op en sluit het projectbestand.
Klik in Solution Explorer met de rechtermuisknop op het niet-beschikbare projectknooppunt en kies Vervolgens Project opnieuw laden.
IntelliSense en validatie
Wanneer u de XML-editor gebruikt om projectbestanden te bewerken, wordt IntelliSense en validatie aangestuurd door de MSBuild-schemabestanden. Deze worden geïnstalleerd in de schemacache, die u kunt vinden in <de installatiemap> van Visual Studio\Xml\Schemas\1033\MSBuild.
De kern-MSBuild-typen worden gedefinieerd in Microsoft.Build.Core.xsd en algemene typen die worden gebruikt door Visual Studio, worden gedefinieerd in Microsoft.Build.CommonTypes.xsd. Als u de schema's wilt aanpassen zodat u IntelliSense en validatie voor aangepaste itemtypenamen, eigenschappen en taken hebt, kunt u Microsoft.Build.xsd bewerken of uw eigen schema maken dat de CommonTypes of Core-schema's bevat. Als u uw eigen schema maakt, moet u de XML-editor doorsturen om het te vinden met behulp van het venster Eigenschappen .
Geladen projectbestanden bewerken
Visual Studio slaat de inhoud van projectbestanden en bestanden op die zijn geïmporteerd door projectbestanden. Als u een geladen projectbestand bewerkt, wordt u in Visual Studio automatisch gevraagd het project opnieuw te laden, zodat de wijzigingen van kracht worden. Als u echter een bestand bewerkt dat is geïmporteerd door een geladen project, wordt er geen prompt voor opnieuw laden weergegeven en moet u het project handmatig verwijderen en opnieuw laden om de wijzigingen door te voeren.
Uitvoergroepen
Verschillende doelen die zijn gedefinieerd in Microsoft.Common.targets hebben namen die eindigen op OutputGroups of OutputGroupDependencies. Visual Studio roept deze doelen aan om specifieke lijsten met projectuitvoer op te halen. Bijvoorbeeld, de SatelliteDllsProjectOutputGroup-doelstelt een lijst op van alle satellietassembly's die een build zal maken. Deze uitvoergroepen worden gebruikt door functies zoals publiceren, implementeren en project-naar-projectverwijzingen. Projecten die deze niet definiëren, worden geladen en gebouwd in Visual Studio, maar sommige functies werken mogelijk niet correct.
Resolutie van referenties
Referentieoplossing is het proces van het gebruik van de referentie-items die zijn opgeslagen in een projectbestand om daadwerkelijke assembly's te vinden. Visual Studio moet verwijzingsresolutie activeren om gedetailleerde eigenschappen weer te geven voor elke verwijzing in het venster Eigenschappen . In de volgende lijst worden de drie typen verwijzingen beschreven en hoe deze worden opgelost.
Assemblyverwijzingen:
Het projectsysteem roept een doel aan met de bekende naam
ResolveAssemblyReferences. Dit doel moet items produceren met de naamReferencePathvan het itemtype. Elk van deze items moet een itemspecificatie hebben (de waarde van hetIncludekenmerk van een item) die het volledige pad naar de verwijzing bevat. De items moeten alle metagegevens van de invoeritems bevatten die worden doorgegeven, naast de volgende nieuwe metagegevens:CopyLocal, aangeeft of de assembly moet worden gekopieerd naar de uitvoermap, ingesteld op true of false.OriginalItemSpec, met de oorspronkelijke itemspecificatie van de verwijzing.ResolvedFrom, ingesteld op "{TargetFrameworkDirectory}" als het is opgelost vanuit de .NET Framework-map.
COM-verwijzingen:
Het projectsysteem roept een doel aan met de bekende naam
ResolveCOMReferences. Dit doel moet items produceren met de naamComReferenceWrappersvan het itemtype. Elk van deze items moet een itemspecificatie hebben met het volledige pad naar de interop-assembly voor de COM-verwijzing. De items moeten alle metagegevens van de invoeritems bevatten die worden doorgegeven, naast nieuwe metagegevens met de naamCopyLocal, waarmee wordt aangegeven of de assembly moet worden gekopieerd naar de uitvoermap, ingesteld op waar of onwaar.Inheemse verwijzingen
Het projectsysteem roept een doel aan met de bekende naam
ResolveNativeReferences. Dit doel moet items produceren met de naamNativeReferenceFilevan het itemtype. De items moeten alle metagegevens bevatten van de invoeritems die worden doorgegeven, naast een nieuw stukje metagegevens met de naamOriginalItemSpec, met de oorspronkelijke itemspecificatie van de verwijzing.
Sneltoetsen voor prestaties
Als u visual Studio IDE gebruikt om foutopsporing te starten (door de F5-sleutel te kiezen of door Foutopsporing> starten op de menubalk te kiezen) of om uw project te bouwen (bijvoorbeeldBuild Build>Solution), gebruikt het buildproces een snelle updatecontrole om de prestaties te verbeteren. In sommige gevallen waarin aangepaste builds bestanden maken die op hun beurt worden ingebouwd, identificeert de snelle updatecontrole de gewijzigde bestanden niet correct. Projecten die uitgebreidere updatecontroles nodig hebben, kunnen de snelle controle uitschakelen door de omgevingsvariabele DISABLEFASTUPTODATECHECK=1in te stellen. Projecten kunnen dit ook instellen als een MSBuild-eigenschap in het project of in een bestand dat het project importeert.