Přepsání nastavení ToolsVersion

Atribut ToolsVersion elementu Project v sadě Visual Studio a souborech projektu MSBuild je považován za zastaralý v sadě Visual Studio 2019 a novější; můžete jej bezpečně odstranit. Tento článek popisuje jeho použití ve starších verzích nástroje MSBuild nebo pro vlastní sady nástrojů. Viz standardní a vlastní konfigurace sady nástrojů.

Sadu nástrojů pro projekty a řešení můžete změnit jedním ze tří způsobů:

  1. -ToolsVersion Pomocí přepínače (nebo -tvzkratky ) při sestavování projektu nebo řešení z příkazového řádku.

  2. Nastavením parametru ToolsVersion pro úlohu MSBuild.

  3. $(ProjectToolsVersion) Nastavením vlastnosti projektu v rámci řešení. Díky tomu můžete vytvořit projekt v řešení s verzí Sady nástrojů, která se liší od ostatních projektů.

Přepsání nastavení ToolsVersion projektů a řešení v sestaveních příkazového řádku

Přestože projekty sady Visual Studio obvykle sestavují pomocí nástroje ToolsVersion zadané v souboru projektu, můžete pomocí -ToolsVersion přepínače (nebo -tv) na příkazovém řádku tuto hodnotu přepsat a sestavit všechny projekty a jejich závislosti mezi projekty s jinou sadou nástrojů. Příklad:

msbuild.exe someproj.proj -tv:12.0 -p:Configuration=Debug

V tomto příkladu jsou všechny projekty sestaveny pomocí ToolsVersion 12.0. (Viz část Pořadí priorit dále v tomto tématu.)

Při použití -tv přepínače na příkazovém řádku můžete volitelně použít $(ProjectToolsVersion) vlastnost v jednotlivých projektech k jejich sestavení s jinou hodnotou ToolsVersion než ostatní projekty v řešení.

Přepsání nastavení ToolsVersion pomocí parametru ToolsVersion úlohy MSBuild

Úloha MSBuild je primárním prostředkem pro sestavení jednoho projektu. Chcete-li povolit msBuild úkol sestavit projekt s jiným ToolsVersion než ten zadaný v projektu, poskytuje volitelný parametr úkolu s názvem ToolsVersion. Následující příklad ukazuje použití tohoto parametru:

  1. Vytvořte soubor s názvem projectA.proj a obsahující následující kód:

    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
    ToolsVersion="12.0">
    
        <Target Name="go" >
            <Message Text="projectA.proj" />
            <Message Text="MSBuildToolsVersion: $(MSBuildToolsVersion)" />
            <Message Text="MSBuildToolsPath:    $(MSBuildToolsPath)" />
    
            <MSBuild Projects="projectB.proj"
                ToolsVersion="2.0"
                Targets="go" />
        </Target>
    </Project>
    
  2. Vytvořte další soubor s názvem projectB.proj a obsahující následující kód:

    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
    ToolsVersion="12.0">
    
        <Target Name="go">
            <Message Text="projectB.proj" />
            <Message Text="MSBuildToolsVersion: $(MSBuildToolsVersion)" />
            <Message Text="MSBuildToolsPath:    $(MSBuildToolsPath)" />
        </Target>
    </Project>
    
  3. Na příkazovém řádku zadejte následující příkaz:

    msbuild projectA.proj -t:go -toolsversion:3.5
    
  4. Zobrazí se následující výstup. Nastavení projectAna příkazovém řádku přepíše ToolsVersion=12.0 nastavení ve značceProject.-toolsversion:3.5

    ProjectB je volána úkolem v projectA. Tento úkol má ToolsVersion=2.0, který přepíše ostatní ToolsVersion nastavení pro projectB.

    Output:
      projectA.proj
      MSBuildToolsVersion: 3.5
      MSBuildToolsPath:    C:\Windows\Microsoft.NET\Framework\v3.5
    
      projectB.proj
      MSBuildToolsVersion: 2.0
      MSBuildToolsPath:    C:\Windows\Microsoft.NET\Framework\v2.0.50727
    

Pořadí priorit

Pořadí priorit od nejvyššího po nejnižší, které slouží k určení ToolsVersion :

  1. Atribut ToolsVersion úlohy MSBuild použité k sestavení projektu, pokud existuje.

  2. Přepínač -toolsversion (nebo -tv) použitý v příkazu msbuild.exe, pokud existuje.

  3. Pokud je proměnná MSBUILDTREATALLTOOLSVERSIONSASCURRENT prostředí nastavená, použijte aktuální ToolsVersion.

  4. Pokud je proměnná MSBUILDTREATHIGHERTOOLSVERSIONASCURRENT prostředí nastavená a definovaná ToolsVersion v souboru projektu je větší než aktuální ToolsVersion, použijte aktuální ToolsVersion.

  5. Pokud je proměnná MSBUILDLEGACYDEFAULTTOOLSVERSION prostředí nastavená nebo pokud ToolsVersion není nastavená, použijí se následující kroky:

    1. Atribut ToolsVersion elementu Project souboru projektu. Pokud tento atribut neexistuje, předpokládá se, že se jedná o aktuální verzi.

    2. Výchozí verze nástrojů v souboru MSBuild.exe.config .

    3. Výchozí verze nástrojů v registru. Další informace naleznete v tématu Standardní a vlastní konfigurace sady nástrojů.

  6. Pokud proměnná MSBUILDLEGACYDEFAULTTOOLSVERSION prostředí není nastavená, použijí se následující kroky:

    1. Pokud je proměnná MSBUILDDEFAULTTOOLSVERSION prostředí nastavená na ToolsVersion existující, použijte ji.

    2. Pokud DefaultOverrideToolsVersion je nastavena v MSBuild.exe.config, použijte ji.

    3. Pokud DefaultOverrideToolsVersion je nastavená v registru, použijte ji.

    4. V opačném případě použijte aktuální ToolsVersion.