Erstellen einer benutzerdefinierten Toolsetkonfiguration
Ein MSBuild-Toolset enthält Verweise auf Aufgaben, Ziele und Tools, die Sie verwenden können, um ein Anwendungsprojekt zu erstellen. MSBuild umfasst ein Standardtoolset, Sie können jedoch auch benutzerdefinierte Toolsets erstellen.
Standard-Toolsetkonfigurationen
MSBuild enthält das Standardtoolset Current
, das auf die aktuelle Version von MSBuild verweist, die im Ordner MSBuild\Current\Bin im Visual Studio-Installationsverzeichnis installiert ist.
Benutzerdefinierte Toolsetdefinitionen
Wenn ein Standardtoolset die Buildanforderungen nicht erfüllt, können Sie ein benutzerdefiniertes Toolset
erstellen. Angenommen, Sie haben ein Buildlaborszenario, in dem Sie ein eigenes System zum Erstellen von C++-Projekten benötigen. Mit einem benutzerdefinierten Toolset
können Sie dem Attribut ToolsVersion
während der Ausführung von MSBuild.exe benutzerdefinierte Werte zuweisen, indem Sie die Befehlszeilenoption /toolsVersion
verwenden. Wenn Sie das Attribut ToolsVersion
in der Projektdatei angeben, wird es ignoriert.
Auf diese Weise können Sie die $(MSBuildToolsPath)
-Eigenschaft verwenden, um TARGETS-Dateien von diesem Verzeichnis zu importieren, sowie benutzerdefinierte Toolseteigenschaften definieren, die für jedes Projekt verwendet werden können, das dieses Toolset verwendet.
Geben Sie ein benutzerdefiniertes Toolset in der Konfigurationsdatei für MSBuild.exe an (oder für das benutzerdefinierte Tool, das die MSBuild-Engine hostet, wenn dies bei Ihnen zutrifft). Beispielsweise kann die Konfigurationsdatei für MSBuild.exe die folgende Toolset
-Definition enthalten, wenn Sie ein Toolset mit dem Namen MyCustomToolset definieren möchten.
<msbuildToolsets default="MyCustomToolset">
<toolset toolsVersion="MyCustomToolset">
<property name="MSBuildToolsPath"
value="C:\SpecialPath" />
</toolset>
</msbuildToolsets>
<msbuildToolsets>
muss auch wie folgt in der Konfigurationsdatei definiert werden.
<configSections>
<section name="msbuildToolsets"
type="Microsoft.Build.BuildEngine.ToolsetConfigurationSection,
Microsoft.Build, Version=15.1.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a">
</section>
</configSections>
Hinweis
Richtig gelesen ist <configSections>
der erste Unterabschnitt im Abschnitt <configuration>
.
ToolsetConfigurationSection
ist ein benutzerdefinierter Konfigurationsabschnitt, der von jedem MSBuild-Host für die benutzerdefinierte Konfiguration verwendet werden kann. Wenn Sie ein benutzerdefiniertes Toolset verwenden, muss ein Host keine Aktionen durchführen, um die Build-Engine zu initialisieren, sondern nur die Einträge in der Konfigurationsdatei zur Verfügung stellen.
Die folgenden Eigenschaften sind für den Wert der ToolsVersion
, die in Projekten verwendet wird, spezifisch:
$(MSBuildBinPath) ist auf den
ToolsPath
-Wert festgelegt, der entweder in der Registrierung oder in der Konfigurationsdatei festgelegt ist, in derToolsVersion
definiert ist. Die$(MSBuildToolsPath)
-Einstellung in der Registrierung oder die Konfigurationsdatei gibt den Speicherort der Kernaufgaben und Ziele an. In der Projektdatei wird dies der $(MSBuildBinPath)-Eigenschaft sowie der $(MSBuildToolsPath)-Eigenschaft zugeordnet.$(MSBuildToolsPath)
ist eine reservierte Eigenschaft von der MSBuildToolsPath-Eigenschaft, die in der Konfigurationsdatei festgelegt ist. (Diese Eigenschaft ersetzt$(MSBuildBinPath)
.$(MSBuildBinPath)
steht aus Kompatibilitätsgründen weiterhin zur Verfügung.) Ein benutzerdefiniertes Toolset muss entweder$(MSBuildToolsPath)
oder$(MSBuildBinPath)
definieren, jedoch nicht beides, es sei denn, beide haben denselben Wert.Sie können auch benutzerdefinierte, Toolsversion-spezifische Eigenschaften zur Konfigurationsdatei hinzufügen, indem Sie die gleiche Syntax verwenden wie zum Hinzufügen der MSBuildToolsPath-Eigenschaft. Damit diese benutzerdefinierten Eigenschaften der Projektdatei zur Verfügung stehen, müssen Sie den gleichen Namen wie der des in der Konfigurationsdatei angegebenen Werts verwenden. In der Konfigurationsdatei können Sie Toolsets, nicht jedoch Unter-Toolsets definieren.