Jawaban:
Dua opsi ... apa pun jenis aplikasinya, Anda selalu dapat meminta:
Assembly.GetExecutingAssembly().GetName().Version
Jika aplikasi Windows Forms , Anda selalu dapat mengakses melalui aplikasi jika mencari versi produk khusus.
Application.ProductVersion
Menggunakan GetExecutingAssembly
referensi rakitan tidak selalu merupakan pilihan. Karena itu, saya pribadi merasa berguna untuk membuat kelas pembantu statis di proyek-proyek di mana saya mungkin perlu merujuk ke versi perakitan atau perakitan yang mendasarinya:
// A sample assembly reference class that would exist in the `Core` project.
public static class CoreAssembly
{
public static readonly Assembly Reference = typeof(CoreAssembly).Assembly;
public static readonly Version Version = Reference.GetName().Version;
}
Maka saya bisa dengan bersih referensi CoreAssembly.Version
dalam kode saya sesuai kebutuhan.
ClickOnce
versi yang disebutkan oleh @Justin, itu ditentukan pada Publish
tab di dalam properti proyek (yaitu, tidak terkait dengan AssemblyVersion atau AssemblyFileVersion).
HomeController
, jadi dalam Razor:v@(Assembly.GetAssembly(typeof(MyWebProject.Mvc.Controllers.HomeController)).GetName().Version.ToString(2))
Di MSDN, Assembly.GetExecutingAssembly Method , adalah komentar tentang metode "getexecutingassembly", bahwa untuk alasan kinerja, Anda harus memanggil metode ini hanya ketika Anda tidak tahu pada waktu desain apa yang sedang dieksekusi perakitan saat ini.
Cara yang disarankan untuk mengambil objek Majelis yang mewakili perakitan saat ini adalah dengan menggunakan Type.Assembly
properti tipe yang ditemukan dalam perakitan.
Contoh berikut menggambarkan:
using System;
using System.Reflection;
public class Example
{
public static void Main()
{
Console.WriteLine("The version of the currently executing assembly is: {0}",
typeof(Example).Assembly.GetName().Version);
}
}
/* This example produces output similar to the following:
The version of the currently executing assembly is: 1.1.0.0
Tentu saja ini sangat mirip dengan jawaban dengan kelas helper "public static class CoreAssembly", tetapi, jika Anda tahu setidaknya satu jenis rakitan pelaksana, tidak wajib membuat kelas helper, dan menghemat waktu Anda.
using System.Reflection;
{
string version = Assembly.GetEntryAssembly().GetName().Version.ToString();
}
Keterangan dari MSDN http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getentryassembly%28v=vs.110%29.aspx :
The GetEntryAssembly
Metode dapat kembali null
ketika berhasil perakitan telah dimuat dari aplikasi unmanaged. Misalnya, jika aplikasi yang tidak dikelola membuat turunan dari komponen COM yang ditulis dalam C #, panggilan ke GetEntryAssembly
metode dari komponen C # kembali null
, karena titik masuk untuk proses adalah kode yang tidak dikelola daripada rakitan yang dikelola.
GetEntryAssembly
(vs GetCallingAssembly
atau GetExecutingAssembly
) tampaknya menjadi satu-satunya hal yang berfungsi saat dipanggil dari dalam pustaka referensi.
Ini harus dilakukan:
Assembly assem = Assembly.GetExecutingAssembly();
AssemblyName aName = assem.GetName();
return aName.Version.ToString();
Saya akhirnya memilih typeof(MyClass).GetTypeInfo().Assembly.GetName().Version
aplikasi netstandard1.6. Semua jawaban yang diajukan lainnya memberikan solusi parsial. Ini adalah satu-satunya hal yang membuat saya tepat seperti yang saya butuhkan.
Bersumber dari kombinasi tempat:
https://msdn.microsoft.com/en-us/library/x4cw969y(v=vs.110).aspx
https://msdn.microsoft.com/en-us/library/2exyydhb(v=vs.110).aspx
Product Version
mungkin lebih disukai jika Anda menggunakan versi melalui GitVersion atau perangkat lunak versi lain.
Untuk mendapatkan ini dari dalam perpustakaan kelas Anda, Anda dapat menelepon System.Diagnostics.FileVersionInfo.ProductVersion
:
using System.Diagnostics;
using System.Reflection;
//...
var assemblyLocation = Assembly.GetExecutingAssembly().Location;
var productVersion = FileVersionInfo.GetVersionInfo(assemblyLocation).ProductVersion
System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion