답변:
응용 프로그램 유형에 관계없이 항상 호출 할 수있는 두 가지 옵션 :
Assembly.GetExecutingAssembly().GetName().Version
경우 윈도우 폼 응용 프로그램을 제품 버전을 위해 특별히 찾고 있다면, 당신은 항상 응용 프로그램을 통해 액세스 할 수 있습니다.
Application.ProductVersion
GetExecutingAssembly
어셈블리 참조에 사용 하는 것이 항상 옵션은 아닙니다. 따라서 개인적으로 기본 어셈블리 또는 어셈블리 버전을 참조 해야하는 프로젝트에서 정적 도우미 클래스를 만드는 것이 유용하다는 것을 알았습니다.
// 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;
}
그런 다음 CoreAssembly.Version
필요에 따라 코드를 깨끗하게 참조 할 수 있습니다 .
ClickOnce
언급 한 버전을 참조하는 경우 Publish
프로젝트 속성 내의 탭에 지정됩니다 (즉, AssemblyVersion 또는 AssemblyFileVersion과 관련이 없음).
HomeController
Razor에서 웹 사이트 어셈블리의 알려진 유형 (예 : 유비쿼터스 MVC)을 참조하는 것입니다 .v@(Assembly.GetAssembly(typeof(MyWebProject.Mvc.Controllers.HomeController)).GetName().Version.ToString(2))
MSDN의 Assembly.GetExecutingAssembly 메서드 는 "getexecutingassembly"메서드에 대한 설명입니다. 성능상의 이유로 디자인 타임에 현재 실행중인 어셈블리를 모르는 경우에만이 메서드를 호출해야합니다.
현재 어셈블리를 나타내는 Assembly 개체를 검색하는 권장 방법 Type.Assembly
은 어셈블리에서 찾은 유형 의 속성 을 사용하는 것 입니다.
다음 예는 다음을 보여줍니다.
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
물론 이것은 도우미 클래스 "public static class CoreAssembly"의 답변과 매우 유사하지만 적어도 한 가지 유형의 실행 어셈블리를 알고있는 경우 도우미 클래스를 반드시 만들어야하는 것은 아니며 시간을 절약 할 수 있습니다.
using System.Reflection;
{
string version = Assembly.GetEntryAssembly().GetName().Version.ToString();
}
GetEntryAssembly
방법은 반환 할 수 null
어셈블리를 관리하는이 관리되지 않는 응용 프로그램에서로드 된 경우. 예를 들어 관리되지 않는 응용 프로그램이 C #으로 작성된 COM 구성 요소의 인스턴스를 만드는 경우 프로세스의 진입 점이 관리되는 어셈블리가 아닌 관리되지 않는 코드이므로 GetEntryAssembly
C # 구성 요소에서 메서드를 호출하면이 반환 null
됩니다.
GetEntryAssembly
(vs GetCallingAssembly
또는 GetExecutingAssembly
)는 참조 라이브러리 내에서 호출 할 때 작동하는 유일한 것으로 보입니다.
마침내 typeof(MyClass).GetTypeInfo().Assembly.GetName().Version
netstandard1.6 앱을 시작했습니다. 다른 제안 된 답변 모두 부분적인 해결책을 제시했습니다. 이것이 내가 필요한 것을 정확히 얻은 유일한 것입니다.
장소 조합에서 제공 :
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
GitVersion 또는 다른 버전 관리 소프트웨어를 통해 버전 관리를 사용하는 경우 선호 될 수 있습니다.
클래스 라이브러리 내에서 이것을 얻으려면 다음을 호출하십시오 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