Nov*_*eMe 64 version c#-4.0 fileversioninfo
我使用.Net 3.5/4.0和C#中的代码.
我想在我的C:驱动器上获取exe文件的版本号.
例如,路径为:c:\ Program\demo.exe.如果demo.exe的版本号是1.0.
我如何使用此路径获取版本号?
Ree*_*sey 129
您可以使用FileVersionInfo.ProductVersion从路径中获取此内容.
var versionInfo = FileVersionInfo.GetVersionInfo(pathToExe);
string version = versionInfo.ProductVersion; // Will typically return "1.0.0" in your case
Run Code Online (Sandbox Code Playgroud)
Phi*_*ilm 29
更新和现代化2018(例如C#6的字符串插值):
接受的答案部分不正确(ProductVersion通常不会返回三部分版本)并且有点误导:
这是一个更完整的答案.为了使主要文本不那么冗长,我将它分成一个简短的(呃)摘要,这可能对很多人来说是"足够的".你没有义务阅读详细的第二部分,所以请不要tl;博士:-)
简短的摘要:
每个文件都有不同的版本(汇编版本,文件版本,产品版本),但通常你会将它们全部等于在文件级别上没有得到"版本地狱"(它会提前到来).
文件版本(在资源管理器中可见并在设置/安装中使用)是,我认为最重要的是打扰.
要实现此目的,只需在AssemblyInfo.cs文件中注释掉fileversion,如下所示.这确保了一个文件的三个可能的不同版本是相同的!
[assembly:AssemblyVersion("1.1.2.")]
// [assembly:AssemblyFileVersion("1.1.2. ")]
例如,对于语义版本控制,您希望仅获得可能的4个版本部分:
为每个Visual Studio构建进行自动构建计数很有用.但是这种构建计数对于告诉您的客户(内部或外部)并不总是有用的.因此,为了向Windows提及文件版本,在标题对话框中,我建议仅显示v1.2.3的三个部分(当然还有语义版本控制):
using System.Diagnostics;
...
var versInfo= FileVersionInfo.GetVersionInfo(pathToVersionedFile);
string fileVersionFull = versInfo.FileVersion; // No difference here for versinfo.ProductVersion if recommendation in AssemblyInfo.cs is followed
string fileVersionSemantic = $"V{versInfo.FileMajorPart}.{versInfo.FileMinorPart}.{versInfo.FileBuildPart}";
string fileVersionFull2 = $"V{versInfo.FileMajorPart}.{versInfo.FileMinorPart}.{versInfo.FileBuildPart}.{versInfo.FilePrivatePart}";
Run Code Online (Sandbox Code Playgroud)
FileVersionFull2只显示了如何处理所有4个部分,除了"V"它包含与FileVersionFull相同的部分.
细节:
首先是关于如何获取和设置三个版本的备忘单:
文件版本: [assembly:AssemblyFileVersion(..)] => System.Diagnostics.FileVersionInfo.FileVersion
产品版本: [assembly:AssemblyInformationalVersion(..)] => System.Diagnostics.FileVersionInfo.ProductVersion
程序集版本: [assembly:AssemblyVersion(..)] => System.Reflection.Assembly.Version
特别是违约可能会令人困惑.建议使用SO链接了解详细信息:FileVersionInfo和AssemblyInfo
EntryAssembly与ExecutingAssembly
为了充分考虑获取正在运行的应用程序版本的每个案例,请在别处搜索更多详细信息,例如:在
哪里获取程序集位置更好,GetAssembly().Location或GetExecutingAssembly().位置
特别是,可以如果应该使用EntryAssembly或ExecutingAssembly,那就太混乱了.他们都有优势和警告.如果你有以下代码与.exe不在同一个程序集中,例如在帮助程序集中,事情会变得更复杂.通常,您将使用EntryAssembly,以获取.exe的版本.
但是:对于Visual Studio中的单元测试来测试并行.exe项目中的例程,GetEntryAssembly()不起作用(我的环境:NUnit,VS2017).但GetExecutingAssembly()至少不会崩溃,只有在单元测试期间才能获得测试项目的汇编版本.对我来说足够好.可能有些情况并不那么简单.
如果需要,您可以将声明省略为静态,这样就可以在一个程序中获得多个不同程序集的版本.
public static class AppInfo
{
public static string FullAssemblyName { get; }
..
static AppInfo()
{
Assembly thisAssembly = null;
try
{
thisAssembly = Assembly.GetEntryAssembly();
}
finally
{
if (thisAssembly is null)
thisAssembly = Assembly.GetExecutingAssembly();
}
FullAssemblyName = thisAssembly.Location;
var versInfo = FileVersionInfo.GetVersionInfo(FullAssemblyName);
..
}
}
Run Code Online (Sandbox Code Playgroud)
产品版本与文件版本:文件的
ProductVersion也显示在Windows资源管理器中.我建议在最"客户可见"的文件(主要是应用程序的主.exe)中最大限度地区分ProductVersion和FileVersion.但它当然可以选择区分"主要"应用程序的每个文件,让它们全部拥有客户看到的所有"营销"ProductVersion.但经验表明,尝试同步技术版本和营销版本既不必要也不便宜.混乱并没有真正减少,成本增加.因此,第一部分中描述的解决方案应该主要进行.
历史:程序集版本与文件版本: 具有不同版本的一个原因还在于,一个.NET程序集最初可以由多个文件(模块)组成 - 理论上.Visual Studio不使用它,很少在其他地方使用.这可能是提供区分这两个版本的可能性的一个历史原因.从技术上讲,程序集版本与.NET相关的版本控制相关,如GAC和并排版本,文件版本与经典设置更相关,例如在更新期间覆盖或共享文件.
Sop*_*are 19
在接受的答案中,参考"pathToExe".
可以按如下方式检索和使用此路径:
var assembly = Assembly.GetExecutingAssembly();
var fvi = FileVersionInfo.GetVersionInfo(assembly.Location);
var version = fvi.FileVersion; // or fvi.ProductVersion
Run Code Online (Sandbox Code Playgroud)
希望这可以节省一些人做一些不必要的额外步骤.
小智 7
Program你的班级名称在哪里:
Console.WriteLine("Version = " + typeof(Program).Assembly.GetName().Version.ToString()) ;
Run Code Online (Sandbox Code Playgroud)
我不确定这是否是您要寻找的东西,但是:
http://www.daniweb.com/software-development/csharp/threads/276174/c-code-to-get-dll-version
它说,
// Get the file version info for the notepad.
FileVersionInfo myFileVersionInfo = FileVersionInfo.GetVersionInfo(Environment.SystemDirectory + "\\notepad.exe");
// Print the file name and version number.
Console.WriteLine("File: " + myFileVersionInfo.FileDescription + '\n' + "Version number: " + myFileVersionInfo.FileVersion);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
76181 次 |
| 最近记录: |