C# 将.NET外部DLL组合到单个可执行文件中

C# 将.NET外部DLL组合到单个可执行文件中,c#,json,winforms,visual-studio,ilmerge,C#,Json,Winforms,Visual Studio,Ilmerge,这是一个简单的问题。如果Newtonsoft.Json.dll不在程序文件夹中,我就无法运行我的程序。为什么会这样?我尝试过添加引用,将文件添加到项目根目录,添加到资源文件夹,但没有任何效果。如何在程序文件夹中没有Newtonsoft.Json.dll的情况下运行程序?我正在开发一个Windows窗体应用程序 更新 问题解决了,多亏了spender向我介绍了一个非常好的NuGet软件包,它可以将第三方DLL组合到一个可执行的二进制文件中。对于想要创建独立应用程序的用户,只需使用ILMerge即可

这是一个简单的问题。如果Newtonsoft.Json.dll不在程序文件夹中,我就无法运行我的程序。为什么会这样?我尝试过添加引用,将文件添加到项目根目录,添加到资源文件夹,但没有任何效果。如何在程序文件夹中没有Newtonsoft.Json.dll的情况下运行程序?我正在开发一个Windows窗体应用程序

更新
问题解决了,多亏了spender向我介绍了一个非常好的NuGet软件包,它可以将第三方DLL组合到一个可执行的二进制文件中。对于想要创建独立应用程序的用户,只需使用ILMerge即可。快速、简单且非常有用。再见

通常,如果您的程序使用DLL,那么您需要在应用程序文件夹(或用户路径或GAC)中使用该DLL

分发多个文件的传统方法是使用安装程序。您可以使用或扩展名编写一个。现在,您的所有输出文件都安装在一个go中,同时安装了安装程序附带的所有其他功能。我非常喜欢这种方法

但是,还有其他选择:

  • 并将源代码复制到主项目中,然后将其编译到主程序集中(请确保检查许可证是否允许这样做)

  • 用于将所有程序集合并为一个二进制文件


如果您不想在程序中引用dll,您可以将其安装到客户端计算机上的GAC,但如果您只需要一些JSON序列化,我不知道您想要哪个上下文。您可以使用.Net安装的
JavascriptSerializer
类来切换您的功能吗


应用程序文件夹中有什么问题?你想要一个可执行文件的输出而不是别的吗?是的,我最喜欢的嵌入项目依赖项的工具是Fody Costura。它具有最小的设置并集成到构建中。它将依赖项(托管的、非托管的和混合模式的第三方程序集以及您自己的项目输出)压缩并打包为嵌入式资源,以便在正确操作的情况下进行单文件部署。我只想作为一个独立的程序运行。这将非常有用,但我需要使用JSON。这就是JavascriptSerializer所做的。。。创建并读取JSON。我看到您有一个使用ILMerge的解决方案,这是一个很好的工具,但是您可能希望尝试一下避免额外的构建复杂性,并坚持使用基类库。一旦你有了一个有效的解决方案,就很难做到:)谢谢你,但迟早我会需要这个工具。当我使用JavaScript序列化程序时,我没有正确的引用,所以我放弃并选择了ILMy.@ HyStuff:请考虑一个标题更改,它与JSON.NET不太相关,更多的是关于.NET应用程序与外部DLL的分布。