Derleme yürütme sürümünü nasıl edinebilirim?


169

Aşağıdaki kodu kullanarak C # 3.0 yürütme derleme sürümünü almaya çalışıyorum:

var assemblyFullName = Assembly.GetExecutingAssembly().FullName;
var version = assemblyFullName .Split(',')[1].Split('=')[1];

Bunu yapmanın başka uygun bir yolu var mı?

Yanıtlar:


293

İki seçenek ... her zaman çağırabileceğiniz uygulama türünden bağımsız olarak:

Assembly.GetExecutingAssembly().GetName().Version

Bir Windows Forms uygulamasıysa, özellikle ürün sürümünü arıyorsanız uygulama aracılığıyla her zaman erişebilirsiniz.

Application.ProductVersion

Kullanımı GetExecutingAssemblybir montaj referans için her zaman bir seçenek değildir. Bu nedenle, ben şahsen temel derleme veya montaj sürümü başvurmak gerekebilir projelerde statik bir yardımcı sınıf oluşturmak için yararlı buluyorum:

// 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;
}

Sonra temiz CoreAssembly.Versiongerektiği gibi benim kod referans olabilir .


7
ClickOnce ile dağıtılmışsa, kontrol etmelisinizSystem.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion
Justin Morgan

İlginç olan: Gerçek sürümü nerede belirtmeniz gerekir? AssemblyInfo.cs içinde AssemblyVersion ve AssemblyFileVersion belirttim ve
abovemethod

@Zainodis @ Justin ClickOncetarafından belirtilen sürüme başvuruyorsanız, Publishproje özellikleri içindeki sekmede belirtilir (yani AssemblyVersion veya AssemblyFileVersion ile ilgili değildir).
Chris Baxter

@CalgaryCoder yanıt için teşekkürler, ClickOnce ne olduğunu bilmiyorum, ama VS aracılığıyla AssemblyInfo dosyasını düzenlerken ortaya çıktı o aniden oO çalıştı. AssemblyInfo.cas bir metin düzenleyicisinde el ile düzenlenmesi, tüm alanların boş olmasını sağladı. Her iki durumda da, şimdi çözüldü :)
AgentKnopf

7
Lansman bağlamı nedeniyle bunun ASP.NET MVC uygulamalarında çalışmadığını belirtmek gerekir. Bir geçici çözüm, web sitesi derlemenizde bilinen bir türe, örneğin her yerde bulunan MVC'ye başvurmaktır HomeController, bu nedenle Razor'da:v@(Assembly.GetAssembly(typeof(MyWebProject.Mvc.Controllers.HomeController)).GetName().Version.ToString(2))
James McCormack

38

MSDN'de, Assembly.GetExecutingAssembly Yöntemi , "getexecutingassembly" yöntemi hakkında bir açıklamadır, bu nedenle performans nedenleriyle bu yöntemi yalnızca tasarım sırasında hangi derlemenin yürütülmekte olduğunu bilmediğinizde çağırmalısınız.

Geçerli derlemeyi temsil eden bir Assembly nesnesini almanın önerilen yolu, derlemede Type.Assemblybulunan bir türün özelliğini kullanmaktır .

Aşağıdaki örnek göstermektedir:

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

Tabii ki bu yardımcı sınıf "ortak statik sınıf CoreAssembly" ile çok benzer, ama, en az bir tür yürütme montajı biliyorsanız, bir yardımcı sınıf oluşturmak zorunlu değildir ve zaman kazandırır.


19
using System.Reflection;
{
    string version = Assembly.GetEntryAssembly().GetName().Version.ToString();
}

MSDN http://msdn.microsoft.com/tr-tr/library/system.reflection.assembly.getentryassembly%28v=vs.110%29.aspx adresinden açıklamalar :

GetEntryAssemblyYöntem dönebilirsiniz nullmontaj yönetilen bir yönetilmeyen bir uygulamadan yüklendiğinde. Örneğin, yönetilmeyen bir uygulama C # ile yazılmış bir COM bileşeninin bir örneğini oluşturursa , işlemin giriş noktası yönetilen bir derleme yerine yönetilmeyen kod olduğundan GetEntryAssemblyC # bileşeninden yönteme yapılan bir çağrı döner null.


2
+1. GetEntryAssembly(vs GetCallingAssemblyor GetExecutingAssembly), bir referans kitaplığı içinden çağrıldığında çalışan tek şey gibi görünüyor.
drzaus

6

Bu şunları yapmalıdır:

Assembly assem = Assembly.GetExecutingAssembly();
AssemblyName aName = assem.GetName();
return aName.Version.ToString();

5
bu 3 satır 1 olabilir: Assembly.GetExecutingAssembly (). GetName (). Version.ToString (); .............
Alexandre


1

Product Version GitVersion veya başka bir sürüm yazılımıyla sürüm oluşturmayı kullanıyorsanız tercih edilebilir.

Bunu sınıf kitaplığınızdan almak için arayabilirsiniz System.Diagnostics.FileVersionInfo.ProductVersion:

using System.Diagnostics;
using System.Reflection;

//...

var assemblyLocation = Assembly.GetExecutingAssembly().Location;
var productVersion = FileVersionInfo.GetVersionInfo(assemblyLocation).ProductVersion

resim açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.