我正在尝试从AssemblyInfo.cs文件中提取版本号!
我正在尝试使用System.Reflection.Assembly.LoadFile(path);
但是在执行此操作时,我得到了BadImageFormatException; “模块应该包含一个程序集清单。(HRESULT异常:0x80131018)”。所以现在我觉得,这是不是一种可行的方法呢?我应该使用RegEx吗?
我已经阅读了GetExecutingAssembly()
的许多示例,但我确实希望从其他项目中获取该版本。
澄清:我想阅读 AssemblyInfo.cs 文件中的版本信息!编译文件中的不。我正在尝试创建一个工具来更新我的版本号,然后再发布新版本。
答案 0 :(得分:8)
您可以get Assembly version without loading将其作为:
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
希望这有帮助...
答案 1 :(得分:5)
您可以在AssemblyName.GetAssemblyName
中指定目标装配路径AssemblyName.GetAssemblyName("ProjectB.exe").Version
答案 2 :(得分:1)
AssemblyInfo.cs
文件被编译为IL程序集。
如果加载该程序集,则可以阅读包含所有示例的版本。它正在从已编译的程序集文件中读取嵌入式版本信息,并且在编译过程中可能会将其覆盖为与AssemblyInfo.cs
但是,听起来您想要的是从AssemblyInfo.cs
文本文件中读取版本号,而不进行编译。
如果是这种情况,您实际上只需要使用适合您项目的格式的正则表达式,甚至想出一个使它简单的约定即可。
这可能很简单
var versionMatch = Regex.Match(File.ReadAllText(filename), @"AssemblyVersion\s*\(\s*""([0-9\.\*]*?)""\s*\)");
if (versionMatch.Success)
{
Console.WriteLine(versionMatch.Groups[1].Value);
}
由于1.0.*
是一个有效的版本字符串,在编译时会转换为1.0.nnn.mmm
格式的时间戳值,而nnn
和{{ 1}}部分几乎可以猜测,但不能精确猜测。
答案 3 :(得分:0)
听起来你正试图在x64环境中加载为x86编译的程序集,反之亦然。
确保此代码所在的程序集是针对与目标相同的环境构建的,您可以使用您读过的示例来获取它。
答案 4 :(得分:0)
您可以继续使用Assembly.GetName()。Version,其中您的程序集可以是您的类的类型
public class Test
{
public static void Main()
{
Console.WriteLine("Current assembly : " + typeof(Test).Assembly.GetName().Version);
}
}
对于我正在开发的测试应用程序,使用上面的代码向我显示以下详细信息:
答案 5 :(得分:0)
这是一篇文章,解释了从AssemblyInfo.cs类读取值的代码。
http://lancelarsen.com/reading-values-from-assemblyinfo-cs/
希望有帮助。