wpf dll和exe合并成一个新的exe

原文: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

时间: 2024-08-22 14:18:33

wpf dll和exe合并成一个新的exe的相关文章

loop-在abap中将内表中的多行结果合并成一个新字符串

问题描述 在abap中将内表中的多行结果合并成一个新字符串 如题, 原题要求先拆分一个随意的英文string,然后loop循环. 代码如下: DATA: str1 TYPE string, itab TYPE TABLE OF string, text TYPE string VALUE 'Presentation styles of search results have been constantly changing in these years, which affect users''

如何把多个Excel工作簿合并成一个新的工作簿

具体操作 1.将需要合并的excel工作簿文件放置在一个文件夹中. 每个文件夹中的工作簿都输入了简单的内容. 2.在该文件夹中,新建立一个新的excel工作簿文件.重命名为8. 3.打开新建立的excel工作簿文件8.按Alt+F11或者将鼠标移动到下方工作表名称sheet1上右键,选择查看代码. 4.在弹出的代码编辑窗口中,输入代码.注意:通过快捷键Alt+F11打开的窗口如下没有直接复制代码的面板,需要点击左上方的工程-VBA project模块,双击sheet1,即可打开代码窗口.而步骤3

多个DataTable的合并成一个新表

本文转载:http://www.cnblogs.com/JuneZhang/archive/2011/12/11/2284243.html

word2016问过文档怎么合并成一个并设置格式统一?

word2016问过文档怎么合并成一个并设置格式统一?   1.首先建立一个Word文档,以便于将需要整个的文档归入其中 2.打开文档,在[插入]工具下打开[对象]的下拉选框. 3.下下拉复选框中选择[文件中的文字] 4.然后在弹出的对话框中,选择需要合并的文档(不要把新建的文档选中了) 5.在选择文档的时候需要注意的是,如果想按照一定顺序合并到新的文档的话,那在选择的时候就要按照顺序选择,否则文档问按照你选择的顺序排列起来. 6.此时合并进来额文档可能因为之前编辑的时候才用了不同的格式,我们需

Excel如何多列内容合并成一列

  如下图所示的表格中有4列数据(可以有任意多列),现要求合并成一列显示.如下图所示. 操作步骤: 1.在A6单元格输入公式=B1,如下图所示. 2.复制A6的公式到A6:B21区域,如下图所示. 复制完后你会发现多列的数据已全部显示在A列中,剩下的工作就是把公式转换成数据,删除B:D列即可. 总结:本技巧是使用了类"循环引用"的方法,多列互相引用.这种方法在很多技巧中都有意想不到的作用.

sql-2个名字一样,但是id不一样的数据,想合并成一条,java该怎么写?

问题描述 2个名字一样,但是id不一样的数据,想合并成一条,java该怎么写? 图片说明 如图,这条数据放在一个list里面,想把名字一样的2条数据合并成一条,即变成 1,2 机加工 13 机加工(立式) 二条变成一条数据,中间用,分割id. 请问应该怎么写java语句或者sql语句?! 解决方案 你这算什么数据,根本就是文本,毫无规律可言. 你人知道1 2 13是id, 机加工是名字,但是计算机哪里知道.你先得用正则表达式或者什么办法,把你的字符串转换成准确无误的两列,名字.id,并且去掉乱七

.NET将多页pdf合并成一页

问题描述 怎么用iTextSharp将多页pdf(数据量少)合并成一页?能有其他方法都行 解决方案 解决方案二:不知道你PDF的多页是否是指在一个PDF文件中的多页,那数据量少如何能得知合并后的内容一页真的容纳的下?假设PDF是一个文件中的多页而且真的合并后在一页中容纳的下,你可以选择把每页的内容提取出来再重新保存到PDF的某一新页面中.可以用下这个.下载添加引用到project中.这有篇介绍,提取图片并保存到PDF的.解决方案三:用Aspose.Pdf组件就可以了解决方案四:@Eiceblue

php-想把两个数组用PHP合并成一个怎么做?(我是PHP菜鸟,望回答!)

问题描述 想把两个数组用PHP合并成一个怎么做?(我是PHP菜鸟,望回答!) 例如: 数组A ={['1001','A'],['1002','B'],['1003','C']} 数组B ={['1001','A','01'],['1002','B','02'],['1003','C','03'],['1001','A','04']} 想得到的结果是: 数组C={['1001','A','01,04'],['1002','B','02'],['1002','B','03']} 解决方案 追加合并用

插件-各位大仙,将多个单独EXE打包成一个安装程序怎么解决

问题描述 各位大仙,将多个单独EXE打包成一个安装程序怎么解决 各位大仙: 最近在使用个程序过程中,遇到需要安装多个插件,安装太过于繁琐,求教各位大侠指点.谢谢 运行一个程序,需要安装.NET.Silverlight还有自己用C#写的两个EXE程序,在使用过程大家反映安装太过复杂了,想求教大仙指点用什么打包工具,怎么可以将多个EXE打包成一个安装文件,并能顺序自动安装.谢谢.各位大仙: 解决方案 就是打包,部署呗,常用的是vs,不过我发现inno也很不错. 解决方案二: 我看下了下INNO他只能