it-swarm-id.com

Apa praktik terbaik untuk menggunakan Atribut Majelis?

Saya punya solusi dengan beberapa proyek. Saya mencoba untuk mengoptimalkan file AssemblyInfo.cs dengan menautkan satu solusi lebar file info Assembly. Apa praktik terbaik untuk melakukan ini? Atribut mana yang harus dalam file solusi lebar dan mana yang spesifik untuk proyek/Majelis?


Edit: Jika Anda tertarik ada pertanyaan lanjutan Apa perbedaan antara AssemblyVersion, AssemblyFileVersion, dan AssemblyInformationalVersion?

160
Jakub Šturc

Kami menggunakan file global yang disebut GlobalAssemblyInfo.cs dan yang lokal bernama AssemblyInfo.cs. File global berisi atribut berikut:

 [Assembly: AssemblyProduct("Your Product Name")]

 [Assembly: AssemblyCompany("Your Company")]
 [Assembly: AssemblyCopyright("Copyright © 2008 ...")]
 [Assembly: AssemblyTrademark("Your Trademark - if applicable")]

 #if DEBUG
 [Assembly: AssemblyConfiguration("Debug")]
 #else
 [Assembly: AssemblyConfiguration("Release")]
 #endif

 [Assembly: AssemblyVersion("This is set by build process")]
 [Assembly: AssemblyFileVersion("This is set by build process")]

