Bagaimana cara mendapatkan templat T4 untuk menghasilkan output pada setiap build? Seperti sekarang, itu hanya membuat ulang ketika saya membuat perubahan pada templat.
Saya telah menemukan pertanyaan lain yang mirip dengan ini:
Transformasi T4 dan membangun ketertiban dalam Visual Studio (tidak dijawab)
Bagaimana cara membuat file t4 di studio visual?(jawaban tidak cukup detail [sementara masih banyak rumit] dan bahkan tidak masuk akal total)
Pasti ada cara yang lebih sederhana untuk melakukan ini!
visual-studio
tfs
msbuild
t4
JoelFan
sumber
sumber
Jawaban:
Saya menggunakan jawaban JoelFan untuk muncul bersama ini. Saya menyukainya lebih baik karena Anda tidak harus ingat untuk memodifikasi acara pra-bangun setiap kali Anda menambahkan file .tt baru ke proyek.
%PATH%
transform_all ..\..
"transform_all.bat
sumber
"%CommonProgramFiles%\Microsoft Shared\TextTemplating\1.2\texttransform.exe"
) dalam file batch, daripada menambahkannya ke% PATH%%COMMONPROGRAMFILES(x86)%\microsoft shared\TextTemplating\11.0\TextTransform.exe
. Bungkus dengan tanda kutip ganda.TextTransform.exe
menyebalkan. Anda sudah dapat mengklik kanan "Jalankan Alat Kustom" di Visual Studio, sehingga sudah memiliki jalur alat. Mengapa saya harus melalui pekerjaan menyediakannya lagi ketika saya membangun dari konteks Visual Studio?Saya setuju dengan GarethJ - dalam VS2010 jauh lebih mudah untuk membuat ulang tt templat pada setiap build. Blog Oleg Sych menjelaskan cara melakukannya. Pendeknya:
</Project>
Itu dia. Buka proyek Anda. Pada setiap build semua * .tt templat akan diproses ulang
sumber
msbuild mySolution.sln /p:CustomAfterMicrosoftCommonTargets="C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\TextTemplating\Microsoft.TextTemplating.targets" /p:TransformOnBuild=true /p:TransformOutOfDateOnly=false
Ada paket NuGet hebat yang melakukan hal ini:
Rincian tentang paket dapat ditemukan di sini
sumber
content
tindakan build<#@ template language="C#" #>
Saya menggunakan jawaban MarkGr dan mengembangkan solusi ini. Pertama, buat file batch yang disebut RunTemplate.bat di folder alat terpisah di atas folder solusi utama. File batch hanya memiliki garis:
File batch ini mengambil 2 parameter ... % 1 adalah path ke file .tt tanpa ekstensi .tt. % 2 adalah jalur ke setiap DLL yang dirujuk oleh arahan Majelis dalam templat.
Selanjutnya, masuk ke Properti Proyek dari proyek yang berisi template T4. Pergilah ke Bangun Acara dan tambahkan baris perintah acara Bangun sebelumnya :
mengganti MyTemplate dengan nama file file .tt Anda (yaitu MyTemplate.tt) tanpa ekstensi .tt. Ini akan memiliki hasil memperluas templat untuk menghasilkan MyTemplate.cs sebelum membangun proyek. Kemudian build aktual akan mengkompilasi MyTemplate.cs
sumber
Baru-baru ini menemukan plugin VS yang hebat ini, Chirpy .
Tidak hanya menghasilkan T4 pada build, tetapi juga memungkinkan pendekatan berbasis T4 untuk meminimalkan javascript, CSS, dan bahkan memungkinkan Anda menggunakan sintaks KURANG untuk CSS Anda!
sumber
Mungkin cara paling sederhana adalah menginstal ekstensi Visual Studio yang disebut AutoT4 .
Ini menjalankan semua templat T4 pada pembuatan secara otomatis.
sumber
Pra-bangun dapat direduksi menjadi satu baris:
Ini mengubah semua
.tt
file dalam proyek dan mencantumkannya ke output build.Jika Anda tidak ingin output build maka Anda harus mengatasi beberapa "perilaku menarik" :
Tentu saja, Anda bisa menarik ini ke dalam file batch yang Anda lewati jalur direktori proyek jika Anda mau.
NB Path mungkin memerlukan beberapa penyesuaian. Jalur di atas adalah tempat VS 2008 menginstalnya di mesin saya; tetapi Anda mungkin menemukan bahwa nomor versi antara
TextTemplating
danTextTransform.exe
berbeda.sumber
System.Exception: T4MVC can only execute through the Visual Studio host
Lihat C: \ Program Files (x86) \ Common Files \ Microsoft Shared \ TextTemplating ada exe transformasi baris perintah di sana. Atau menulis tugas MSBuild dengan host kustom dan melakukan transformasi sendiri.
sumber
Memperluas jawaban Seth Reno dan JoelFan , saya datang dengan ini. Dengan solusi ini tidak perlu mengingat untuk memodifikasi acara pra-bangun setiap kali Anda menambahkan file .tt baru ke proyek.
Prosedur Implementasi
transform_all.bat "$(ProjectDir)" $(ProjectExt)
untuk setiap proyek dengan .tt yang ingin Anda buattransform_all.bat
CATATAN
Transformasi teks mengasumsikan kode dalam templat T4 adalah bahasa yang sama dengan jenis proyek Anda. Jika kasus ini tidak berlaku untuk Anda, maka Anda harus mengganti
$(ProjectExt)
argumen dengan ekstensi file yang Anda inginkan untuk dihasilkan oleh kode..TT
file harus ada di direktori proyek agar tidak dapat dibangun. Anda dapat membuat file TT di luar direktori proyek dengan menentukan jalur yang berbeda sebagai argumen pertama ( mis. Ganti"$(ProjectDir)"
dengan jalur yang berisi file TT.)Ingat juga untuk mengatur jalur yang benar ke
transform_all.bat
file batch.Sebagai contoh, saya menempatkannya di direktori solusi saya sehingga acara pra-bangun adalah sebagai berikut
"$(SolutionDir)transform_all.bat" "$(ProjectDir)" $(ProjectExt)
sumber
t4list.txt
file Anda ke PasteBin jadi saya mencoba untuk melihat apakah kesalahan Anda berasal dari sana?for /f "delims=" %%d in (t4list.txt) do (
dan batasan perusahaan mencegah Anda mempostingt4list.txt
file Anda , maka saya khawatir tidak banyak yang bisa saya lakukan untuk membantu Anda. Saya benar-benar ingin membantu menyelesaikan ini, tetapi sepertinya tidak mungkin karena saya tidak memiliki data untuk melanjutkan. Semoga berhasil dalam memperbaiki masalah ini dan ingatlah untuk mengirim solusi ketika Anda berhasil.(this.Host as IServiceProvider).GetService(typeof(EnvDTE.DTE)) as EnvDTE.DTE;
? Sayangnya, saya mendapatkan pengecualian referensi nol , ketika saya menjalankan tt dari tidak di dalam studio visual.Jika Anda menggunakan Visual Studio 2010, Anda dapat menggunakan Visual Studio Modeling dan Visualisasi SDK: http://code.msdn.microsoft.com/vsvmsdk
Ini berisi tugas-tugas msbuild untuk mengeksekusi templat T4 pada waktu build.
Lihat blog Oleg untuk penjelasan lebih lanjut: http://www.olegsych.com/2010/04/understanding-t4-msbuild-integration
sumber
Hai, skrip saya juga dapat mem-parsing ekstensi keluaran
Buat saja
transform_all.bat $(SolutionDir)
acara pra-bangun, dan semua file * .tt dalam solusi Anda akan diubah secara otomatis.sumber
Dynamo.AutoTT akan melakukan apa yang Anda butuhkan. Anda dapat mengonfigurasinya untuk menonton file melalui regex atau menghasilkan saat dibangun. Anda juga dapat menentukan templat T4 mana yang ingin Anda picu.
Anda dapat mengunduhnya dari sini: https://github.com/MartinF/Dynamo.AutoTT
Cukup buat, salin dll dan file AddIn ke
C: \ Users \ Documents \ Visual Studio 2012 \ Addins \
dan pergilah.
Jika Anda ingin menjalankannya dalam VS2012 Anda harus memodifikasi file Dynamo.AutoTT.AddIn dan mengatur Versi ke 11.0 di dalam file AddIn;
sumber
Terima kasih kepada GitHub.com/Mono/T4 , saat ini Anda dapat melakukannya untuk membangun .NET Core dan Visual Studio dengan menambahkan ini ke
.csproj
file Anda :Jika Anda mengubah template Anda ke bahasa pemrograman yang berbeda Anda harus menambahkan sesuatu seperti
<Compile Remove="**\*.vb" />
dan<Compile Include="**\*.vb" />
untuk mendapatkan file-file ini dikompilasi bahkan jika Anda belum membuat file.Remove
danInclude
trik hanya diperlukan untuk generasi pertama kali, atau Anda dapat membuat XML lebih pendek seperti ini:dan jalankan build dua kali (untuk pertama kali). Jika Anda telah membuat file yang dikomit ke repositori, tidak akan ada masalah pada pembangunan kembali dengan kedua contoh.
Di Visual Studio Anda mungkin ingin melihat sesuatu seperti ini:
alih-alih ini:
Jadi tambahkan sesuatu seperti ini ke file proyek Anda:
Contoh lengkap di sini: GitHub.com/Konard/T4GenericsExample (termasuk pembuatan beberapa file dari templat tunggal).
sumber
Inilah solusi saya - mirip dengan jawaban yang diterima. Kami memiliki masalah dengan kontrol sumber kami. File .cs target hanya baca dan T4 gagal. Berikut adalah kode, yang menjalankan T4 di folder temp, membandingkan file target, dan menyalinnya hanya jika terjadi perubahan yang sama. Itu tidak memperbaiki masalah dengan file read.only, tapi setidaknya itu tidak terlalu sering terjadi:
Transform.bat
Anda dapat mencoba menambahkan perintah check-out Anda pada sebuah baris (:: Anda dapat mencoba ....)
Di proyek Anda tetapkan ini sebagai tindakan prebuild:
sumber
Anda hanya perlu menambahkan perintah ini ke acara pra-bangun proyek:
Pemeriksaan konfigurasi = debug, pastikan Anda tidak membuat ulang kode dalam mode rilis, ketika Anda melakukan build di server build TFS misalnya.
sumber
Di visual studio 2013, klik kanan template T4 dan atur transformasi pada properti build menjadi true.
sumber
Inilah cara saya menempelkannya. Link . Pada dasarnya membangun di atas blog yang hebat (blogs.clariusconsulting.net/kzu/how-to-transform-t4-templates-on-build-without-installing-a-visual-studio-sdk/ tidak dapat memposting lebih dari itu 2 links :() Saya datang dengan file .targets ini untuk digunakan dengan file proj studio visual.
Ini berguna ketika Anda menggunakan dll-s lain di dalam .tt Anda dan Anda ingin hasilnya berubah karena dll-s sedang berubah.
Bagaimana itu bekerja:
Hapus referensi perakitan dari .tt
Di dalam file proj, gunakan kode ini untuk mengatur transformasi saat dibangun:
Bagian pertama Menempatkan TextTransform.exe
$(IncludeForTransform)
akan sama denganc:\path\to\dll\foo.dll' -r c:\path\to\dll\bar.dll
karena itulah cara untuk menambahkan referensi untuk TextTransform pada baris perintah<_TextTransform Include="$(ProjectDir)**\*.tt" />
ini membuat daftar semua file tt di dalam proyek dan subdirektori<Exec Command="...
menghasilkan baris untuk setiap file .tt yang ditemukan yang terlihat seperti"C:\path\to\Transform.exe" "c:\path\to\my\proj\TransformFile.tt" -r"c:\path\to\foo.dll" -r "c:\path\to\bar.dll"
Satu-satunya yang tersisa untuk dilakukan adalah menambahkan path ke dlls di dalam:
Di sini
<InProject>False</InProject>
menyembunyikan item-item ini dari Tampilan SolusiJadi sekarang Anda harus dapat menghasilkan kode Anda pada build dan perubahan dll-s.
Anda dapat menghapus alat kustom (dari properti di dalam Visual Studio) sehingga VS tidak mencoba untuk mengubah dan gagal total setiap saat. Karena kami menghapus referensi perakitan pada langkah 2
sumber
T4Executer melakukan ini untuk VS2019. Anda bisa menentukan templat untuk diabaikan saat dibangun, dan ada opsi eksekusi setelah pembuatan.
sumber
Anda cukup menginstal Paket NuGet : Clarius.TransformOnBuild
Kemudian, setiap kali Anda mengklik proyek Rebuild (atau Solusi), file .tt Anda akan berjalan
sumber
Di Visual Studio 2017 (mungkin versi berikutnya juga), Anda harus menambahkan ini di acara Pra-bangun:
ps Ubah path ke template Anda jika lokasinya tidak di direktori proyek root.
sumber
Beberapa orang membangun paket nuget untuk ini.
Catatan: Saya mendapatkan kesalahan kompilasi dari TextTemplate.exe dan paket itu (karena paket itu memanggil TextTemplate.exe) tetapi tidak dari Visual Studio. Jadi ternyata perilakunya tidak sama; kepala.
EDIT: Ini akhirnya menjadi masalah saya.
sumber
Inilah acara pra-bangun yang hanya menggunakan Microsoft Tooling dan jalur standar. Ini diuji di vs2019 / netcore3.1.
Ganti "AppDbContext.tt" dengan jalur file relatif proyek Anda:
Microsoft juga memiliki panduan untuk membuat makro seperti "$ (SolutionDirectory)" tersedia di templat dengan menggunakan T4ParameterValues dalam file proyek Anda.
sumber