从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编译的程序集,反之亦然。
确保此代码所在的程序集是针对与目标相同的环境构建的,您可以使用您读过的示例来获取它。
- AutoMapper:将接口映射到抽象类 – 这可能吗?
- 在另一个类中更改先决条件属性时,为依赖属性引发PropertyChanged?
- 是否有.NET函数来validation类名?
- KeyedCollection和d:DataContext设计错误
- .Net AssemblyName.version构建与修订
- arrays的反序列化不支持Type
- 如何清除System.Windows.Forms.WebBrowser会话数据?
- entity framework6.1.1和Npgsql 2.2.3:找不到兼容的entity framework数据库提供程序
- Excel中的CustomTaskPane不会出现在新工作簿中