Secara terprogram Menghasilkan File .Target MSBuild Kustom

Saya memiliki perpustakaan tugas MSBuild khusus yang saya edit secara teratur, memfaktorkan ulang kode, menambahkan tugas baru dan menghapus tugas lama yang sudah tidak berfungsi. Sulit sekali mengedit file .Targets untuk menyinkronkan dengan apa yang sebenarnya ada di perpustakaan, jadi saya bertanya-tanya, apa cara terbaik untuk mengotomatiskannya?

Saya ingin solusi yang berjalan setelah perpustakaan berhasil dibangun, sehingga saya tidak mendapatkan kesalahan buruk saat mencoba memanggil tugas khusus saya dari proyek lain.

Saya punya beberapa ide tentang cara melakukan ini, tapi saya ingin melihat ide orang lain terlebih dahulu. :-)


person Sameer Singh    schedule 22.11.2010    source sumber


Jawaban (2)


Anda mungkin memiliki file .targets terpisah yang hanya berisi referensi ke tugas Anda. Dari satu sisi, tautkan ke file .targets utama Anda. Dari timpa yang lain, ia menjalankan beberapa tugas khusus "master" lainnya di AfterBuild target solusi tugas Anda. Tugas "master" ini akan membuat semua kelas mengimplementasikan ITask dari perakitan yang baru dibuat dan menuliskannya ke file .targets.
Tapi sejujurnya, ini tampak berlebihan bagi saya. Anda tetap harus mengedit file .targets untuk dapat menggunakan tugas baru Anda. Menulis tugas "utama" dan mendukungnya mungkin memerlukan lebih banyak waktu.

Saya mungkin berfantasi tentang beberapa solusi otomatis, namun pertimbangan "waktu yang diinvestasikan"/"waktu yang dihemat karena otomatisasi" menghentikan imajinasi saya. =)

person alpha-mouse    schedule 22.11.2010
comment
Saya telah menemukan solusi menggunakan PowerShell, refleksi perakitan, dan XML. Saya menjalankan skrip PowerShell di target proyek AfterBuild, dan file .Targets dibuat seperti yang diharapkan. Namun menurut saya ini bukan solusi yang elegan... Adakah pemikiran tentang ini, atau alternatifnya? =) - person Sameer Singh; 23.11.2010
comment
Anda dapat memindahkan .Target yang Anda buat dengan Powershell dan refleksinya di jalur (jaringan) yang dapat diakses oleh pengembang mana pun. Kemudian, dalam skrip pembangunan proyek Anda, Anda selalu mereferensikan file .Targets master Anda. Mengenai penggunaan Powershell dan refleksi, ini kedengarannya tidak janggal bagi saya. Anda juga dapat menggunakan komentar xml daripada refleksi tetapi ini memerlukan lebih banyak usaha. - person Benjamin Baumann; 24.11.2010

Ya, saya telah menemukan cara yang lebih baik untuk mencapai hal ini dengan menggunakan tugas TaskSchema Tugas Komunitas MSBuild:

<TaskSchema Assemblies="@(MyTaskAssembly)" 
            OutputPath="%(MyTaskAssembly.RootDir)%(MyTaskAssembly.Directory)" 
            CreateTaskList="true"
            IgnoreMsBuildSchema="true"
            Includes="Microsoft.Build.Commontypes.xsd"/>

Saya cukup memastikan bahwa saya telah mengimpor file MSBuild.Community.Tasks.Targets, membuat ItemGroup bernama MyTaskAssembly yang berisi semua kumpulan tugas saya (shocker), lalu menempelkan panggilan tugas di atas di AfterBuild target proyek saya. Manis! :)

person Sameer Singh    schedule 28.05.2012