我在这方面不是很有经验 - 所以我有几个问题。首先,所有 .Net 创建的 DLL 是否都有自己的 GUID?如果没有,我的问题是如何获得一个并将其与 DLL 关联。
那么问题是,我如何获得该 dll 的 GUID - 即。给定 DLL 路径 (c:\some\path\to\a\file.dll),如何确定其 GUID?另外,有没有一种简单的方法可以走另一条路(GUID -> DLL) - 我读过一些相关内容,但其中很多涉及 VB6 DLL 和 COM 东西......这仍然适用于 .Net DLL ?
更新:感谢您的回答。也许我问错了问题。我希望每个 DLL 文件都有一个唯一的 ID,以便我可以在数据库中引用它们。我希望能够获取数据库中存储的唯一 ID,然后轻松找到 DLL 并用它做一些事情。根据答案所说,也许我不应该使用 GUID,那么有没有 .Net 方法可以做到这一点?
要回答第二个问题(Guid -> 程序集),如果 dll 已经加载并且您只想找到哪个 dll 有 guid(如果有),那么这很简单,您可以简单地执行以下操作
using System;
using System.Reflection;
using System.Runtime.InteropServices;
static Assembly FindAssemblyForGuid(Guid match)
{
foreach (var a in AppDomain.CurrentDomain.GetAssemblies())
{
object[] attributes = a.GetCustomAttributes(typeof(GuidAttribute)) ;
if ( attributes.Length > 0 )
{
foreach (GuidAttribute g in attributes )
{
if (g.Value == match)
return a;
}
}
}
return null; // failed to find it
}
Run Code Online (Sandbox Code Playgroud)
如果您想在不加载它的情况下执行此操作,则需要将其加载到临时应用程序域中,检查它,然后删除应用程序域或使用非托管内省 api 执行相同的操作,但无需在之后释放任何内容。
| 归档时间: |
|
| 查看次数: |
19156 次 |
| 最近记录: |