C# 从AssemblyInfo.cs文件中读取版本号
我正在尝试从AssemblyInfo.cs文件中提取版本号! 我试图使用C# 从AssemblyInfo.cs文件中读取版本号,c#,c#-4.0,C#,C# 4.0,我正在尝试从AssemblyInfo.cs文件中提取版本号! 我试图使用System.Reflection.Assembly.LoadFile(path)但在执行此操作时,我得到一个BadImageFormatException;模块应包含程序集清单。(HRESULT异常:0x80131018)”。所以现在我想,这不是一个可行的方法吗?我应该改用正则表达式吗 我已经阅读了许多关于getExecutionGassembly()的示例,但我确实希望从其他项目获得该版本 澄清:我想从AssemblyI
System.Reflection.Assembly.LoadFile(path)代码>但在执行此操作时,我得到一个BadImageFormatException;模块应包含程序集清单。(HRESULT异常:0x80131018)”。所以现在我想,这不是一个可行的方法吗?我应该改用正则表达式吗
我已经阅读了许多关于getExecutionGassembly()
的示例,但我确实希望从其他项目获得该版本
澄清:我想从AssemblyInfo.cs文件中读取版本信息!而不是编译文件中的。我正在尝试制作一个工具,以便在发布新版本之前更新版本号。您可以在中指定目标程序集路径
听起来好像您正试图在x64环境中加载为x86编译的程序集,反之亦然
确保此代码所在的程序集是为与目标相同的环境构建的,并且您可以通过所阅读的示例获得它。您可以将其作为:
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
希望这有助于 可以继续使用Assembly.GetName().Version,其中程序集可以是类的类型
public class Test
{
public static void Main()
{
Console.WriteLine("Current assembly : " + typeof(Test).Assembly.GetName().Version);
}
}
对于我正在使用的测试应用程序,使用上述代码向我显示以下详细信息:
AssemblyInfo.cs
文件被编译到IL程序集
如果加载该程序集,则可以阅读包含已看到的所有示例的版本。它正在从已编译的程序集文件中读取嵌入的版本信息,编译过程可能会将其覆盖为与AssemblyInfo.cs
然而,听起来您想要的是从AssemblyInfo.cs
文本文件中读取版本号,而不是编译下来
如果是这种情况,你真的只需要使用适合你的项目的格式的正则表达式,或者甚至想出一个简单的约定
这可以简单到
var versionMatch=Regex.Match(File.ReadAllText(文件名),@“AssemblyVersion\s*”(\s*”([0-9\.\*]*?)“\s*”);
if(versionMatch.Success)
{
Console.WriteLine(versionMatch.Groups[1].Value);
}
你必须考虑周围的惯例,因为<代码> 1 .*/COD>是一个有效的版本字符串,它在编译时转化为表格<代码> 1 .nnn.MMM的时间戳值。和nnn
和mmm
部分接近可猜测,但不完全可猜测。本文解释了从AssemblyInfo.cs类读取值的代码
希望有帮助。您正在加载.net程序集,并且程序集是否存在于给定路径上?呵呵,先编译它,然后您可以使用Assembly.Load()。如果你真的想从AssemblyInfo.cs中挖掘它,那么就编写一个文本解析器。不,我不想从AssemblyInfo.cs文件中获取版本信息,根本不想从任何编译过的东西中获取。我只是想知道我是否也可以使用该方法来读取文件,或者它是否仅用于已编译的文件。然后Hans Passant对他的评论死记硬背,您需要解析原始文本。使用[assembly:AssemblyVersion
中断(即,删除了空格)
public class Test
{
public static void Main()
{
Console.WriteLine("Current assembly : " + typeof(Test).Assembly.GetName().Version);
}
}