web-dev-qa-db-ja.com

新しいVS2017csprojプロジェクトで出力を生成しないT4テンプレート

project.json/.xprojプロジェクトを新しいCS2017.csproj形式に移行しました。

プロジェクトには、T4(.tt)テンプレートファイルが含まれています。

保存またはビルド時に出力を再生成しません。出力.csファイルも.ttファイルの下にネストされていません。

これを機能させるために私がしなければならないことがありますか?

10
Drew Noakes

.ttファイルは、保存時にVSによってのみ自動実行されますAutoT4 をインストールして、ビルドの前後に実行することができます。 (現時点では、新しい.csprojファイルには制限があることに注意してください。プロパティウィンドウにオプションが表示されません。)

古いproject.json/.xproj形式から変換した場合は、テンプレートをプロジェクトに明示的に追加する必要がある場合があります。

<ItemGroup>
  <None Update="Foo.tt">
    <Generator>TextTemplatingFileGenerator</Generator>
    <LastGenOutput>Foo.cs</LastGenOutput>
  </None>
  <Compile Update="Foo.cs">
    <DesignTime>True</DesignTime>
    <AutoGen>True</AutoGen>
    <DependentUpon>Foo.tt</DependentUpon>
  </Compile>
</ItemGroup>

関連するGitHubの問題

編集

以下のコメントに記載されているように、テンプレートを除外してプロジェクトに含めることで、これをすばやく簡単に行うことができます。

16
Bennor McCarthy

これは2年以上前のことですが、私のように何年もこの問題にぶつかった人にとっては、何もインストールしなくても以下の方法でうまくいきます。プロジェクトをVisualStudio2010からVisualStudio 2017にアップグレードした後、まったく同じ問題が発生しました。YMMV。開始する前に、.csprojファイルのバックアップコピーを作成してください。

プロジェクトのビルド時にすべての.ttファイルを強制的に再構築するには、.csprojプロジェクトファイルを編集することで、何もインストールせずに実行できます。 .csprojファイルの編集は不格好に思えますが、承認された方法です https://docs.Microsoft.com/en-gb/visualstudio/modeling/code-generation-in-a-build-process?view= vs-2015

.csprojファイル内には、たくさんのPropertyGroupノードがあります。 PropertyGroupノードのリストの最後(位置は重要ではありません)に、次のコンテンツを含む別のPropertyGroupノードを追加します。

_<PropertyGroup>
    <TransformOnBuild>true</TransformOnBuild>
    <TransformOutOfDateOnly>false</TransformOutOfDateOnly> 
</PropertyGroup>
_

.projファイルの終わり近くを見ると、次のような行が表示されます。

_<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
_

(興味深いことに、VS2017がインストールされているコンピューターではC:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.CSharp.targetsに解決されます)

その行の下に、次のような行を追加します。

_<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v15.0\TextTemplating\Microsoft.TextTemplating.targets" />
_

(興味深いことに、私のコンピューターではC:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\Microsoft\VisualStudio\v15.0\TextTemplating\Microsoft.TextTemplating.targetsに解決されます)

YMMV。あなたのプロジェクトがWebプロジェクトの場合、おそらく近くに似ているが_Microsoft.WebApplication.targets_に関係する線があり、そこからインスピレーションを引き出すことができます。

それは、おそらくVisual Studioの再起動で、それを行う必要があります。 .ttファイルが出力する変換されたファイルを削除してからプロジェクトを再構築すると、出力されたファイルが再び表示されるはずです。

1
Jinlye