wpf dll和exe合并成一个新的exe
微软有一个工具叫ILMerge可以合并dll exe等,但是对于wpf的应用程序而言这个工具就不好用了。我的这方法也是从国外一个博客上找来的。仅供大家参考。
第一步:把下面的代码写到你的项目文件的标准的Microsoft.CSharp下面,也就是.csproj的文件里
<Target Name="AfterResolveReferences">
<ItemGroup>
<EmbeddedResource Include="@(ReferenceCopyLocalPaths)" Condition="'%(ReferenceCopyLocalPaths.Extension)' == '.dll'">
<LogicalName>%(ReferenceCopyLocalPaths.DestinationSubDirectory)%(ReferenceCopyLocalPaths.Filename)%(ReferenceCopyLocalPaths.Extension)</LogicalName>
</EmbeddedResource>
</ItemGroup>
</Target>
第二步:把你需要引用的dll复制到你当前项目的Resources文件夹下面,并把他们作为嵌入式资源(dll的属性里有此设置),为了避免文件名冲突,把这些dll的后缀加上 resources (System.Windows.Interactivity.resources.dll)
第三步:通常WPF应用程序包含一个xaml文件,它充当一个神奇的入口点到应用程序和启动的第一个窗口。然而,xaml其实没那么神奇。如果你仔细看一下这些文件夹在您的项目文件夹obj,你会发现一个appg.cs文件,这是来自你的xaml。它包含一个正常的“静态空隙主要“c#入口点所以为了得到在WPF之前,所有您需要做的就是定义自己的入口点进入一个新类,做你需要,然后调用正常WPF入口点。添加一个类Program.cs并把它设置成程序的入口点。
第四步:构建Program.cs的代码
public class Program
{
[STAThreadAttribute]
public static void Main()
{
AppDomain.CurrentDomain.AssemblyResolve += OnResolveAssembly;
App.Main();
} private static Assembly OnResolveAssembly(object sender, ResolveEventArgs args)
{
Assembly executingAssembly = Assembly.GetExecutingAssembly();
AssemblyName assemblyName = new AssemblyName(args.Name); string path = assemblyName.Name + ".dll";
if (assemblyName.CultureInfo.Equals(CultureInfo.InvariantCulture) == false)
{
path = String.Format(@"{0}\{1}", assemblyName.CultureInfo, path);
} using (Stream stream = executingAssembly.GetManifestResourceStream(path))
{
if (stream == null)
return null; byte[] assemblyRawBytes = new byte[stream.Length];
stream.Read(assemblyRawBytes, 0, assemblyRawBytes.Length);
return Assembly.Load(assemblyRawBytes);
}
}
}
简单的四步,如果引用的dll中的版本有低于当前项目版本的话会有错误,我是直接把这个dll拿出来和合并后的exe放在一起了。或者把当前引用的dll版本统一掉。出现此问题最多的时候是引用的第三方的dll。
原文地址:http://www.digitallycreated.net/Blog/61/combining-multiple-assemblies-into-a-single-exe-for-a-wpf-application
wpf dll和exe合并成一个新的exe的更多相关文章
- 将两个列不同的DataTable合并成一个新的DataTable
/// <summary> /// 将两个列不同(结构不同)的DataTable合并成一个新的DataTable /// </summary> ...
- 多个DataTable的合并成一个新表
多个DataTable的合并成一个新表 参考:https://www.cnblogs.com/JuneZhang/archive/2011/12/11/2284243.html
- 将两个数组相同index的value合并成一个新的value组成一个新的数组
将两个数组相同index的value合并成一个新的value组成一个新的数组 前提: 这两个数组的长度相同 生成后的新数组长度也相同 返回值都是对象 把rows对象的key和value弄成两个数组, ...
- git将多个commit合并成一个新的commit
问题: 有以下commit: 323udd ede234 6e7s6e 要合并第一个和第二个commit 方法有二: 方法一 使用git rebase -i hash-id,-i表示以交互模式进行co ...
- C++->10.3.6.设有两个按升序排列的二进制文件a和b,将他们合并成一个新的升序二进制数据文件file。
#include<iostream.h> #include<stdlib.h> #include<string.h> #include<fstream.h&g ...
- java.lang.NoSuchFieldError: RAW_XML_FILE_HEADER,调用XWPFTemplate动态合并生成一个新的docx文档时报错
在使用 org.apache.poi 对office文件 根据表单内容和已上次的附件 动态合并成一个新的文档时,本地调试完全ok 但是发布倒Linux环境上就老是报这个错误java.lang.NoS ...
- 将多个jpg文件以追加形式合并成一个文件_delphi教程 bmp 合并 http://www.west.cn/www/info/58058-1.htm
将多个jpg文件以追加形式合并成一个文件_delphi教程 作者:网友供稿 点击:0 西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!云服务器 ...
- Delphi 中将一些 Dll等生成资源文件打包成一个独立的EXE程序方法步骤
资源文件一般为扩展名为res的文件,其自带的资源编译工具BRCC32.EXE(位于/Delphi/BIN目录下) 1.编写rc脚本文本 用记事本或其它文本编辑器编写一个扩展名为rc的文件,格式分别为在 ...
- Expression构建DataTable to Entity 映射委托 sqlserver 数据库里面金额类型为什么不建议用float,实例告诉你为什么不能。 sql server 多行数据合并成一列 C# 字符串大写转小写,小写转大写,数字保留,其他除外 从0开始用U盘制作启动盘装Windows10系统(联想R720笔记本)并永久激活方法 纯CSS打造淘宝导航菜单栏 C# Winform
Expression构建DataTable to Entity 映射委托 1 namespace Echofool.Utility.Common { 2 using System; 3 using ...
随机推荐
- uva 620 Cellular Structure
题目连接:620 - Cellular Structure 题目大意:给出一个细胞群, 判断该细胞的可能是由哪一种生长方式的到的, 输出该生长方式的最后一种生长种类, "SIMPLE&quo ...
- android https通过载入pfx证书获取数据
直接给代码吧.研究了几天才搞定...... public static final String CLIENT_KET_PASSWORD = "Ku6OpqKDfN4=305790" ...
- EasyUI - NumberBox组件
效果: html代码: <input type ="text" id ="box"/> JS代码: $(function () { $('#box' ...
- QFrame好像是万能的(可以随意画线,或者图片,放在其它元素之间做点缀,还可OnClick)
QFrame *fr2=new QFrame(this); fr2->setGeometry(0,140,90,40); fr2->setStyleSheet("backgrou ...
- QT+vs2010下改变可执行程序的图标
原地址:http://blog.163.com/tijijun@126/blog/static/6820974520134209457308/ 在解决方案下面的工程里,点击右键 ->选择[添加( ...
- Swift - 在界面上生成81个随机红,灰色圆点(SpriteKit游戏开发)
下面是生成一个“围住神经猫”游戏的初始场景: 1,界面下方会生成9*9共81个圆点,同时圆点内部添加文本标签显示索引 2,默认圆点为灰色,每行随机取两个点变为红色 3,奇数行和偶数行有一定的错位,错位 ...
- JDBC操作数据库的学习(1)
单单对数据库的操作,比如说MySQL,我们可以在命令行窗口中执行,但是一般是应用程序要操作数据库,因此我们应该在程序中的代码上体现对数据库的操作,那么使用程序应用如何操作数据库呢?那就要使用到数据库的 ...
- Node-Webkit作者王文睿:桌面应用的全新开发方式
摘要:最近两年,Node.js技术越来越火,基于它所开发的应用也纷纷出现在大家面前,其中Node-Webkit就是这样的一个开源框架,它允许开发者使用Web技术开发桌面应用. Node-Webkit是 ...
- sql server 2005 外围应用配置器
想要实现sql server 2005 远程连接数据库,我们必需要用到sql05上自带的外围配置器,以下是对它的一些配置上的介绍: 首先我们要打开sql05外围配置器,例如以下图: 打开后,我们如今就 ...
- 与众不同 windows phone (3) - Application Bar(应用程序栏)
原文:与众不同 windows phone (3) - Application Bar(应用程序栏) [索引页][源码下载] 与众不同 windows phone (3) - Application ...