首页 > C# > C#在已编译的可执行文件中嵌入 DLL

C#在已编译的可执行文件中嵌入 DLL

上一篇 下一篇

是否可以将预先存在的 DLL 嵌入到已编译的 C# 可执行文件中(以便您只有一个文件要分发)?如果可能的话,怎么做呢?

通常,我很酷地将 DLL 留在外面并让安装程序处理所有事情,但是工作中有几个人问过我这个问题,老实说我不知道。

分割线

网友回答:

我强烈建议使用 Costura.Fody – 迄今为止在程序集中嵌入资源的最佳和最简单的方法。它以 NuGet 包的形式提供。

Install-Package Costura.Fody

将其添加到项目后,它会自动将复制到输出目录的所有引用嵌入到程序集中。您可能希望通过向项目添加目标来清理嵌入的文件:

Install-CleanReferencesTarget

您还可以指定是包含 pdb、排除某些程序集还是动态提取程序集。据我所知,还支持非托管程序集。

更新

目前,有些人正在尝试添加对 DNX 的支持。

更新 2

对于最新的Fody版本,您需要拥有MSBuild 16(因此Visual Studio 2019)。Fody 版本 4.2.1 将执行 MSBuild 15。(参考:Fody 仅在 MSBuild 16 及更高版本上受支持。当前版本: 15)

分割线

网友回答:

只需在 Visual Studio 中右键单击您的项目,选择“项目属性”-“>资源”->“添加资源”->“添加现有文件…
并将以下代码包含在 App.xaml .cs 或等效项中。

public App()
{
    AppDomain.CurrentDomain.AssemblyResolve +=new ResolveEventHandler(CurrentDomain_AssemblyResolve);
}

System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
    string dllName = args.Name.Contains(',') ? args.Name.Substring(0, args.Name.IndexOf(',')) : args.Name.Replace(".dll","");

    dllName = dllName.Replace(".", "_");

    if (dllName.EndsWith("_resources")) return null;

    System.Resources.ResourceManager rm = new System.Resources.ResourceManager(GetType().Namespace + ".Properties.Resources", System.Reflection.Assembly.GetExecutingAssembly());

    byte[] bytes = (byte[])rm.GetObject(dllName);

    return System.Reflection.Assembly.Load(bytes);
}

这是我的原始博客文章:
http://codeblog.larsholm.net/2011/06/embed-dlls-easily-in-a-net-assembly/

分割线

网友回答:

如果它们实际上是托管程序集,则可以使用 ILMerge。对于本机 DLL,你将有更多的工作要做。

另请参阅:如何将C++的 Windows dll 合并到 C# 应用程序可执行文件中?

模板简介:该模板名称为【C#在已编译的可执行文件中嵌入 DLL】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【C#】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 293次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 04-21
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
企业网站 微信公众平台 单页式简历模板 html5 自适应 响应式 微信文章 微信图片 微信素材 微信模板
您可能会喜欢的其他模板