是否可以将预先存在的DLL嵌入到编译后的C#可执行文件中(这样您只有一个文件要分发)?如果有可能,我们将如何着手做这件事呢?

通常情况下,我对把DLL放在外面,让安装程序来处理一切都很好,但有几个同事问过我这个问题,我真的不知道.

推荐答案

我强烈建议使用Costura.Fody——到目前为止,这是在程序集中嵌入资源的最好、最简单的方法.它以NuGet套餐的形式提供.

Install-Package Costura.Fody

将其添加到项目后,它将自动将复制到输出目录的所有引用嵌入到程序集中.您可能希望通过向项目中添加目标来清理嵌入的文件:

Install-CleanReferencesTarget

您还可以指定是包含pdb、排除某些程序集,还是动态提取程序集.据我所知,也支持非托管程序集.

Update

目前,一些人正试图增加support for DNX人.

Update 2

对于最新的Fody版本,您需要安装MSBuild 16(因此使用Visual Studio 2019).Fody版本4.2.1将执行MSBuild 15.(参考:Fody is only supported on MSBuild 16 and above. Current version: 15)

.net相关问答推荐

将Visual Studio更新到v17.9.3后,IDE关闭,dotnet.exe命令报告致命错误.内部CLR错误.(0x80131506)

[x.x.x,)在Packages.lock.json依赖项中是什么意思?

在 .NET 7 项目上设置 Sentry 时遇到问题

如何计算给定2个字符串的距离相似性度量?

.NET 中的线程安全集合

Style 和 ControlTemplate 的区别

如何以编程方式判断类型是 struct 还是类?

使用 IIS Express 托管网站(临时)

我什么时候应该在 C# 中使用使用块?

如何找到 ManualResetEvent 的状态?

大型 WCF Web 服务请求因 (400) HTTP 错误请求而失败

隐式与显式接口实现

C# 属性实际上是方法吗?

在 C# 中与块等效?

C# - 你如何停止计时器?

一个接口是否应该继承另一个接口

资源(.resx)文件有什么好处?

更改 SqlConnection 超时

如何从 HashSet 中检索实际项目?

多个列表与 IEnumerable.Intersect() 的交集