从AssemblyInfo.cs文件中读取版本号

我正在尝试从AssemblyInfo.cs文件中提取版本号! 我正在尝试使用System.Reflection.Assembly.LoadFile(path); 但是这样做的时候我得到一个BadImageFormatException; “该模块应该包含一个程序集清单。(HRESULTexception:0x80131018)” 。 所以现在我更加聪明,这是不是一种可行的方式呢? 我应该使用RegEx吗?

我已经阅读了许多GetExecutingAssembly()例子,但我确实希望从其他项目中获取该版本。

澄清:我想从AssemblyInfo.cs文件中读取版本信息! 而不是来自编译的文件。 在我发布新版本之前,我正在尝试创建一个工具来更新我的版本号。

你可以获得汇编版本而不加载它:

 using System.Reflection; using System.IO; ... // Get assembly AssemblyName currentAssembly = AssemblyName.GetAssemblyName(path); Version assemblyVersion = currentAssembly.Version; 

编辑 :如果你想读取文件,那么你可以这样做:

 string path = @"d:\AssemblyInfo.cs"; if (File.Exists(path)) { // Open the file to read from. string[] readText = File.ReadAllLines(path); var versionInfoLines = readText.Where(t => t.Contains("[assembly: AssemblyVersion")); foreach (string item in versionInfoLines) { string version = item.Substring(item.IndexOf('(') + 2, item.LastIndexOf(')') - item.IndexOf('(') - 3); //Console.WriteLine(Regex.Replace(version, @"\P{S}", string.Empty)); Console.WriteLine(version); } } 

//输出

 1.0.* 1.0.0.0 

希望这有帮助……

您可以在AssemblyName.GetAssemblyName中指定目标程序集路径

 AssemblyName.GetAssemblyName("ProjectB.exe").Version 

听起来你正试图在x64环境中加载为x86编译的程序集,反之亦然。

确保此代码所在的程序集是针对与目标相同的环境构建的,您可以使用您读过的示例来获取它。