除非make setup(将dll嵌入到exe),否则运行exe

时间:2011-06-04 10:20:16

标签: c# .net installation

  

可能重复:
  .NET windows application, can it be compressed into a single .exe?

我有一个项目,我在这个项目中使用了很多.dll文件。当我尝试在另一台计算机上运行我的项目时,它无法正常工作。因为我只使用.exe。我想我必须制作安装项目。但我想在不进行设置项目的情况下运行我的程序。如何将.dll文件嵌入到我的exe中? 我正在使用Visual Studio 2010。 顺便说一句,对不起我的英语,但谷歌翻译英语比我的更糟糕。 感谢。

3 个答案:

答案 0 :(得分:1)

您只需将带有exe文件的dll文件复制到同一目录中即可。 你可以使用ILMerge util

您可以从msdn

下载

答案 1 :(得分:1)

使用 ILMerge.exe ,您可以将EXE和DLL合并在一起。


您还可以使用 netz.exe 作为替代EXE压缩器&封隔器。

答案 2 :(得分:0)

在Visual Studio中右键单击您的项目,选择Project Properties - >资源 - >添加资源 - >添加现有文件... 并将以下代码包含在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/