AssemblyInfo.cs lokal berisi atribut berikut:

 [Assembly: AssemblyTitle("Your Assembly title")]
 [Assembly: AssemblyDescription("Your Assembly description")]
 [Assembly: AssemblyCulture("The culture - if not neutral")]

 [Assembly: ComVisible(true/false)]

 // unique id per Assembly
 [Assembly: Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")]

Anda dapat menambahkan GlobalAssemblyInfo.cs menggunakan prosedur berikut:

  • Pilih Tambah/Item Yang Ada ... di menu konteks proyek
  • Pilih GlobalAssemblyInfo.cs
  • Luaskan Tombol Tambah dengan mengeklik panah bawah kecil di sebelah kanan
  • Pilih "Tambah Sebagai Tautan" di daftar drop-down tombol
205
JRoppert

Dalam kasus saya, kami sedang membangun produk yang kami punya solusi Visual Studio, dengan berbagai komponen dalam proyek mereka sendiri. Atribut umum pergi. Dalam solusinya, ada sekitar 35 proyek, dan info Majelis umum (CommonAssemblyInfo.cs), yang memiliki atribut berikut:

[Assembly: AssemblyCompany("Company")]
[Assembly: AssemblyProduct("Product Name")]
[Assembly: AssemblyCopyright("Copyright © 2007 Company")]
[Assembly: AssemblyTrademark("Company")]

//This shows up as Product Version in Windows Explorer
//We make this the same for all files in a particular product version. And increment it globally for all projects.
//We then use this as the Product Version in installers as well (for example built using Wix).
[Assembly: AssemblyInformationalVersion("0.9.2.0")]

Atribut lain seperti AssemblyTitle, AssemblyVersion dll, kami berikan berdasarkan per-Majelis. Saat membangun sebuah Majelis, AssemblyInfo.cs dan CommonAssemblyInfo.cs dibangun di setiap Majelis. Ini memberi kami yang terbaik dari kedua dunia di mana Anda mungkin ingin memiliki beberapa atribut umum untuk semua proyek dan nilai-nilai spesifik untuk beberapa yang lain.

Semoga itu bisa membantu.

19
Krishna

Solusi yang disajikan oleh @JRoppert hampir sama dengan apa yang saya lakukan. Satu-satunya perbedaan adalah bahwa saya meletakkan baris berikut dalam file AssemblyInfo.cs lokal karena mereka dapat bervariasi dengan masing-masing Majelis:

#if DEBUG
[Assembly: AssemblyConfiguration("Debug")]
#else
[Assembly: AssemblyConfiguration("Release")]
#endif
[Assembly: AssemblyVersion("This is set by build process")]
[Assembly: AssemblyFileVersion("This is set by build process")]
[Assembly: CLSCompliant(true)]

Saya juga (umumnya) menggunakan satu info Majelis umum per solusi, dengan asumsi bahwa satu solusi adalah satu lini produk/produk yang dapat dirilis. File info Majelis umum juga memiliki:

[Assembly: AssemblyInformationalVersion("0.9.2.0")]

Yang akan mengatur nilai "ProductVersion" yang ditampilkan oleh Windows Explorer.

13
Scott Dorman

Tugas Komunitas MSBuild berisi tugas kustom bernama AssemblyInfo yang dapat Anda gunakan untuk membuat assemblyinfo.cs Anda. Ini membutuhkan sedikit pengeditan tangan untuk menggunakan file csproj Anda, tetapi bermanfaat.

8
jlew

Menurut pendapat saya menggunakan GlobalAssemblyInfo.cs lebih banyak masalah daripada nilainya, karena Anda perlu memodifikasi setiap file proyek dan ingat untuk memodifikasi setiap proyek baru, sedangkan Anda mendapatkan AssemblyInfo.cs secara default.

Untuk perubahan pada nilai global (mis. Perusahaan, Produk, dll) perubahan biasanya sangat jarang dan mudah diatur, saya tidak berpikir DRY harus menjadi pertimbangan. Jalankan skrip MSBuild berikut (tergantung pada MSBuild Extension Pack ) ketika Anda ingin mengubah nilai secara manual di semua proyek sebagai satu kali:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="UpdateAssemblyInfo" xmlns="http://schemas.Microsoft.com/developer/msbuild/2003">

    <ItemGroup>
        <AllAssemblyInfoFiles Include="..\**\AssemblyInfo.cs" />
    </ItemGroup>

    <Import Project="MSBuild.ExtensionPack.tasks" />

  <Target Name="UpdateAssemblyInfo">
    <Message Text="%(AllAssemblyInfoFiles.FullPath)" />
    <MSBuild.ExtensionPack.Framework.AssemblyInfo 
        AssemblyInfoFiles="@(AllAssemblyInfoFiles)"
        AssemblyCompany="Company"
        AssemblyProduct="Product"
        AssemblyCopyright="Copyright"
        ... etc ...
        />
  </Target>

</Project>
5
Schneider

Untuk berbagi file di antara banyak proyek, Anda dapat menambahkan file yang ada sebagai tautan.

Untuk melakukan ini, tambahkan file yang ada, dan klik "Tambahkan sebagai Tautan" di pemilih file . Add As Link
(sumber: free.fr )

Adapun apa yang harus dimasukkan dalam file bersama, saya akan menyarankan meletakkan hal-hal yang akan dibagikan di seluruh majelis. Hal-hal seperti hak cipta, perusahaan, mungkin versi.

3

Satu hal yang saya anggap berguna adalah untuk menghasilkan elemen AssemblyVersion (dll) dengan menerapkan token-subtitusi pada fase pra-bangun.

Saya menggunakan TortoiseSvn, dan mudah digunakan SubWCRev.exe untuk mengubah templat AssemblyInfo.wcrev menjadi AssemblyInfo.cs. Baris yang relevan dalam template mungkin terlihat seperti ini:

[Assembly: AssemblyVersion("2.3.$WCREV$.$WCMODS?1:0$$WCUNVER?1:0$")]

Elemen ketiga adalah nomor revisi. Saya menggunakan elemen keempat untuk memeriksa saya tidak lupa untuk melakukan file baru atau yang diubah (elemen keempat adalah 00 jika semuanya OK).

Omong-omong, tambahkan AssemblyInfo.wcrev ke kontrol versi Anda dan abaikanAssemblyInfo.cs jika Anda menggunakan ini.

1
John Denniston

Tidak disarankan menggunakan file AseemblyInfo.cs tunggal untuk banyak proyek. File AssemblyInfo termasuk informasi yang mungkin relevan hanya untuk Majelis tertentu. Dua informasi yang paling jelas adalah AssemblyTitle dan AssemblyVersion.

Solusi yang lebih baik mungkin menggunakan file targets, yang ditangani oleh MSBuild, untuk "menyuntikkan" atribut Assembly ke lebih dari satu proyek.

1
SaguiItay