Udostępnij za pośrednictwem


Zastępowanie ustawień ToolsVersion

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

  1. za pomocą przełącznika /ToolsVersion(lub /tv, w skrócie) podczas budowania projektu lub rozwiązania z wiersza polecenia

  2. przez ustawienie parametru ToolsVersion na zadanie programu MSBuild

  3. przez ustawienie właściwości $(ProjectToolsVersion) dla projektu w ramach rozwiązania.To umożliwia budowanie projektu w ramach rozwiązania z wersją Zestaw narzędzi, który różni się od tego dla innych projektów.

Zastąp ustawienia ToolsVersion projektów i rozwiązania na kompilacji z wiersza polecenia

Chociaż projekty programu Visual Studio zazwyczaj tworzą wersję narzędzi określoną w pliku projektu, można użyć przełącznika /ToolsVersion (lub /tv) w wierszu polecenia, aby zastąpić tę wartość oraz zbudować wszystkie projekty i ich zależności projektu 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 narzędzi w wersji 12.0. (Jednak, zobacz sekcję „Kolejność pierwszeństwa” w dalszej części tego tematu).

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

Zastąp ustawienia ToolsVersion przy użyciu parametru ToolsVersion zadania MSBuild

Zadanie MSBuild to podstawowy sposób na skompilowanie przez jeden projekt innego projektu.Aby włączyć zadanie MSBuild w celu konstruowania projektu z innym ToolsVersion niż określono w projekcie, zapewnia parametr opcjonalny o nazwie ToolsVersion.Poniższy przykład kodu demonstruje, jak używać tego parametru:

  1. Utwórz plik o nazwie projectA.proj i zawierający poniższy kod:

    <Project xmlns="https://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 i zawierający poniższy kod:

    <Project xmlns="https://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. W wierszu polecenia wpisz następujące polecenie:

    msbuild projectA.proj /t:go /toolsversion:3.5
    
  4. Pojawią się następujące dane wyjściowe.Dla projektu projectA ustawienie /toolsversion:3.5 w wierszu polecenia zastępuje ustawienie ToolsVersion=12.0 w znaczniku Project.

    Obiekt ProjectB jest wywoływany przez zadania w obiekcie projectA.To zadanie ma ToolsVersion=2.0, który zastępuje inne ustawienia ToolsVersion dla 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
    

Hierarchia ważności

Hierarchia ważności, od najwyższego do najniższego, używana do określenia ToolsVersion to:

  1. Atrybut ToolsVersion zadana programu MSBuild służącego do konstruowania projektu, jeśli istnieje.

  2. Przełącznik /toolsversion (lub /tv), który jest używany w poleceniu msbuild.exe, jeśli istnieje.

  3. Jeśli zmienna środowiskowa MSBUILDTREATALLTOOLSVERSIONSASCURRENT jest ustawiona, użyj bieżącego obiektu ToolsVersion.

  4. Jeśli zmienna środowiskowa MSBUILDTREATHIGHERTOOLSVERSIONASCURRENT jest ustawiona, a obiekt ToolsVersion zdefiniowany w pliku projektu jest większy niż bieżąca wartość ToolsVersion, użyj bieżącego obiektu ToolsVersion.

  5. Jeśli zmienna środowiskowa MSBUILDLEGACYDEFAULTTOOLSVERSION jest ustawiona lub jeśli obiekt ToolsVersion nie jest ustawiony, używane są następujące czynności:

    1. Atrybut ToolsVersion elementu Projekt pliku projektu.Jeśli ten atrybut nie istnieje, to zakłada 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 Konfiguracje standardowego i niestandardowego zestawu narzędzi.

  6. Jeśli zmienna środowiskowa MSBUILDLEGACYDEFAULTTOOLSVERSION nie jest ustawiona, używane są następujące czynności:

    1. Jeśli zmienna środowiskowa MSBUILDDEFAULTTOOLSVERSION jest ustawiona na obiekt ToolsVersion, który istnieje, użyj go.

    2. Jeśli parametr DefaultOverrideToolsVersion ma wartość MSBuild.exe.config, użyj go.

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

    4. W przeciwnym razie użyj bieżącego obiektu ToolsVersion.

Zobacz też

Koncepcje

Zestaw narzędzi MSBuild (ToolsVersion)

Konfiguracje standardowego i niestandardowego zestawu narzędzi

Inne zasoby

Przegląd wielowersyjności kodu w programie MSBuild

Pojęcia dotyczące programu MSBuild