企业网站管理系统模版源码,包装设计制作流程有哪些,网上怎么样挣钱,深圳市建设厅运行时获取类库信息Intro在我们向别的开源项目提 issue 的时候#xff0c;可能经常会遇到别人会让我们提供使用的版本信息#xff0c;如果别的开源项目类库集成了 source link#xff0c;我们可以从程序集信息中获取到版本以及对应的 commit 信息#xff0c;这样我们就可以…运行时获取类库信息Intro在我们向别的开源项目提 issue 的时候可能经常会遇到别人会让我们提供使用的版本信息如果别的开源项目类库集成了 source link我们可以从程序集信息中获取到版本以及对应的 commit 信息这样我们就可以直接找到对应版本的 commit 对应的代码版本这样也就可以更加方便的了解对应源码了那我们是不是也可以在运行时获取类库的 commit 信息呢答案是肯定的Sample我们集成了 source link 的话在程序集信息中是可以获取到 git 相关的信息 source link 的单步调试也是基于此来扩展的调试时下载对应源文件的这里是我集成了 source link 的一个开源项目反编译 dll 的时候可以看到一些 git 相关的信息AssemblyInfomationVersion 中的信息由两部分组成一部分是原始的 package 版本号另外一部分是对应 commit hash我们结合 RepositoryUrl 就可以很方便的找到对应的代码了RepositoryUrl 则是在一个 AssemblyMetadata 的 attribute 中Implement我们可以定义一个 model 来表示程序集的信息这样以后扩展起来也会更加的方便示例如下public class LibraryInfo
{public required Version LibraryVersion { get; init; }public required string LibraryHash { get; init; }public required string RepositoryUrl { get; init; }
}然后通过反射从程序集中获取程序集的信息public static LibraryInfo GetLibraryInfo(Assembly assembly)
{Guard.NotNull(assembly);var assemblyInformation assembly.GetCustomAttributeAssemblyInformationalVersionAttribute();var repositoryUrl assembly.GetCustomAttributesAssemblyMetadataAttribute().FirstOrDefault(x nameof(LibraryInfo.RepositoryUrl).Equals(x.Key))?.Value ?? string.Empty;if (assemblyInformation is not null){var informationalVersionSplit assemblyInformation.InformationalVersion.Split();if (Version.TryParse(informationalVersionSplit[0], out var version)){return new LibraryInfo(){LibraryVersion version,LibraryHash informationalVersionSplit.Length 1 ? informationalVersionSplit[1] : string.Empty,RepositoryUrl repositoryUrl};}}return new LibraryInfo(){LibraryVersion assembly.GetName().Version!,LibraryHash string.Empty,RepositoryUrl repositoryUrl};
}为了使用方便添加一个根据类型获取的 overloadpublic static LibraryInfo GetLibraryInfo(Type type) GetLibraryInfo(Guard.NotNull(type).Assembly);More使用 dotnet-exec 来测试一下dotnet-exec ApplicationHelper.GetLibraryInfo(typeof(WeihanLi.Npoi.CsvHelper)) --reference nuget:WeihanLi.Npoi,2.4.2从输出结果我们可以看到我们已经拿到 commit hash 和 RepositoryUrl 信息了对应的 Github commit 地址就是https://github.com/WeihanLi/WeihanLi.Npoi/tree/8e2c1dee6efee9b7b4b12f16272f266c9ad09233最后还是建议大家在自己开源类库项目中集成 source link不仅方便调试还可以比较方便准确的获取对应版本的 commit 信息这样别人使用遇到问题的话也会比较方便的进行 debug 和查找源代码Referenceshttps://github.com/dotnet/sourcelinkhttps://github.com/WeihanLi/WeihanLi.Common/blob/1.0.58/src/WeihanLi.Common/Helpers/ApplicationHelper.cs