Pergunta

Quando eu construir minha solução c # os arquivos .tt não vai criar as saídas ficheiro.cs. Mas se eu botão direito os arquivos .tt um de cada vez, em Solution Explorer e selecione "Executar ferramenta personalizada" os cs é gerada, então a configuração ferramenta de construção está correta. O que devo fazer para obter a compilação de solução geral para forçar a ferramenta personalizada para ser executado nos arquivos .tt?

Foi útil?

Solução

Paul, você também pode gerar o código em tempo de compilação com TextTransform.exe ou Elton Stoneman de MSBuild tarefa. Basta ter em mente que o comportamento do built-in directivas, como montagem incluem é diferente quando T4 é executado em Visual Studio vs. a acolhimento de linha de comando.

Outras dicas

Respondendo a minha própria pergunta, que é suposto ser gerado em tempo de design de acordo com esta discussão:

https://web.archive.org/web/20081227142303/http://www.olegsych.com/2008/02/t4-template-directive/

No Visual Studio 2013, eu era capaz de obter os arquivos .tt para regenerar seus alvos apenas adicionando estas linhas ao arquivo csproj:

<PropertyGroup>
  <!-- Get the Visual Studio version – defaults to 10: -->
  <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
  <!-- Keep the next element all on one line: -->
  <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<!-- To enable build tasks on your development computer, install Modeling SDK for Visual Studio. https://www.microsoft.com/en-us/download/details.aspx?id=40754 -->
<Import Project="$(VSToolsPath)\TextTemplating\Microsoft.TextTemplating.targets" />
<!-- Run the Transform task at the start of every build -->
<PropertyGroup>
  <TransformOnBuild>true</TransformOnBuild>
</PropertyGroup>
<!-- Overwrite files that are read-only, for example because they are not checked out -->
<PropertyGroup>
  <OverwriteReadOnlyOutputFiles>true</OverwriteReadOnlyOutputFiles>
</PropertyGroup>
<!-- Transform every template every time -->
<PropertyGroup>
  <TransformOutOfDateOnly>false</TransformOutOfDateOnly>
</PropertyGroup>

No entanto, para que isso funcione, você precisa ter instalado o Modeling SDK para o Visual Studio . Eu encontrei todas essas informações, juntamente com uma descrição mais completa das opções disponíveis, nesta página: Geração de código em um processo de construção da .

No Visual Studio 2017 (provavelmente próximas versões também), você deve adicionar isso em evento pré-compilação:

"$(DevEnvDir)TextTransform.exe" -out "$(ProjectDir)YourTemplate.cs" "$(ProjectDir)YourTemplate.tt"

P.S. A única solução que funcionou para mim.

p.s.s. Alterar caminho para o seu modelo, se não é localizado no diretório raiz do projeto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top