C#静态库

5
当我在c语言中编程时,动态库和静态库的区别在于您在makefile中编译程序的方式。众所周知,dll不是硬编码到应用程序中的,而是在单独的文件中。这使它们非常适合更新和向程序添加功能。编译时静态库被硬编码到应用程序中。这非常适合将来不需要更改的行为,例如安全性或基本通信。
我知道如何在c#中创建和调用.dll文件,但我需要创建并使用静态库。有没有方法可以在不将类库复制/粘贴到每个项目中的情况下实现这一点?我有很多使用这些静态库的项目,我希望在引入更改时避免更改所有类库。
我已经搜索了谷歌,但没有找到解决方案。
非常感谢...

我认为你要找的内容在这篇帖子中这里,我是通过谷歌搜索找到的... - mtijn
定义“需要”,因为我不认为任何人真的需要这样做。 - Justin
你可以将你的库注册到GAC中,然后所有的项目都能够从同一位置调用dll文件。当你对“静态”库进行更改时,只要进行新的构建,所有的项目都会被更新。如果我理解问题正确的话,就是这样。 - Jethro
3个回答

6
你可以使用 ILMerge 来实现最接近的效果,但是你真的需要吗?除非你有一个可以部署为单个可执行文件的应用程序,否则无论你有一个 DLL 还是十个 DLL 都没有太大关系。对于大多数情况,我建议你将它们保留为普通的类库。
请注意,ILMerge 与 "静态链接" 并不完全相同 - 它仍然可以将所有代码捆绑到一个文件中,但是 .NET 中的链接过程在根本上与原生代码的链接过程有所不同。

2

是的,您可以使用诸如ILMerge之类的工具,将多个程序集的IL代码合并成一个程序集。像NuGenUnify这样的GUI前端使使用ILMerge更加简单明了。


2
根据您的需求,除了ILMerge之外,您还可以使用“.NET模块”。这篇博客提供了一些关于netmodules和程序集之间的区别的信息。
但请注意,Visual Studio不直接支持netmodules。您基本上必须手动使用C#编译器的/target:module选项(可能还需要使用程序集链接器al.exe)来使用它们。
据我所知,它们是创建程序集的唯一选项,其中不同的源文件来自不同的.NET语言(VB、C#等)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接