0

我正在为我们在多台客户端机器上提供的软件实现一个 .DLL 加载器/更新器。我们需要检查机器上文件的版本,然后将其传递给 SQL 以确定文件是否是最新版本 - 我们有一个这样的文件夹结构:

- 应用

--- 文件

---- 子文件夹

----- 加载器.exe

加载程序 .exeList(of FileInfo)从应用程序文件夹中获取一个。此文件夹中有各种程序集并获取程序集的版本以便检查,我正在使用Assembly.LoadFile(x.FullName).GetName().Version并通过使用它,如果文件需要更新或稍后访问 loader.exe 有该文件正在使用中。我将信息放入数据表中,然后将其传递给 SQL 中的存储过程。

Dim dt As New DataTable("ModuleTableVariable")
dt.Columns.Add("ModuleName")
dt.Columns.Add("ModuleVersion")
Dim rows As List(Of DataRow) = fileList.Select(Function(x)
                                                 Dim row = dt.NewRow()
                                                 row("ModuleName") = x.Name
                                                 If x.Extension = ".dll" Or x.Extension = ".exe" Then
                                                   row("ModuleVersion") = Assembly.LoadFile(x.FullName).GetName().Version
                                                 Else
                                                   row("ModuleVersion") = x.CreationTime
                                                 End If
                                                 Return row
                                               End Function).ToList()

所以很明显,我指的是程序集版本的部分是我需要更改或实施某种使用语句的地方,该语句将处理对相关文件的访问,有什么想法吗?

注意:如果您显示合适的 using 语句或解决方案,我也会接受 C# 中的答案,不必是完整的 LINQ。

4

2 回答 2

1

找到了我需要的东西

AssemblyName.GetAssemblyName("filename.exe").Version 

使用它不会仅加载整个程序集我需要的信息,这意味着它不会锁定文件。谢谢大家的建议。

于 2012-09-10T13:40:00.573 回答
0

您是否尝试通过调用将程序集加载到仅反射上下文Assembly.ReflectionOnlyLoadFrom()中?

另一种方法是创建一个新的AppDomain,因为您根本无法卸载程序集。将程序集加载到这个新域中,然后卸载AppDomain

于 2012-09-10T10:15:45.510 回答