Dela via


MSBuild Toolset (ToolsVersion)

En MSBuild-verktygsuppsättning innehåller en microsoft.common.tasks-fil , en microsoft.common.targets-fil och kompilatorer som csc.exe och vbc.exe. De flesta verktygsuppsättningar kan användas för att kompilera program till mer än en version av .NET Framework och mer än en systemplattform. MsBuild 2.0-verktygsuppsättningen kan dock endast användas för att rikta in sig på .NET Framework 2.0.

ATTRIBUTEt MSBuild ToolsVersion i projektelementet i Visual Studio och MSBuild-projektfilerna anses vara föråldrat i Visual Studio 2019 och senare. Du kan ta bort det på ett säkert sätt. Den här artikeln beskriver dess användning i äldre versioner av MSBuild eller för anpassade verktygsuppsättningar. Se Standard- och anpassade verktygsuppsättningskonfigurationer.

ToolsVersion-attribut

Ange verktygsuppsättningen ToolsVersion i attributet för project-elementet i projektfilen. I följande exempel anges att projektet ska skapas med hjälp av MSBuild-verktygsuppsättningen "Aktuell".

<Project ToolsVersion="Current" ... </Project>

Anmärkning

Vissa projekttyper använder attributet sdk i stället för ToolsVersion. Mer information finns i Tillägg till csproj-formatet för .NET Core.

Så här fungerar attributet ToolsVersion

När du skapar ett projekt i Visual Studio eller uppgraderar ett befintligt projekt inkluderas ett attribut med namnet ToolsVersion automatiskt i projektfilen och dess värde motsvarar den version av MSBuild som ingår i Visual Studio-utgåvan. Mer information finns i Framework-målöversikten.

När ett ToolsVersion värde definieras i en projektfil använder MSBuild det värdet för att fastställa värdena för de verktygsuppsättningsegenskaper som är tillgängliga för projektet. En verktygsuppsättningsegenskap är $(MSBuildToolsPath), som anger sökvägen till .NET Framework-verktygen. Endast den verktygsuppsättningsegenskapen (eller $(MSBuildBinPath)), krävs.

Från och med Visual Studio 2013 är MSBuild Toolset-versionen samma som Visual Studio-versionsnumret. MSBuild använder som standard den här verktygsuppsättningen i Visual Studio och på kommandoraden, oavsett vilken verktygsuppsättningsversion som anges i projektfilen. Det här beteendet kan åsidosättas med hjälp av flaggan -ToolsVersion. Mer information finns i ÅsidosättningsverktygVersionsinställningar.

I följande exempel hittar MSBuild filen Microsoft.CSharp.targets med hjälp av den MSBuildToolsPath reserverade egenskapen.

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

Du kan ändra värdet MSBuildToolsPath för genom att definiera en anpassad verktygsuppsättning. Mer information finns i Standard- och anpassade verktygsuppsättningskonfigurationer.

När du skapar en lösning på kommandoraden och anger en ToolsVersion för msbuild.exeskapas alla projekt och deras projekt-till-projekt-beroenden enligt den ToolsVersion, även om varje projekt i lösningen anger sina egna ToolsVersion. Information om hur ToolsVersion du definierar värdet per projekt finns i Åsidosätta ToolsVersion-inställningar.

Attributet ToolsVersion används också för projektmigrering. Om du till exempel öppnar ett Visual Studio 2008-projekt i Visual Studio 2010 uppdateras projektfilen så att den innehåller ToolsVersion="4.0". Om du sedan försöker öppna projektet i Visual Studio 2008 känner det inte igen det uppgraderade ToolsVersion projektet och skapar därför projektet som om attributet fortfarande var inställt på 3,5.

Visual Studio 2010 och Visual Studio 2012 använder en ToolsVersion av 4.0. Visual Studio 2013 använder en ToolsVersion på 12.0. Visual Studio 2015 använder ToolsVersion 14.0 och Visual Studio 2017 använder ToolsVersion 15.0. I många fall kan du öppna projektet i flera versioner av Visual Studio utan ändringar. Visual Studio använder alltid rätt verktygsuppsättning, men du får ett meddelande om den version som används inte matchar versionen i projektfilen. I nästan alla fall är varningen godartad eftersom verktygsuppsättningarna i de flesta fall är kompatibla.

Underverktyg, som beskrivs senare i det här avsnittet, gör det möjligt för MSBuild att automatiskt växla vilken uppsättning verktyg som ska användas baserat på kontexten där bygget körs. MSBuild använder till exempel en nyare uppsättning verktyg när den körs i Visual Studio 2012 än när den körs i Visual Studio 2010, utan att du uttryckligen behöver ändra projektfilen.

Implementering av verktygsuppsättning

Implementera en verktygsuppsättning genom att välja sökvägarna för de olika verktyg, mål och uppgifter som utgör verktygsuppsättningen. Verktygen i verktygsuppsättningen som MSBuild definierar kommer från följande källor:

  • Mappen .NET Framework.

  • Ytterligare hanterade verktyg.

    Bland de hanterade verktygen finns ResGen.exe och TlbImp.exe.

MSBuild tillhandahåller två sätt att komma åt verktygsuppsättningen:

  • Med hjälp av egenskaper för verktygsuppsättning

  • Med hjälp ToolLocationHelper av metoder

Verktygsuppsättningsegenskaper anger sökvägarna för verktygen. Från och med Visual Studio 2017 har MSBuild inte längre en fast plats. Som standard finns den i mappen MSBuild\15.0\Bin i förhållande till installationsplatsen för Visual Studio. I tidigare versioner använder MSBuild värdet ToolsVersion för attributet i projektfilen för att hitta motsvarande registernyckel och använder sedan informationen i registernyckeln för att ange egenskaperna för verktygsuppsättningen. Om ToolsVersion till exempel har värdet 12.0anger MSBuild egenskaperna för verktygsuppsättningen enligt den här registernyckeln: HKLM\Software\Microsoft\MSBuild\ToolsVersions\12.0.

Det här är egenskaper för verktygsuppsättning:

  • MSBuildToolsPath anger sökvägen till MSBuild-binärfilerna.

  • SDK40ToolsPath anger sökvägen till ytterligare hanterade verktyg för MSBuild 4.x (som kan vara 4.0 eller 4.5).

  • SDK35ToolsPath anger sökvägen till ytterligare hanterade verktyg för MSBuild 3.5.

Alternativt kan du bestämma verktygsuppsättningen programmatiskt genom att anropa klassens ToolLocationHelper metoder. Klassen innehåller följande metoder: