首页
学习
活动
专区
圈层
工具
发布

C#将引用的dll嵌入到exe文件中

当发布的程序有引用其它dll, 又只想发布一个exe时就需要把dll打包到exe 当然有多种方法可以打包, 比如微软的ILMerge,混淆器附带的打包......方法如下: 1.项目下新建文件夹dll 2.把要打包的dll文件放在dll文件夹下,并包括在项目中 3.右键文件属性, 生成操作选择嵌入的资源 4.实现如下代码, 在窗口构造中实现也可以(在窗体事件中无效...,如winform_load) 这里需要注意,“引用”下的dll,需要设置“复制本地”为False,这样在bin目录下生成exe的时候就不会顺便复制dll了(这步可要可不要) using System;...嵌入到exe程序的资源中, 并实现程序集加载失败事件(当在程序目录和系统目录下找不到程序集触发), 当找不到程序集时就从资源文件加载, 先转换为字节数组再转换到程序集返回给程序, 这样dll就被加载到程序中了...如果exe所在文件夹下有相应dll, 事件并不会被触发!

5.6K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    使用Costura.Fody将源DLL合并到目标EXE

    /packages/Costura.Fody/ 并从Visual Studio中的程序包管理器控制台进行安装: PM> Install-Package Costura.Fody -Version 1.6.2...注:最新版本请打开Nuget地址进行获取 二、安装之后,Costura.dll等已经被引用进来,如下图所示: 三、新建一个引用Newtonsoft.Json.dll的解决方案,这个就借用上一篇内容【...[C#]使用ILMerge将源DLL合并到目标EXE(.NET4.6.2)】的例子,解决方案下载地址: https://pan.baidu.com/s/1jIzjpkU 代码如下: using System...四、点击运行按钮,然后在bin/Debug文件夹下看能生成的文件如下: 从以上图片可以看出,生成的文件没有包含Newtonsoft.Json.dll与Costura.dll没有被生成,只有三个文件。...五、我们可以使用ILSpy.exe查看刚才生成之后的ConsoleApp12.exe,如下图所示: 从以上可以看出,可以使用Costura.Fody将源DLL合并到目标EXE。

    3K00

    使用Costura.Fody将源DLL合并到目标EXE

    本文为原创文章,如转载,请在网页明显位置标明原文名称、作者及网址,谢谢!.../ 并从Visual Studio中的程序包管理器控制台进行安装: PM> Install-Package Costura.Fody -Version 1.6.2 注:最新版本请打开Nuget地址进行获取...三、新建一个引用Newtonsoft.Json.dll的解决方案,这个就借用上一篇内容【[C#]使用ILMerge将源DLL合并到目标EXE(.NET4.6.2)】的例子,解决方案下载地址: https...从以上图片可以看出,生成的文件没有包含Newtonsoft.Json.dll与Costura.dll没有被生成,只有三个文件。...五、我们可以使用ILSpy.exe查看刚才生成之后的ConsoleApp12.exe,如下图所示: ? 从以上可以看出,可以使用Costura.Fody将源DLL合并到目标EXE。

    2.5K00

    从零开始学习 dotnet 编译过程和 Roslyn 源码分析

    复制文件 - 林德熙 如何使用 MSBuild Target(Exec)中的控制台输出 - 吕毅 如何在 MSBuild Target(Exec)中报告编译错误和编译警告 - 吕毅 更高级的 Target...: .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换 - 吕毅 在 Visual Studio 的解决方案资源管理器中隐藏一些文件 - 吕毅 使用链接共享 Visual Studio...基础 项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦) - 吕毅 可以使用 NuGet 做一些不是传统 dll 引用的功能: Roslyn 通过...NuGet 工具包 - 吕毅 如何创建一个基于命令行工具的跨平台的 NuGet 工具包 - 吕毅 在制作跨平台的 NuGet 工具包时,如何将工具(exe/dll)的所有依赖一并放入包中 - 吕毅 NuGet...- 吕毅 扩展阅读 这里是是用到了 csproj / NuGet 等的额外博客: 语义版本号(Semantic Versioning) - 吕毅 (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个

    1.1K40

    制作通过 NuGet 分发的源代码包时,如果目标项目是 WPF 则会出现一些问题(探索篇,含解决方案)

    制作源代码包 - 林德熙 这可以避免因为安装 NuGet 包后带来的大量程序集引用,因为程序集数量太多对程序的启动性能有很大的影响: C# 程序集数量对软件启动性能的影响 - 林德熙 然而制作一个 NuGet...在那篇博客中,我们解释到新生成的项目文件会使用 ReferencePath 替代其他方式收集到的引用,这就包含项目引用和 NuGet 包的引用。...在使用 ReferencePath 的情况下,无论是项目引用还是 NuGet 包引用,都会被换成普通的 dll 引用,因为这个时候目标项目都已经编译完成,包含可以被引用的程序集。...以下是我在示例程序中抓取到的临时生成的项目文件的内容,与原始项目文件之间的差异: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23...,在项目文件的首尾各加上 NuGet 自动生成的那些 Import 来自 NuGet 中的所有编译文件: 1 2 3 4 5 6 7

    1K40

    .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖

    (注意到项目文件中我有额外引用一个其他的 NuGet 包 Ben.Demystifier,这是为了演示将依赖进行合并而添加的 NuGet 包,具体是什么都没有关系,我们只是在演示依赖的合并。)...我将这个名为 _ProjectRemoveDependencyFiles 的 Target 增加到了下面。...加入环境变量的方法我就不用说了,可以在网上搜索到非常多的资料。...4.0 - .NET Framework 4.8 之间,则都是 v4 在合并完成之后,我们反编译可以发现程序集中已经包含了依赖程序集中的全部类型了。...欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://blog.walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。

    4.7K30

    微软官方的 NuGet 包是如何做到同时兼容新旧框架的?例如 System.ValueTuple 是如何做到在新旧版本的框架都能使用的?

    语法支持 C# 从 7.0 开始支持元组类型的语法,即可以写出这样的代码: 1 var (a, b) = Foo(); 关于此新增功能,可以前往这里查看: C# 7.0 中的新增功能 - C# 指南...也是一样的情况,详见: .NET 中什么样的类是可使用 await 异步等待的? - walterlv 也就是说,只要你的项目使用的 C# 版本在 7.0 以上,就可以使用元组解构这样的语法。...结论 框架(.NET)和语言(C#)现在已是独立升级了,因此在使用旧框架的情况下,也可以使用新语言的特性; 旧框架使用的是完整功能的 dll(由 NuGet 包来决定使用正确的 dll); 新框架使用的是...TypeForwardedTo 特性作为垫片,重定向类型到新框架中(由 NuGet 包来决定使用正确的 dll)。...额外的,我写过另一个通过此方式获得新旧框架兼容的包: 杂谈 System.Drawing.Common 的跨平台性 - walterlv 参考资料 What do mean . files in nuget

    1K10

    SourceYard 制作源代码包 控制台项目WPF 程序调试

    关于 dll 数量和启动时间的测试请看 C# 程序集数量对软件启动性能的影响 介绍了程序集数量对软件启动性能的影响,运行的性能是在引用某个 dll 方法的时候需要加载这个 dll 降低速度。...在我之前的博客C# 金额转中文大写已经有了代码,可以从码云复制 复制的代码因为没有命名空间,需要手动添加,于是现在就创建了一个项目,这个项目包含一个类。 ?...这里两个不同的文件,其他是传统的 Nuget 包,也就是 TheLib.1.0.2.nupkg 里面包含 dll 请打开文件很快就可以看到 ?...exe 在 dotnet core 项目的输出文件夹只有一个 dll 因为默认的 dotnet core 输出的是 dll 源代码就放在相同的 dll 里 ?...打开 WPF 程序的输出文件夹,可以发现这个文件夹里面只有一个 exe 源代码已经放在 exe 里 调试 在将项目制作 Nuget 包的时候,就有小伙伴吐槽在开发的时候,如果使用 Nuget 安装,很难进行调试

    1.4K20

    BypassUAC

    常见的利用方式有: DLL注入(RDI技术),一般注入到常驻内存的可信进程,如:explorer DLL劫持,常和注册表配合使用达到劫持目的 伪装进程PEB绕过UAC 上面在利用COM接口的ShellExec...我的测试系统Windows 10 (1909),使用OleViewDotNet工具可以查看系统中的COM接口属性信息,注意需要以管理员权限运行。...关于C#接口的知识,可以从这里了解更多。 DLL 形式 如何使用? dll可以使用系统可信进程rundll32.exe进行加载,这样也不需要调用MarquradePEB。...C# 导出dll函数的方式 代码地址:BypassUAC_Dll_csharp C#导出dll函数的方式有两种: 使用DllExport这个NuGet包 通过IL反编译的方式 DllExport...默认C#导入其他库函数,可以使用[DllImport],但是不支持[DllExport],通过NuGet包管理器安装DllExport这个包可以实现这个功能。

    2.6K30

    判断DLL文件是CC++动态链接库还是.NET程序集及查看DLL依赖

    常见问题 客户端在部分电脑上无法加载指定模块 针对异常情况,做故障分析: C++编译的dll正常,C#编译正常; 加载路径也没问题 排除DLL本身的问题后,出现问题的原因就可能是运行环境的问题。...我本地CorFlags.exe所在的路径为 C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools 添加到环境变量中...利用vs子自带工具:VS 2017的 x64_x86 交叉工具命令提示符 打开进入cmd模式,找到C++的dll路径,通过命令: dumpbin /dependents 需要检测的.dll 如 dumpbin...https://dependencywalker.com/ DLL嵌入EXE中 项目地址:https://github.com/MiloszKrajewski/LibZ 使用Nuget图形或者命令下载LibZ.Bootstrap...这里需要注意的是–assembly后的参数是项目生成的文件名,不是新生成的名称. 但是并不建议这样做: 只有.NET的DLL会被嵌入到EXE中,C++的不会,并且大大增加生成时间。

    4.9K11

    Roslyn 打包自定义的文件到 NuGet 包

    本文告诉大家如何在打包的时候加上需要放在包里面的文件 在 VisualStudio 使用新项目格式快速打出 Nuget 包 告诉大家快速打包的方法,但有时候我需要将本地的一些资源或依赖也放在包里面,此时就需要用到下面的方法...-- 上面的代码使用 *.txt 包含了 林德熙是逗比.txt 文件,需要在下面代码使用更新 --> <None Update="林德熙是逗比.txt" Pack...\Newtonsoft.Json.dll" /> 上面代码将会在输出文件夹找到 Newtonsoft.Json.dll 将这个文件输出到打包文件夹里面 如果我是需要在运行过程引用的一些...\tools\nuget.exe" DestinationFiles="$(OutputPath)\tools\nuget.exe" SkipUnchangedFiles="True">...,也就是这个 NuGet 库只是工具,里面的 dll 不会被引用

    1.2K20

    ASP.NET Core | 笔记

    _C#教程_脚本之家 c# 断点续传的实现_C#教程_脚本之家 C#断点续传 - 365lei - 博客园 .net c# 文件分片/断点续传之下载--客户端_mengtoumingren的博客-CSDN...Docs 如何在 .NET Core 中使用和调试程序集可卸载性 | Microsoft Docs dotnetcore/Natasha: 基于 Roslyn 的 C# 动态程序集构建库,该库允许开发者在运行时使用...封装的一个超迷你http服务器 进程管理 参考: C#在窗体程序中运行控制台程序并管理其进程_madonghyu的博客-CSDN博客_c#调用进程之后管理 public void FrpStart()...还可以通过以下项目属性在 dll 或 exe 中 embed 它们:embedded 创建符号包 如果使用 dotnet CLI 或 MSBuild,则除...snupkg 或 msbuild MyPackage.csproj /t:pack /p:IncludeSymbols=true /p:SymbolPackageFormat=snupkg 如果使用 NuGet.exe

    5.6K20

    如何创建一个基于命令行工具的跨平台的 NuGet 工具包

    一篇介绍写基于 MSBuild Task 的 dll,一篇介绍写任意的命令行工具,可以是用于 .NET Framework 的 exe,也可以是基于 .NET Core 的 dll,甚至可以是使用本机工具链编译的平台相关的各种格式的命令行工具...-- 输出为 exe(其实对于 .NET Core 依然是 dll,除非进行发布)。 --> Exe 的版本号。...(如果你想了解更多 csproj 中的 NuGet 属性,可以阅读我的另一篇文章:项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦) - 吕毅)...csproj 是一样的,你可以阅读我的另一篇文章 理解 C# 项目 csproj 文件格式的本质和编译流程 - 吕毅 了解其结构。...如果在阅读这篇文章时存在一些概念理解上的问题,或者不知道如何扩展本文的功能,可能需要阅读下我的另一些文章: 理解 C# 项目 csproj 文件格式的本质和编译流程 - 吕毅 项目文件中的已知属性(知道了这些

    1.5K20

    .NET 项目自定义 MSBuild Task

    3.1 新建 Task 项目 我打算做一点 git hook 相关的事情,这里就取名为 Jgrass.GitHookMsbuildTask,新建一个 C# 类库项目,csproj 文件如下。...如果要通过 nuget 作为一个通用的 Task 发布,就会复杂亿丢丢。 PS 如果在修改代码之后,在编译 Task 项目时,发现输出目录的 dll 被占用,直接结束掉 msbuild.exe 进程。...4 将自定义 Task 打包成 nuget 包 基本流程参照吕毅的博客,所以里面设计到的基本概念就不详细介绍了,我这里做了一点简化。...也可能 .targets 文件名是必须与 dll 的输出文件名一致?或者必须与 AssemblyName 的设置一致?或者是必须与 nuget 包的名称一致?...想法的源头来自这里:git 禁止大文件提交到仓库中 参考资料 团队项目利用Msbuild自定义Task实现增量发布 - Starup - 博客园 MSBuild入门(续) - Timetombs

    69710

    如何创建一个基于 MSBuild Task 的跨平台的 NuGet 工具包

    一篇介绍写基于 MSBuild Task 的 dll,一篇介绍写任意的命令行工具,可以是用于 .NET Framework 的 exe,也可以是基于 .NET Core 的 dll,甚至可以是使用本机工具链编译的平台相关的各种格式的命令行工具...(如果你想了解更多 csproj 中的 NuGet 属性,可以阅读我的另一篇文章:项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦) - 吕毅)...这一节我会说一些 Task 在 C# 代码和 .targets 文件中的互相操作。...在 DemoTool 的 C# 代码中,只需要写一个字符串属性即可接收这样的传参。...如果在阅读这篇文章时存在一些概念理解上的问题,或者不知道如何扩展本文的功能,可能需要阅读下我的另一些文章: 理解 C# 项目 csproj 文件格式的本质和编译流程 - 吕毅 项目文件中的已知属性(知道了这些

    1.9K10

    ImpulsiveDLLHijack:一款基于C#实现的DLL劫持技术研究工具

    关于ImpulsiveDLLHijack ImpulsiveDLLHijack是一款功能强大的DLL劫持技术安全研究工具,该工具基于C#开发实现,可以帮助广大研究人员以自动化的方式扫描、发现并利用目标设备二进制文件中的...红队研究人员也可以利用该工具来识别劫持路径,并在定制工具中实现该技术以绕过EDR产品的检测。...是否已从已识别的劫持路径成功加载:dll(从本项目的MalDLL目录中获取)、maldll64.dll(从本项目的MalDLL目录中获取)、PeNet 工具安装 首先,我们需要使用下列命令将该项目源码克隆至本地...packages" --> 浏览工具包并安装 "PeNet" -> https://www.nuget.org/packages/PeNet/ 然后构建项目,此时项目的bin目录中就会出现ImpulsiveDLLHijack.exe...最后,将编译生成的路径确认DLL(maldll32 & maldll64)拷贝至ImpulsiveDLLHijack.exe目录下,然后执行ImpulsiveDLLHijack.exe即可。

    2.2K10
    领券