How can I get the assembly file version
Solution 1
See my comment above asking for clarification on what you really want. Hopefully this is it:
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
System.Diagnostics.FileVersionInfo fvi = System.Diagnostics.FileVersionInfo.GetVersionInfo(assembly.Location);
string version = fvi.FileVersion;
Solution 2
There are three versions: assembly, file, and product. They are used by different features and take on different default values if you don't explicit specify them.
string assemblyVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString();
string assemblyVersion = Assembly.LoadFile("your assembly file").GetName().Version.ToString();
string fileVersion = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).FileVersion;
string productVersion = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).ProductVersion;
Solution 3
When I want to access the application file version (what is set in Assembly Information -> File version), say to set a label's text to it on form load to display the version, I have just used
versionlabel.Text = "Version " + Application.ProductVersion;
This approach requires a reference to System.Windows.Forms
.
Solution 4
UPDATE: As mentioned by Richard Grimes in my cited post, @Iain and @Dmitry Lobanov, my answer is right in theory but wrong in practice.
As I should have remembered from countless books, etc., while one sets these properties using the [assembly: XXXAttribute]
, they get highjacked by the compiler and placed into the VERSIONINFO
resource.
For the above reason, you need to use the approach in @Xiaofu's answer as the attributes are stripped after the signal has been extracted from them.
public static string GetProductVersion() { var attribute = (AssemblyVersionAttribute)Assembly .GetExecutingAssembly() .GetCustomAttributes( typeof(AssemblyVersionAttribute), true ) .Single(); return attribute.InformationalVersion; }
(From http://bytes.com/groups/net/420417-assemblyversionattribute - as noted there, if you're looking for a different attribute, substitute that into the above)
Solution 5
Use this:
((AssemblyFileVersionAttribute)Attribute.GetCustomAttribute(
Assembly.GetExecutingAssembly(),
typeof(AssemblyFileVersionAttribute), false)
).Version;
Or this:
new Version(System.Windows.Forms.Application.ProductVersion);
Enyra
Updated on October 20, 2021Comments
-
Enyra over 2 years
In
AssemblyInfo
there are two assembly versions:AssemblyVersion
: Specify the version of the assembly being attributed.AssemblyFileVersion
: Instructs a compiler to use a specific version number for the Win32 file version resource. The Win32 file version is not required to be the same as the assembly's version number.
I can get the
Assembly Version
with the following line of code:Version version = Assembly.GetEntryAssembly().GetName().Version;
But how can I get the
Assembly File Version
?-
Xiaofu almost 15 yearsWhat do you mean by "assembly file version" as opposed to "assembly version"? Can you give an example?
-
rory.ap over 7 years@Xiaofu -- "Assembly Version" is what .NET uses internally. "Assembly File Version" is what shows when you right-click on a file and go to "properties" then the "details" tab. They are not the same.
-
Kyle Delaney over 6 yearsI've found that the assembly version is what's used when determining the user.config location in AppData.
-
Iain over 14 yearsHey Ruben, 2 notes. First, the question asked for AssemblyFileVersion not AssemblyVersion. Second, Assembly.GetExecutingAssembly().GetCustomAttributes( typeof(AssemblyVersionAttribute), true ) returns an array of length 0. I think this is because AssemblyVersionAttribute is not a custom attribute.
-
Raymond over 14 yearsRe the first point, thats why I said "if you're lookign for a different attribute, substitute that into the above" (IIRC I didnt try it out). Re the second, that does seem plausible but dont have time to dig in...
-
Markus about 12 years@Xiaofu: Is there any way to get the version numbers from a AssemblyInfo.cs file instead?
-
Doguhan Uluca over 11 yearsOne problem with this code is that, it'll actually return 1.0.*.* if you haven't specified Build and Revision numbers. AssemblyName.GetAssemblyName(assembly.Location).Version.ToString(); will get you the 'compiled' version number - which should be the same as FileVersion, if you're setting both versions the same way.
-
Dmitrii Lobanov about 11 yearsYeah, you actually can't get AssemblyVersion attribute via .GetCustomAttribute(), assembly version can be retrieved via
AssemblyName.Version
property only. But with every other attribute it's the right way to do it -
Raymond about 11 years@DmitryLobanov and Iain Thanks for the prompts. I hope the edit covers it sufficiently to make the answer worth keeping instead of deleting - let me know!
-
BradleyDotNET almost 10 yearsNote that this requires a reference to System.Windows.Forms, and so might not be suitable for all applications.
-
JMD over 8 yearsFor when that blog post disappears some day, here it is boiled down for reference:
string assemblyVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(); string assemblyVersion = Assembly.LoadFile('your assembly file').GetName().Version.ToString(); string fileVersion = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).FileVersion; string productVersion = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).ProductVersion;
-
Nyerguds over 8 yearsUnfortunately, that's a string. Not ideal if you want to format it yourself to a more simple "v1.08" kind of format. Much handier if you actually get the version object to get the sub-components from as integers.
-
Nyerguds over 8 yearsNice, but I much rather use the FileMajorPart / FileMinorPart / FileBuildPart / FilePrivatePart properties to get the integers rather than the preformatted FileVersion string. No one likes to see the "1.9.0.0" kind of thing in the title bar of a program.
-
Nyerguds over 8 years@DoguhanUluca They're two different things. That'll give you the assembly version, not the file version. "If you're setting both versions the same way" is a workaround, not a solution.
-
Jesse Chisholm over 7 yearsAnd for those wanting to specify these in the AssemblyInfo.cs file, for assemblyVersion use (with whatever numbers you want) ===
[assembly: AssemblyVersion("2.0.*")]
for fileVersion use ===[assembly: AssemblyFileVersion("2.0.*")]
and for productVersion use ===[assembly: AssemblyInformationalVersion("2.0.*")]
The last one may take string suffix forSemVer
compatibility:[assembly: AssemblyInformationalVersion("2.0.0-alpha")]
-
Jesse Chisholm over 7 yearsAddendum:
AssemblyFileVersion
may not use the*
suffix notation. :( It needs all four numbers.[assembly: AssemblyFileVersion("2.0.0.1")]
-
dario_ramos over 7 yearsAlso, this picks up AssemblyFileVersion from AssemblyInfo, not AssemblyVersion, so watch out
-
jrh over 6 yearsCould a high rep user edit this answer to make it more clear that this is for Windows Forms only?
-
Kyle Delaney over 6 yearsDoes
FileVersionInfo
only havestring
properties and noVersion
properties? -
huseyin tugrul buyukisik over 6 yearsThis is good. I'm using it in a winforms project and it is working.
-
Yitzchak almost 6 yearsWhy do you use Assembly.GetExecutingAssembly()? That returns the current dll, but if I want the main executable I'll call: Assembly.GetEntryAssembly()
-
quetzalcoatl almost 6 years@Yitzchak:
Assembly.GetEntryAssembly()
returns NULL for example in context of Office Add-ins, and also in many other cases. Also, if you think about addins/plugins - EntryAssembly is the host application, and most often you want the version of YourCode(TM) :) Aside from that, it's worth adding to this answer thatassembly.Location
used in the answer can be null as well (i.e. first random case googled out: github.com/Azure/azure-functions-host/issues/1233) and that probably happens even more often than having null entry-assembly. -
David Refoua over 5 yearsThis is exactly what I was looking for, thanks for the answer!
-
Vasya Milovidov over 4 yearsI used
AssemblyInformationalVersionAttribute
instead ofAssemblyVersionAttribute
on .net core 3.1 -
Momoro about 4 yearsIs there a way to set the file version, instead of just getting it?
-
AH. almost 3 yearsNot working. Just returns the AssemblyVersion.
-
jebbie almost 3 yearswow, unbelievable how hard this is in c#.. in electron i just execute "appVersion: app.getVersion()"... yiiiikes... 🤮