有时候我们会使用第三方的库,好多游戏也是使用第三方库,在没有安装第三方就会出错。
而现在我们经常使用绿色软件,希望直接运行一个软件,不要下载很多库。
我们有一个简单的方法把dll库打包程序中
我们可以添加AppDomain.CurrentDomain.AssemblyResolve
在程序运行,发现缺少库
如果我们把dll放到库中,属性为资源
我看到blqw把运行从程序找dll写为
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
namespace blqw
{
static class LoadResourceDll
{
static Dictionary<string, Assembly> Dlls = new Dictionary<string, Assembly>();
static Dictionary<string, object> Assemblies = new Dictionary<string, object>();
static Assembly AssemblyResolve(object sender, ResolveEventArgs args)
{
Assembly ass;
var assName = new AssemblyName(args.Name).FullName;
if (Dlls.TryGetValue(assName, out ass) && ass != null)
{
Dlls[assName] = null;
return ass;
}
else
{
throw new DllNotFoundException(assName);
}
}
public static void RegistDLL()
{
var ass = new StackTrace(0).GetFrame(1).GetMethod().Module.Assembly;
if (Assemblies.ContainsKey(ass.FullName))
{
return;
}
Assemblies.Add(ass.FullName, null);
AppDomain.CurrentDomain.AssemblyResolve += AssemblyResolve;
var res = ass.GetManifestResourceNames();
foreach (var r in res)
{
if (r.EndsWith(".dll", StringComparison.OrdinalIgnoreCase))
{
try
{
var s = ass.GetManifestResourceStream(r);
var bts = new byte[s.Length];
s.Read(bts, 0, (int)s.Length);
var da = Assembly.Load(bts);
if (Dlls.ContainsKey(da.FullName))
{
continue;
}
Dlls[da.FullName] = da;
}
catch
{
}
}
}
}
}
}
原文:http://www.cnblogs.com/blqw/p/LoadResourceDll.html
但是这样可能存在软件无法打开,因为没有找到已加载的同名程序集,会throw new DllNotFoundException(assName)
if (Dlls.TryGetValue(assName, out ass) && ass != null)
{
Dlls[assName] = null;
return ass;
}
else
{
throw new DllNotFoundException(assName);
}
我直接注释掉,但是这样不好,现在觉得应该使用资源文件把dll放进去,判断是否有dll,没有就从资源放到同目录,然后创建快捷方式
private void instances(string file)
{
debug = file;
Uri url = new Uri(".\\" + file, UriKind.Relative);
using (Stream stream = Application.GetResourceStream(url)?.Stream)
{
if (stream == null)
{
return;
}
byte[] buffer = new byte[20480];
int n;
using (FileStream temp = new FileStream(file, FileMode.Create))
{
while ((n = stream.Read(buffer, 0, buffer.Length)) > 0)
{
temp.Write(buffer, 0, n);
}
}
}
}
<script type="text/javascript">
$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('<ul/>').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($('<li/>').text(i));
};
$numbering.fadeIn(1700);
});
});
</script>
分享到:
相关推荐
C#Dll打包进Exe C#把 DLL 文件打包进 EXE 的技巧是指将原本需要单独存在的 DLL 文件整合到生成的 EXE 文件中,以便于程序的部署和运行。下面将详细介绍这项技术的实现步骤和原理。 首先,我们需要使用 Visual ...
在C#编程中,将DLL打包到程序中是为了确保程序在目标环境中能够正常运行,而无需依赖外部的DLL文件。这种做法尤其适用于分发给最终用户的应用程序,因为用户可能不具备安装额外文件或管理依赖关系的能力。以下是关于...
综上所述,".Net程序压缩打包助手"是.NET开发者便捷的工具,它通过将exe和dll打包成一个文件,解决了程序部署中的依赖问题,提升了软件的可移植性和用户友好性。通过了解其工作原理和使用方法,开发者可以更有效地...
在C#编程中,有时我们需要将引用的DLL文件与主执行程序(EXE)整合在一起,以便在只发布单个可执行文件的情况下运行程序。这种技术通常用于减少部署的复杂性,防止因为丢失依赖库而导致的运行错误。下面将详细解释...
C#程序中的.dll文件主要包括框架类库、自定义组件、第三方库等。打包这些文件是为了确保程序在没有相应DLL的环境中也能正常运行。 2. **打包工具**: 为了方便分发和部署,开发者需要将Release目录下的所有必要...
在IT行业中,应用程序打包是一项重要的工作,它将开发完成的软件整理成用户友好的安装包,便于分发和安装。本教程将详细讲解如何使用C#进行应用程序打包,旨在帮助开发者掌握这一技能。 首先,我们要了解C#应用程序...
"非常好用的C#程序打包工具"标题所指的,就是一款专为C#程序设计的打包工具,它的主要功能是将C#编译后的程序集(如.exe和.dll文件)以及相关的配置文件、资源文件等整合成一个可执行的安装包,方便用户下载和安装。...
描述 "用C#写的,可以将dll打包到exePE文件里面执行" 提到了PE(Portable Executable)文件格式,这是Windows操作系统下可执行文件(如.exe和.dll)的标准格式。在C#中,我们可以利用.NET Framework或.NET Core的...
Fody.Costura是Fody框架的一个插件,它允许开发人员将项目所依赖的所有DLL(包括PDB调试信息文件)打包到单一的EXE文件中,使得应用程序可以在没有外部DLL的情况下运行。安装Fody.Costura非常简单,可以通过Visual ...
C# WinForm 程序打包部署是指将 C# WinForm 应用程序转换为可执行文件并将其部署到目标机器上。为了实现这个目标,需要使用 VS2008 中的安装向导来创建一个安装项目,并将应用程序的可执行文件和相关文件添加到安装...
### 将DLL打包入EXE的关键技术点 在Windows编程中,经常需要处理动态链接库(DLL)与可执行文件(EXE)之间的交互。有时为了简化部署过程或减少依赖,开发者会选择将DLL直接嵌入到EXE文件内部。本文将深入探讨如何...
在IT领域,特别是软件开发与部署过程中,将C#桌面应用程序和SQL Server数据库进行有效打包是确保应用稳定性和用户友好性的关键步骤。本文将详细解析这一过程中的核心知识点,包括但不限于利用Visual Studio .NET环境...
多个DLL合并成一个DLL,把DLL合并到Exe中的解决方案 多个DLL合并成一个DLL,把DLL合并到Exe中的解决方案 开始-》运行 -》 "cmd" -> "cd C:\Program Files\Microsoft\ILMerge" 3:) 3.1、合并file1.dll、file2.dll...
标题中的“把C#开发程序打包成绿色的exe执行文件(自解压文件)”指的是将C#编写的程序转换为一个独立的、无需安装即可运行的exe文件,这种文件通常被称为绿色版或便携版。这样的程序可以方便地在不同计算机上运行,...
- 将该快捷方式分别剪切或复制到左侧的“用户的‘程序’菜单”和“用户桌面”中,这样安装完成后将在“开始”菜单和桌面上生成程序的快捷方式。 ##### 4. 设置默认安装位置 - 右击左侧的“应用程序文件夹”,打开其...
下面将详细解释如何进行C#应用程序的打包,生成安装文件以及可执行文件。 1. **创建可执行文件(.exe)** 在Visual Studio中,当你开发完C#应用程序后,可以通过构建项目来生成可执行文件。点击“生成”菜单,选择...
ILMerge是一个由微软提供的工具,它能够将一个或多个.NET程序集(包括DLL和EXE)合并到一个新的单一程序集中。这样做的好处包括: 1. **简化部署**:用户只需要运行一个文件,无需担心丢失或遗漏依赖的DLL。 2. **...
- 打包程序可以将源代码编译为可执行文件(.exe或.dll),同时包括所有依赖项,如库、配置文件、资源等。 - 打包有助于确保目标计算机上具有运行应用程序所需的所有组件。 - 通过创建安装程序,可以简化用户的...