C#类库引用类库

发布于 2022-08-24 12:19:43 字数 75 浏览 22 评论 0

我现在写了一个类库(.dll),在这个类库中引用了另一个第三方类库,如何把这个第三方类库嵌入我的类库中,就是说编译后只有我的dll文件?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

花开浅夏 2022-08-31 12:19:43

许多应用程序都由一个要依赖于众多 DLL 文件的 EXE 文件构成。部署这个应用程序时,所有文件都必须部署。然而,有一个技术允许只部署一个 EXE 文件。首先,标识出 EXE 文件要依赖的、同时不是作为 Microsoft .NET Framework 本身的一部分发布的所有 DLL 文件。然后,将这些 DLL 添加到你的 Visual Studio 项目中。对于添加的每个 DLL,都显示它的属性,并将它的“生成操作”更改为“嵌入的资源”。这会导致 C# 编译器将 DLL 文件嵌入 EXE 文件中,以后只需要部署这个 EXE 文件即可。

运行时,CLR 会找不到依赖的 DLL 程序集。为了解决这个问题,当应用程序初始化时,想 AppDomain 的 ResolveAssembly 事件登记一个回调方法。代码大致如下:

```C#
AppDomina.CurrentDomain.AssemblyResolve += (sender, args) => {
String resourceName = "AssemblyLoadingAndReflection." +
new AssemblyName(args.Name).Name + ".dll";

using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) {
    Byte[] assemblyData = new Byte[stream.Length];
    stream.Read(assemblyData, 0, assemblyData.Length);
    return Assembly.Load(assemblyData);
}

};
```

现在,一个线程首次调用一个方法时,如果发现该方法引用了依赖 DLL 文件中的一个类型,就会引发一个 AssemblyResolve 事件,而上述回调代码会找到所需的嵌入 DLL资源,并调用 Assembly 的 Load 方法的一个重载版本(这个版本要获取一个 Byte[] 实参),从而加载所需的资源。

摘录自《CLR via C#》

小姐丶请自重 2022-08-31 12:19:43

我记得是可以的,你看看编译的选项里面肯定有。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文