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からの新しいパッケージはありますか、またはこれはサポートされなくなりますか?
私は正しい解決策を見つけました。
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パッケージが不要になりました。
同様の問題がありました。 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" />
T4Executer はこれを行い、ビルド前またはビルド後に実行するテンプレートを設定したり、ビルド時に実行しないテンプレートを設定したりできます。 VS2017-19