是否可以将库添加为资源 C#
Is it possible to add a library as a resource C#
我正在使用 iTextSharp pdf 库在 C# 中创建 pdf 文件。是否可以将库文件添加到资源中(在 "projektname"-properties 下),这样我就可以简单地为用户提供 .exe 而无需他们安装程序。
这是我尝试从调试文件夹 运行 exe 而不安装它时遇到的错误(抱歉是德语)。
我如何添加这些文件,它是否有效,或者有没有更好的方法。
是的,你可以:
- 打开项目属性,转到资源选项卡,然后 select "Add Resource > Add existing file" ("Ressource hinzufügen > Vorhandene Datei hinzufügen")。 Select DLL。它应该出现在资源中的某处,在 "files" 或 "other".
下
- 将其从资源复制到文件如下
在您的代码中,检查应用程序启动时它是否存在。以下假设您使用的是 WinForms。如果没有,也可以在WPF中添加代码App
class。 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
我正在使用 iTextSharp pdf 库在 C# 中创建 pdf 文件。是否可以将库文件添加到资源中(在 "projektname"-properties 下),这样我就可以简单地为用户提供 .exe 而无需他们安装程序。
这是我尝试从调试文件夹 运行 exe 而不安装它时遇到的错误(抱歉是德语)。
我如何添加这些文件,它是否有效,或者有没有更好的方法。
是的,你可以:
- 打开项目属性,转到资源选项卡,然后 select "Add Resource > Add existing file" ("Ressource hinzufügen > Vorhandene Datei hinzufügen")。 Select DLL。它应该出现在资源中的某处,在 "files" 或 "other". 下
- 将其从资源复制到文件如下
在您的代码中,检查应用程序启动时它是否存在。以下假设您使用的是 WinForms。如果没有,也可以在WPF中添加代码App
class。 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