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

时间:2016-09-06 13:02:18

标签: c# itext

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

iTextSharp

这是我在尝试简单地从调试文件夹运行exe而不安装它时出现的错误(对不起它的德语)。

error box

我如何添加文件,是否有效或有更好的方法。

2 个答案:

答案 0 :(得分:4)

是的,你可以:

  1. 打开项目属性,转到资源选项卡,然后选择“添加资源>添加现有文件”(“Ressourcehinzufügen> VorhandeneDateishinzufügen”)。选择DLL。它应该出现在资源的某个位置,可以在“文件”下面,也可以在“其他”下面。
  2. 将资源从资源复制到文件,如下所示
  3. 在您的代码中,检查应用程序启动时是否存在。以下假设您使用的是WinForms。如果没有,代码也可以添加到WPF App类。有一种方法可以覆盖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,所以你应该没问题。

    <强>声明
    我不知道这是否有许可影响!请确保你没有做任何违法的事情。另外:只有在应用程序对文件夹具有写入权限时,上述操作才有效。

答案 1 :(得分:1)

在这篇文章中解决了类似的问题 如何将dll放入exe中的方法。

How to bundle MahApps.Metro into single exe

此外,您可以使用IL合并

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