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:
Za pomocą przełącznika
-ToolsVersion
(lub-tv
, w skrócie) podczas kompilowanie projektu lub rozwiązania z poziomu wiersza polecenia.Ustawiając
ToolsVersion
parametr w zadaniu MSBuild.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:
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>
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>
Wprowadź następujące polecenie w wierszu polecenia:
msbuild projectA.proj -t:go -toolsversion:3.5
Zostanie wyświetlone następujące dane wyjściowe. W przypadku
projectA
elementu-toolsversion:3.5
ustawienie w wierszu polecenia zastępujeToolsVersion=12.0
ustawienie w taguProject
.ProjectB
element jest wywoływany przez zadanie w plikuprojectA
. To zadanie maToolsVersion=2.0
wartość , która zastępuje inneToolsVersion
ustawienia elementuprojectB
.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:
Atrybut
ToolsVersion
w zadaniu MSBuild używanym do kompilowania projektu, jeśli istnieje.Przełącznik
-toolsversion
(lub-tv
) używany w poleceniu msbuild.exe, jeśli istnieje.Jeśli zmienna środowiskowa
MSBUILDTREATALLTOOLSVERSIONSASCURRENT
jest ustawiona, użyj bieżącejToolsVersion
zmiennej .Jeśli zmienna środowiskowa
MSBUILDTREATHIGHERTOOLSVERSIONASCURRENT
jest ustawiona iToolsVersion
zdefiniowana w pliku projektu jest większa niż bieżącaToolsVersion
, użyj bieżącegoToolsVersion
.Jeśli zmienna środowiskowa
MSBUILDLEGACYDEFAULTTOOLSVERSION
jest ustawiona lub jeśliToolsVersion
nie jest ustawiona, zostaną użyte następujące kroki:Atrybut
ToolsVersion
elementu Project pliku projektu. Jeśli ten atrybut nie istnieje, przyjmuje się, że jest to bieżąca wersja.Domyślna wersja narzędzi w pliku MSBuild.exe.config .
Domyślna wersja narzędzi w rejestrze. Aby uzyskać więcej informacji, zobacz Standardowe i niestandardowe konfiguracje zestawu narzędzi.
Jeśli zmienna środowiskowa
MSBUILDLEGACYDEFAULTTOOLSVERSION
nie jest ustawiona, zostaną użyte następujące kroki:Jeśli zmienna środowiskowa
MSBUILDDEFAULTTOOLSVERSION
jest ustawiona naToolsVersion
wartość, która istnieje, użyj jej.Jeśli
DefaultOverrideToolsVersion
parametr jest ustawiony w pliku MSBuild.exe.config, użyj go.Jeśli
DefaultOverrideToolsVersion
jest ustawiona w rejestrze, użyj go.W przeciwnym razie użyj bieżącego
ToolsVersion
elementu .