【问题标题】:To find the dll version of the file查找文件的dll版本
【发布时间】:2012-07-27 09:46:57
【问题描述】:

我想在指定路径时查找 dll 版本。假设 path = "progfiles/harry/sample.dll"。如何找到 sample.dll 版本。由于我使用的是 .net framework 3.5 SP1,因此无法使用 FileVersionInfo。我尝试了 Assembly.LoadFrom。但是我面临的 LoadFrom 问题是“如果已经加载了具有相同标识的程序集,即使指定了不同的路径,LoadFrom 也会返回加载的程序集。”

【问题讨论】:

  • 那么,为什么你不能使用FileVersionInfo
  • .net framework 3.5 SP1 不支持 FileVersionInfo
  • @BadhriRavikumar 根据谁? msdn.microsoft.com/en-us/library/…
  • @BadhriRavikumar 嗯? I don't think so...
  • @mr47 - .net framework 3.5 支持 FileVersionInfo。但不适用于 3.5 SP1。这个我试过了。

标签: c# dll compact-framework windows-ce .net-cf-3.5


【解决方案1】:

无论如何,您可以将程序集加载到另一个 AppDomain。

var domain = AppDomain.CreateDomain("tmp");
var version = domain.Load().GetName(path).Version;

编辑:

您的目标是 Windows CE,因此可以使用GetFileVersionInfo 函数。

Here 是如何在 .Net/C# 中使用此函数的完整代码示例。

【讨论】:

  • 我在域中找不到 Load() 函数?我应该添加一些东西吗?
  • 找不到是什么意思。你得到一个编译器错误吗? It is there...
  • 错误 - 'System.AppDomain' 不包含'Load' 的定义,并且找不到接受'System.AppDomain' 类型的第一个参数的扩展方法'Load'(您是否缺少使用指令或程序集引用?)我收到此错误。
  • 您使用哪个版本的 Visual Studio 以及在您的项目设置中设置了哪个 Target Framework
  • 目标框架是 Windows CE,我使用的是 Visual Studio 2008 版本 9.0.30729.1 SP,.net 框架是版本 3.5 SP1
【解决方案2】:

查找 DLL 库版本的示例代码:

Version ver = Assembly.LoadFrom("Library.dll").GetName().Version;

编辑 1: 好的,为了获得已经执行的程序集,你可以试试这个例子:

Assembly SampleAssembly;
SampleAssembly = Assembly.GetAssembly(ObjectLoadedFromDLL.GetType());
Version ver = Assembly.GetExecutingAssembly().GetName().Version;

并链接到 MSDN 这个方法的完整文档:Assembly.GetExecutingAssembly Method

【讨论】:

  • OP 对此方法存在特定问题;无法加载与已加载的 DLL 具有相同标识的 DLL。
  • @coirius - 我想你不明白我的问题。我说“如果已经加载了具有相同标识的程序集,即使指定了不同的路径,LoadFrom 也会返回加载的程序集。”我想知道这种情况下的解决方案
  • @coirius - 如果假设,sample.dll 已经加载了一次,并且我在位置路径 =“progfiles/harry/sample.dll”中有另一个同名的 dll 文件。现在我想要位于路径的 dll 文件版本。但是,每当我尝试加载 sample.dll 时,默认情况下它都会使用之前加载的那个。在这里查看第一个缺点msdn.microsoft.com/en-us/library/1009fa28.aspx
【解决方案3】:

您可以使用AssemblyName

var assemblyName = AssemblyName.GetAssemblyName(assemblyPath);
System.Diagnostics.Debug.WriteLine(assemblyName.Version);

【讨论】:

  • AssemblyName.GetAssemblyName 在 .netcf 中不可用
猜你喜欢
  • 1970-01-01
  • 2012-02-26
  • 1970-01-01
  • 2017-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
相关资源
最近更新 更多