Próbuję uzyskać wersję zestawu wykonującego w C # 3.0 przy użyciu następującego kodu:
var assemblyFullName = Assembly.GetExecutingAssembly().FullName;
var version = assemblyFullName .Split(',')[1].Split('=')[1];
Czy można to zrobić w inny właściwy sposób?
c#
.net
.net-assembly
użytkownik1
źródło
źródło
System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion
ClickOnce
wersji wspomnianej przez @Justin, jest ona określona naPublish
karcie we właściwościach projektu (tj. Niezwiązana z AssemblyVersion lub AssemblyFileVersion).HomeController
, więc w Razor:v@(Assembly.GetAssembly(typeof(MyWebProject.Mvc.Controllers.HomeController)).GetName().Version.ToString(2))
W MSDN metoda Assembly.GetExecutingAssembly jest uwagą dotyczącą metody „getexecutingassembly”, że ze względu na wydajność powinieneś wywoływać tę metodę tylko wtedy, gdy nie wiesz w czasie projektowania, jaki zespół aktualnie wykonuje.
Zalecanym sposobem pobrania obiektu Assembly, który reprezentuje bieżący zestaw, jest użycie
Type.Assembly
właściwości typu znalezionego w zestawie.Poniższy przykład ilustruje:
Oczywiście jest to bardzo podobne do odpowiedzi z klasą pomocniczą „publiczna statyczna klasa CoreAssembly”, ale jeśli znasz przynajmniej jeden typ wykonywanego asemblera, tworzenie klasy pomocniczej nie jest obowiązkowe i oszczędza to Twój czas.
źródło
Uwagi z MSDN http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getentryassembly%28v=vs.110%29.aspx :
GetEntryAssembly
Metoda może powrócićnull
, gdy udało montaż został załadowany z niezarządzanych aplikacji. Na przykład, jeśli niezarządzana aplikacja tworzy wystąpienie składnika COM napisane w języku C #, wywołanieGetEntryAssembly
metody ze składnika C # zostanie zwróconenull
, ponieważ punktem wejścia dla procesu był kod niezarządzany, a nie zarządzany zestaw.źródło
GetEntryAssembly
(vsGetCallingAssembly
lubGetExecutingAssembly
) wydaje się być jedyną rzeczą, która działa, gdy jest wywoływana z biblioteki referencyjnej.To powinno wystarczyć:
źródło
W końcu się zdecydowałem
typeof(MyClass).GetTypeInfo().Assembly.GetName().Version
na aplikację netstandard1.6. Wszystkie inne proponowane odpowiedzi przedstawiały częściowe rozwiązanie. To jedyna rzecz, która dała mi dokładnie to, czego potrzebowałem.Pochodzi z różnych miejsc:
https://msdn.microsoft.com/en-us/library/x4cw969y(v=vs.110).aspx
https://msdn.microsoft.com/en-us/library/2exyydhb(v=vs.110).aspx
źródło
Product Version
może być preferowane, jeśli używasz wersjonowania przez GitVersion lub inne oprogramowanie do wersjonowania.Aby uzyskać to z biblioteki zajęć, możesz zadzwonić
System.Diagnostics.FileVersionInfo.ProductVersion
:źródło