正在读取CoreCLR中的程序集版本信息和自定义特性
本文关键字:信息 自定义 版本 程序集 读取 CoreCLR | 更新日期: 2023-09-27 18:03:31
我想知道如何在新的CoreClR中读取程序集版本信息,或者用代码当前执行的程序集的名称,或者显式地给出程序集的名字,或者最好是某个程序集中的类型(可以静态引用(?
我有如下代码(目前我真的很关心汇编版本(
using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.InteropServices;
public class AssemblyInfo
{
private readonly Assembly assembly;
public AssemblyInfo(Type type)
{
assembly = Assembly.GetAssembly(type);
}
public string Title
{
get { return CustomAttributes<AssemblyTitleAttribute>().Title; }
}
public Version AssemblyVersion
{
get { return assembly.GetName().Version; }
}
public string FileVersion
{
get { return FileVersionInfo.GetVersionInfo(assembly.Location).FileVersion; }
}
private T CustomAttributes<T>() where T: Attribute
{
var customAttributes = assembly.GetCustomAttributes(typeof(T), false);
if(customAttributes.Length > 0)
{
return (T)customAttributes[0];
}
throw new InvalidOperationException();
}
}
使用
var info = new AssemblyInfo(typeof(SomeClassInSomeAssembly));
<编辑:正如对Ramin在其他方面很好的回答所评论的那样,如果这应该奏效,我想知道这里是否还有其他事情发生。我已经通过引用Assembly
得到了一条错误消息,VS 2015 RC不建议添加任何内容。错误消息基本上是Error CS0246 The type or namespace name 'Assembly' could not be found (are you missing a using directive or an assembly reference?) CoreClrConsoleApp1.DNX Core 5.0'CoreClrConsoleApp1'src'CoreClrConsoleApp1
。
我的项目.json是
"frameworks": {
"dnx451": { },
"dnxcore50": {
"dependencies": {
"System.Console": "4.0.0-beta-22816",
"System.Collections": "4.0.10-beta-22816",
"System.Linq": "4.0.0-beta-22816",
"System.Threading": "4.0.10-beta-22816",
"Microsoft.CSharp": "4.0.0-beta-22816",
"System.Runtime.InteropServices": "4.0.20-beta-23019",
"System.Reflection": "4.0.10-beta-23019",
"System.Diagnostics.FileVersionInfo": "4.0.0-beta-22816",
"netfx-Reflector": "1.0.0.10"
<edit:这是我的设置,因为当我创建一个新项目时,Assembly
被识别了。除了继承自object
的两种方法外,还有一种方法Assembly.Load
。我可以使用它来加载程序集,从而获得我想要的版本信息。或者我会这样做,但当我尝试运行应用程序时,它会崩溃,并显示消息System.InvalidOperationException:未能解析目标框架'DNSCore,Version=v5.0'的以下依赖项。这很奇怪,因为我运行了dnu restore
,我获得了成功,但dnx . run
仍然不起作用。我已经尝试了dnvm install -r coreclr latest
(同时使用x86和x64(,还检查了dnvm use
是否选择了框架。
自定义参数代码可以是(在我的头顶上编写(:
private string CustomAttributes<T>() where T : Attribute
{
var customAttribute = assembly.CustomAttributes.Where(a => a.AttributeType == typeof(T)).FirstOrDefault();
if(customAttribute != null) { return (string)customAttribute.ConstructorArguments[0].Value; }
throw new InvalidOperationException();
}
Assembly.GetAssembly(type).GetName().Version
或
Assembly.GetAssembly(typeof(assemblyName)).GetName().Version
或者,如果您想在运行时加载程序集
Assembly.LoadFile(dllPath).GetName().Version