是否可以将库添加为资源 C#

Is it possible to add a library as a resource C#

我正在使用 iTextSharp pdf 库在 C# 中创建 pdf 文件。是否可以将库文件添加到资源中(在 "projektname"-properties 下),这样我就可以简单地为用户提供 .exe 而无需他们安装程序。

这是我尝试从调试文件夹 运行 exe 而不安装它时遇到的错误(抱歉是德语)。

我如何添加这些文件,它是否有效,或者有没有更好的方法。

是的,你可以:

  1. 打开项目属性,转到资源选项卡,然后 select "Add Resource > Add existing file" ("Ressource hinzufügen > Vorhandene Datei hinzufügen")。 Select DLL。它应该出现在资源中的某处,在 "files" 或 "other".
  2. 将其从资源复制到文件如下

在您的代码中,检查应用程序启动时它是否存在。以下假设您使用的是 WinForms。如果没有,也可以在WPF中添加代码Appclass。 WPF 应用程序启动时调用的方法可以重写。

static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    string dllPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "filenameofdll.dll");
    if (!File.Exists(dllPath))
    {
        byte[] fileBytes = Properties.Resources.<resourcename>;
        File.WriteAllBytes(dllPath, fileBytes);  
    }

    Application.Run(new Form1());
}
上面代码中的

<resourcename> 将是您的资源名称。它应该由 IntelliSense 自动完成。

只要 DLL 仅在上述代码执行后使用,这应该可以工作。 DLL 应该只在创建 DLL 的 class 的第一个实例时加载,所以你应该没问题。

免责声明
我不知道这是否对许可有影响!请确保您没有做任何违法的事情。另外:以上内容仅在应用程序对该文件夹具有写权限时才有效。

在此post解决了类似的问题。
dll转exe的方法

How to bundle MahApps.Metro into single exe

此外,您可以使用 IL 合并

http://www.codeproject.com/Articles/9364/Merging-NET-assemblies-using-ILMerge