Zestaw narzędzi MSBuild (ToolsVersion)
Zestaw narzędzi MSBuild zawiera plik microsoft.common.tasks , plik microsoft.common.targets i kompilatory, takie jak csc.exe i vbc.exe. Większość zestawów narzędzi może służyć do kompilowania aplikacji do więcej niż jednej wersji programu .NET Framework i więcej niż jednej platformy systemowej. Jednak zestaw narzędzi MSBuild 2.0 może służyć do kierowania tylko programu .NET Framework 2.0.
Atrybut MSBuild ToolsVersion
w elemecie Project w plikach projektów programu 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.
Atrybut ToolsVersion
Określ zestaw narzędzi w atrybucie ToolsVersion
w elememencie Project w pliku projektu. Poniższy przykład określa, że projekt powinien zostać skompilowany przy użyciu zestawu narzędzi MSBuild "Current".
<Project ToolsVersion="Current" ... </Project>
Uwaga
Niektóre typy projektów używają atrybutu sdk
zamiast ToolsVersion
. Aby uzyskać więcej informacji, zobacz Dodawanie do formatu csproj dla platformy .NET Core.
Jak działa atrybut ToolsVersion
Podczas tworzenia projektu w programie Visual Studio lub uaktualniania istniejącego projektu atrybut o nazwie ToolsVersion
jest automatycznie dołączany do pliku projektu, a jego wartość odpowiada wersji programu MSBuild uwzględnionej w wersji programu Visual Studio. Aby uzyskać więcej informacji, zobacz Omówienie określania elementów docelowych platformy.
Gdy wartość jest zdefiniowana ToolsVersion
w pliku projektu, program MSBuild używa tej wartości do określenia wartości właściwości zestawu narzędzi, które są dostępne dla projektu. Właściwość Zestawu narzędzi to $(MSBuildToolsPath)
, która określa ścieżkę narzędzi .NET Framework. Wymagana jest tylko właściwość zestawu narzędzi (lub $(MSBuildBinPath)
).
Począwszy od programu Visual Studio 2013, wersja zestawu narzędzi MSBuild jest taka sama jak numer wersji programu Visual Studio. Program MSBuild domyślnie określa ten zestaw narzędzi w programie Visual Studio i w wierszu polecenia, niezależnie od wersji zestawu narzędzi określonej w pliku projektu. To zachowanie można zastąpić za pomocą flagi -ToolsVersion. Aby uzyskać więcej informacji, zobacz Zastępowanie ustawień ToolsVersion.
W poniższym przykładzie program MSBuild znajduje plik Microsoft.CSharp.targets przy użyciu właściwości zarezerwowanej MSBuildToolsPath
.
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Wartość można zmodyfikować MSBuildToolsPath
, definiując niestandardowy zestaw narzędzi. Aby uzyskać więcej informacji, zobacz Standardowe i niestandardowe konfiguracje zestawu narzędzi.
Podczas kompilowania rozwiązania w wierszu polecenia i określania ToolsVersion
elementu msbuild.exe wszystkie projekty i ich zależności między projektami są tworzone zgodnie z ToolsVersion
tym , nawet jeśli każdy projekt w rozwiązaniu określa własne ToolsVersion
. Aby zdefiniować ToolsVersion
wartość dla poszczególnych projektów, zobacz Zastępowanie ustawień ToolsVersion.
Atrybut ToolsVersion
jest również używany do migracji projektu. Jeśli na przykład otworzysz projekt programu Visual Studio 2008 w programie Visual Studio 2010, plik projektu zostanie zaktualizowany w celu uwzględnienia elementu ToolsVersion="4.0". Jeśli następnie spróbujesz otworzyć ten projekt w programie Visual Studio 2008, nie rozpoznaje uaktualnionego ToolsVersion
i dlatego kompiluje projekt tak, jakby atrybut był nadal ustawiony na 3,5.
Programy Visual Studio 2010 i Visual Studio 2012 używają wersji ToolsVersion 4.0. Program Visual Studio 2013 używa elementu ToolsVersion w wersji 12.0. Program Visual Studio 2015 używa wersji ToolsVersion 14.0, a program Visual Studio 2017 używa wersji ToolsVersion 15.0. W wielu przypadkach można otworzyć projekt w wielu wersjach programu Visual Studio bez modyfikacji. Program Visual Studio zawsze używa poprawnego zestawu narzędzi, ale otrzymasz powiadomienie, jeśli używana wersja nie jest zgodna z wersją w pliku projektu. W prawie wszystkich przypadkach to ostrzeżenie jest łagodne, ponieważ zestawy narzędzi są zgodne w większości przypadków.
Zestawy narzędzi podrzędnych opisane w dalszej części tego tematu umożliwiają programowi MSBuild automatyczne przełączanie zestawu narzędzi do użycia na podstawie kontekstu, w którym jest uruchamiana kompilacja. Na przykład program MSBuild używa nowszego zestawu narzędzi, gdy jest uruchamiany w programie Visual Studio 2012 niż w przypadku uruchomienia w programie Visual Studio 2010 bez konieczności jawnego zmieniania pliku projektu.
Implementacja zestawu narzędzi
Zaimplementuj zestaw narzędzi, wybierając ścieżki różnych narzędzi, elementów docelowych i zadań tworzących zestaw narzędzi. Narzędzia w zestawie narzędzi definiowanym przez program MSBuild pochodzą z następujących źródeł:
Folder .NET Framework.
Dodatkowe narzędzia zarządzane.
Narzędzia zarządzane obejmują pliki ResGen.exe i TlbImp.exe.
Program MSBuild udostępnia dwa sposoby uzyskiwania dostępu do zestawu narzędzi:
Za pomocą właściwości zestawu narzędzi
Przy użyciu ToolLocationHelper metod
Właściwości zestawu narzędzi określają ścieżki narzędzi. Począwszy od programu Visual Studio 2017, program MSBuild nie ma już stałej lokalizacji. Domyślnie znajduje się w folderze MSBuild\15.0\Bin względem lokalizacji instalacji programu Visual Studio. We wcześniejszych wersjach program MSBuild używa wartości atrybutu ToolsVersion
w pliku projektu w celu zlokalizowania odpowiedniego klucza rejestru, a następnie używa informacji w kluczu rejestru w celu ustawienia właściwości zestawu narzędzi. Jeśli na przykład ToolsVersion
ma wartość 12.0
, program MSBuild ustawia właściwości zestawu narzędzi zgodnie z tym kluczem rejestru: HKLM\Software\Microsoft\MSBuild\ToolsVersions\12.0.
Są to właściwości zestawu narzędzi:
MSBuildToolsPath
określa ścieżkę plików binarnych MSBuild.SDK40ToolsPath
Określa ścieżkę dodatkowych narzędzi zarządzanych dla programu MSBuild 4.x (które mogą być 4.0 lub 4.5).SDK35ToolsPath
określa ścieżkę dodatkowych narzędzi zarządzanych dla programu MSBuild 3.5.
Alternatywnie można określić zestaw narzędzi programowo, wywołując metody ToolLocationHelper klasy . Klasa zawiera następujące metody:
GetPathToDotNetFramework Zwraca ścieżkę folderu .NET Framework.
GetPathToDotNetFrameworkFile Zwraca ścieżkę pliku w folderze .NET Framework.
GetPathToDotNetFrameworkSdk Zwraca ścieżkę folderu narzędzi zarządzanych.
GetPathToDotNetFrameworkSdkFile Zwraca ścieżkę pliku, który zazwyczaj znajduje się w folderze narzędzi zarządzanych.
Polecenie GetPathToBuildTools zwraca ścieżkę narzędzi kompilacji.