web-dev-qa-db-de.com

MSBuild-Unterstützung für T4-Vorlagen in Visual Studio 2017 RTM

In Visual Studio 2015 verwende ich das NuGet-Paket Unofficial.Microsoft.VisualStudio.TextTemplating.14.0.0, mit dem ich T4-Vorlagen direkt aus MSBuild umwandeln kann, wann immer ein Projekt erstellt wird.

In Visual Studio 2017 RTM wird jedoch der Build mit den folgenden Meldungen abgebrochen:

An Exception was thrown while running the transformation code. The process cannot continue. The following Exception was thrown: System.IO.FileNotFoundException: Could not load file or Assembly 'Microsoft.CodeAnalysis, Version=1.3.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified. File name: 'Microsoft.CodeAnalysis, Version=1.3.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'

Dies wird durch die Datei Unofficial.Microsoft.VisualStudio.TextTemplating.targets(396,5) ausgelöst, die sich in diesem Paket befindet. 

Ich vermute, dass der Fehler auf einen Versuch zurückzuführen ist, diese Ziele aus einem VS 2017-Build aufgrund von nicht übereinstimmenden Umgebungen zu verwenden, aber ich weiß nicht, wie ich das genaue Problem ermitteln kann. Für v15 gibt es noch kein aktualisiertes Paket, das ich sehen kann.

Wie kann ich T4-Transformationen von MSBuild ausführen, die für VS 2017 funktionieren? Wird es ein neues Paket von NuGet geben, das zu einem bestimmten Zeitpunkt verwendet werden soll, oder wird dies nicht mehr unterstützt?

15
Sam

Ich habe die richtige Lösung gefunden.

Es stellt sich heraus, dass das T4-SDK jetzt als Teil von Visual Studio 2017 enthalten ist (und nicht wie in der Vergangenheit Teil des separaten Modellierungs-SDKs ist). ABER Sie müssen es über das Toolset Visual Studio extension development im VS2017-Installationsprogramm (Textvorlage) installieren Transformationsfunktion).

Nach der Installation können Sie mit MSBuild Vorlagen transformieren, indem Sie die relevanten Ziele in das MSBuild-Projekt importieren:

<PropertyGroup>
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">15.0</VisualStudioVersion>
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
    <TransformOnBuild>True</TransformOnBuild>
    <TransformOutOfDateOnly>false</TransformOutOfDateOnly>
</PropertyGroup>

<!-- add AFTER import for $(MSBuildToolsPath)\Microsoft.CSharp.targets -->
<Import Project="$(VSToolsPath)\TextTemplating\Microsoft.TextTemplating.targets" />

Dies löste mein Problem und machte auch das separate inoffizielle NuGet-Paket überflüssig.

22
Sam

Ich hatte ein ähnliches Problem. Mein T4 würde nicht generieren, aber speichern. Dies war bizarr, da ich keine Fehlermeldung erhalten hatte, aber als ich @ Sam's Antwort gelesen hatte, stellte ich fest, dass mit meiner VS-Installation etwas nicht in Ordnung war. Und ich hatte recht. VS 2017 15.9.4 wird in einem eigenen Installationsverzeichnis installiert, die Tools werden jedoch nicht in den Ordner VSToolsPath kopiert. Stattdessen lässt er sie einfach dort, wo sie sind. Die richtige Lösung für mich war also die Verwendung dieser <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(VsInstallRoot)\MSBuild\Microsoft\VisualStudio\v15.0\TextTemplating\Microsoft.TextTemplating.targets" />

0
Cubelaster

T4Executer führt dies aus und Sie können festlegen, welche Vorlagen vor oder nach dem Erstellen ausgeführt werden sollen oder welche Vorlagen beim Erstellen nicht ausgeführt werden sollen. VS2017-19

0
Tim Maes