小工具名称:binchecker
主要是检查Bin目录下的dll文件。
我们在系统在发到live环境之后,有时候会因为发布的dll文件不是最新的版本,才导致live defect。因为live环境一般是发布专员控制,我们普通的开发人员一般没有权限去查看dll的版本,所以我们需要一种机制来检查发布之后的dll文件的版本是不是最新的。本文就会一步一步教我们如何创建一个版本检查的小工具,让我们舒舒服服的检查live上的dll版本。
小工具具体功能,可以显示以下信息:
文件名称
文件版本号
最后编译时间
属于哪个程序集
实现的步骤
1. 定位bin文件夹目录
var assemblyFolder = AppDomain.CurrentDomain.RelativeSearchPath;
if (string.IsNullOrWhiteSpace(assemblyFolder))
{
assemblyFolder = AppDomain.CurrentDomain.BaseDirectory;
}
2. 获取bin的所有dll文件
string[] filepaths = Directory.GetFiles(assemblyFolder, "*.dll");
3. 定义FileStatus类,表示dll文件的状态
class FileStatus
{
public string Name { get; set; }
public Version Version { get; set; }
public DateTime LastBuildTime { get; set; }
public DateTime LastWriteTime { get; set; }
public List<ReferencedAssembly> ReferencedAssemblies { get; set; }
}
class ReferencedAssembly
{
public string Name { get; set; }
public Version Version { get; set; }
}
4. 定义GetStatus方法
private static FileStatus GetStatus(string file)
{
try
{
var fileInfo = new FileInfo(file);
var assembly = Assembly.Load(Path.GetFileNameWithoutExtension(file));
var referencedAsseblies = assembly.GetReferencedAssemblies().Select(
assm => new ReferencedAssembly() { Name = assm.Name, Version = assm.Version }
).ToList();
var version = assembly.GetName().Version;
return new FileStatus()
{
Name = fileInfo.Name,
Version = version,
LastWriteTime = fileInfo.LastWriteTime,
ReferencedAssemblies = referencedAsseblies
};
}
catch
{
// Squash any exceptions
}
return new FileStatus() { Name = file };
}
5. 完整运行:
var assemblyFolder = AppDomain.CurrentDomain.RelativeSearchPath;
if (string.IsNullOrWhiteSpace(assemblyFolder))
{
assemblyFolder = AppDomain.CurrentDomain.BaseDirectory;
}
var fileStatuses = Directory.GetFiles(assemblyFolder, "*.dll").Select(file => GetStatus(file)).ToList();
通过本文的知识,我们自己就可以分分钟新建一个binchecker小工具了。