webdevqa.jp.net

Visual Studio 2017でのT4テンプレートのMSBuildサポートRTM

Visual Studio 2015では、プロジェクトがビルドされるたびに、MSBuildからT4テンプレートを直接変換できるようにするNuGetパッケージ_Unofficial.Microsoft.VisualStudio.TextTemplating.14.0.0_を使用しています。

Visual Studio 2017ではRTMただし、これによりビルドが中断され、次のメッセージが表示されます。

_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'_

これは、このパッケージに含まれるUnofficial.Microsoft.VisualStudio.TextTemplating.targets(396,5)ファイルによって発生します。

私の推測では、ミスマッチした環境が原因で、VS 2017ビルドからこれらのターゲットを使用しようとしたことが原因でエラーが発生したと思いますが、正確な問題を追跡する方法がわかりません。確認できるv15用の更新パッケージはまだありません。

VS 2017で機能するMSBuildからT4変換を実行するにはどうすればよいですか?ある時点で使用するためのNuGetからの新しいパッケージはありますか、またはこれはサポートされなくなりますか?

16
Sam

私は正しい解決策を見つけました。

T4 SDKがVisual Studio 2017の一部として含まれていることが判明しました(以前のように個別のモデリングSDKの一部ではありません)。ただし、VS2017のVisual Studio extension developmentツールセットを介してインストールする必要があります。インストーラー(テキストテンプレート変換機能)。

これをインストールしたら、MSBuildを使用して、関連するターゲットをMSBuildプロジェクトにインポートすることにより、テンプレートを変換できます。

<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" />

これにより問題が解決し、非公式の個別のNuGetパッケージが不要になりました。

23
Sam

同様の問題がありました。 T4はビルド時に生成されませんが、保存時に生成されます。エラーが発生しなかったのでこれは奇妙でしたが、@ Samの回答を読んだときに、VSのインストールに問題があることがわかりました。そして、私は正しかった。 VS 2017 15.9.4は独自のインストールディレクトリにインストールされますが、VSToolsPathフォルダーにツールをコピーしません。代わりに、彼らは彼らがいる場所にそれらを残すだけです。したがって、私にとって、正しい解決策はこれを使用することでした<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(VsInstallRoot)\MSBuild\Microsoft\VisualStudio\v15.0\TextTemplating\Microsoft.TextTemplating.targets" />

0
Cubelaster

T4Executer はこれを行い、ビルド前またはビルド後に実行するテンプレートを設定したり、ビルド時に実行しないテンプレートを設定したりできます。 VS2017-19

0
Tim Maes