Udostępnij za pośrednictwem


Zastępowanie ustawień ToolsVersion

Atrybut ToolsVersion elementu Project w plikach projektów visual Studio i MSBuild jest uważany za przestarzały w programie Visual Studio 2019 lub nowszym. Można go bezpiecznie usunąć. W tym artykule opisano jego użycie w starszych wersjach programu MSBuild lub w przypadku niestandardowych zestawów narzędzi. Zobacz Standardowe i niestandardowe konfiguracje zestawu narzędzi.

Zestaw narzędzi dla projektów i rozwiązań można zmienić na jeden z trzech sposobów:

  1. Za pomocą przełącznika -ToolsVersion (lub -tv, w skrócie) podczas kompilowanie projektu lub rozwiązania z poziomu wiersza polecenia.

  2. Ustawiając ToolsVersion parametr w zadaniu MSBuild.

  3. Ustawiając $(ProjectToolsVersion) właściwość w projekcie w ramach rozwiązania. Dzięki temu można utworzyć projekt w rozwiązaniu z wersją zestawu narzędzi, która różni się od innych projektów.

Zastąp ustawienia NarzędziaWersja projektów i rozwiązań w kompilacjach wiersza polecenia

Mimo że projekty programu Visual Studio zwykle kompilują się przy użyciu elementu ToolsVersion określonego w pliku projektu, można użyć -ToolsVersion przełącznika (lub -tv) w wierszu polecenia, aby zastąpić te wartości i skompilować wszystkie projekty i ich zależności między projektami za pomocą innego zestawu narzędzi. Na przykład:

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

W tym przykładzie wszystkie projekty są kompilowane przy użyciu wersji ToolsVersion 12.0. (Zobacz jednak sekcję Kolejność pierwszeństwa w dalszej części tego tematu).

W przypadku korzystania z przełącznika -tv w wierszu polecenia możesz opcjonalnie użyć $(ProjectToolsVersion) właściwości w poszczególnych projektach, aby skompilować je z inną wartością ToolsVersion niż inne projekty w rozwiązaniu.

Zastąpij ustawienia NarzędziaWersja przy użyciu parametru ToolsVersion zadania MSBuild

Zadanie MSBuild jest podstawowym sposobem kompilowania jednego projektu. Aby umożliwić programowi MSBuild skompilowanie projektu przy użyciu innego parametru ToolsVersion niż określony w projekcie, udostępnia opcjonalny parametr zadania o nazwie ToolsVersion. W poniższym przykładzie pokazano, jak używać tego parametru:

  1. Utwórz plik o nazwie projectA.proj zawierający następujący kod:

    <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. Utwórz inny plik o nazwie projectB.proj zawierający następujący kod:

    <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. Wprowadź następujące polecenie w wierszu polecenia:

    msbuild projectA.proj -t:go -toolsversion:3.5
    
  4. Zostanie wyświetlone następujące dane wyjściowe. W przypadku projectAelementu -toolsversion:3.5 ustawienie w wierszu polecenia zastępuje ToolsVersion=12.0 ustawienie w tagu Project .

    ProjectB element jest wywoływany przez zadanie w pliku projectA. To zadanie ma ToolsVersion=2.0wartość , która zastępuje inne ToolsVersion ustawienia elementu 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
    

Kolejność pierwszeństwa

Kolejność pierwszeństwa, od najwyższego do najniższego, używana do określenia wartości ToolsVersion to:

  1. Atrybut ToolsVersion w zadaniu MSBuild używanym do kompilowania projektu, jeśli istnieje.

  2. Przełącznik -toolsversion (lub -tv) używany w poleceniu msbuild.exe, jeśli istnieje.

  3. Jeśli zmienna środowiskowa MSBUILDTREATALLTOOLSVERSIONSASCURRENT jest ustawiona, użyj bieżącej ToolsVersionzmiennej .

  4. Jeśli zmienna środowiskowa MSBUILDTREATHIGHERTOOLSVERSIONASCURRENT jest ustawiona i ToolsVersion zdefiniowana w pliku projektu jest większa niż bieżąca ToolsVersion, użyj bieżącego ToolsVersion.

  5. Jeśli zmienna środowiskowa MSBUILDLEGACYDEFAULTTOOLSVERSION jest ustawiona lub jeśli ToolsVersion nie jest ustawiona, zostaną użyte następujące kroki:

    1. Atrybut ToolsVersionelementu Project pliku projektu. Jeśli ten atrybut nie istnieje, przyjmuje się, że jest to bieżąca wersja.

    2. Domyślna wersja narzędzi w pliku MSBuild.exe.config .

    3. Domyślna wersja narzędzi w rejestrze. Aby uzyskać więcej informacji, zobacz Standardowe i niestandardowe konfiguracje zestawu narzędzi.

  6. Jeśli zmienna środowiskowa MSBUILDLEGACYDEFAULTTOOLSVERSION nie jest ustawiona, zostaną użyte następujące kroki:

    1. Jeśli zmienna środowiskowa MSBUILDDEFAULTTOOLSVERSION jest ustawiona na ToolsVersion wartość, która istnieje, użyj jej.

    2. Jeśli DefaultOverrideToolsVersion parametr jest ustawiony w pliku MSBuild.exe.config, użyj go.

    3. Jeśli DefaultOverrideToolsVersion jest ustawiona w rejestrze, użyj go.

    4. W przeciwnym razie użyj bieżącego ToolsVersionelementu .