Estou tentando obter a versão do assembly em execução no C # 3.0 usando o seguinte código:
var assemblyFullName = Assembly.GetExecutingAssembly().FullName;
var version = assemblyFullName .Split(',')[1].Split('=')[1];
Existe outra maneira adequada de fazer isso?
c#
.net
.net-assembly
user1
fonte
fonte
System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion
ClickOnce
versão mencionada por @Justin, ela será especificada naPublish
guia dentro das propriedades do projeto (ou seja, não relacionada a AssemblyVersion ou AssemblyFileVersion).HomeController
, por isso, Navalha:v@(Assembly.GetAssembly(typeof(MyWebProject.Mvc.Controllers.HomeController)).GetName().Version.ToString(2))
No MSDN, o Assembly.GetExecutingAssembly Method , é uma observação sobre o método "getexecutingassembly", que por motivos de desempenho, você deve chamar esse método somente quando não souber em tempo de design o assembly que está sendo executado no momento.
A maneira recomendada de recuperar um objeto Assembly que representa o assembly atual é usar a
Type.Assembly
propriedade de um tipo encontrado no assembly.O exemplo a seguir ilustra:
É claro que isso é muito semelhante à resposta da classe auxiliar "classe estática pública CoreAssembly", mas, se você conhece pelo menos um tipo de montagem em execução, não é obrigatório criar uma classe auxiliar e economiza seu tempo.
fonte
Comentários do MSDN http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getentryassembly%28v=vs.110%29.aspx :
O
GetEntryAssembly
método pode retornarnull
quando um assembly gerenciado for carregado a partir de um aplicativo não gerenciado. Por exemplo, se um aplicativo não gerenciado criar uma instância de um componente COM escrito em C #, uma chamada aoGetEntryAssembly
método do componente C # retornaránull
, porque o ponto de entrada do processo era um código não gerenciado, e não um assembly gerenciado.fonte
GetEntryAssembly
(vsGetCallingAssembly
ouGetExecutingAssembly
) parece ser a única coisa que funciona quando chamada de dentro de uma biblioteca de referência.Isso deve fazer:
fonte
Finalmente decidi
typeof(MyClass).GetTypeInfo().Assembly.GetName().Version
por um aplicativo netstandard1.6. Todas as outras respostas propostas apresentaram uma solução parcial. Esta é a única coisa que me deu exatamente o que eu precisava.Originado de uma combinação de lugares:
https://msdn.microsoft.com/en-us/library/x4cw969y(v=vs.110).aspx
https://msdn.microsoft.com/en-us/library/2exyydhb(v=vs.110).aspx
fonte
Product Version
pode ser preferido se você estiver usando controle de versão via GitVersion ou outro software de controle de versão.Para obter isso na sua biblioteca de classes, você pode ligar para
System.Diagnostics.FileVersionInfo.ProductVersion
:fonte