最近我一直工作在某些共同的代码一些小的.NET应用程序。该代码已经推出抽象掉 I / O单元测试调用某些接口。

我想要的应用程序是独立的EXE没有外部的依赖。这似乎像是一个完美的使用情况静态库。试想想,它的第三方控制供应商可以受益于这种模式了。

是否有与静态库一些隐藏的脏东西,我已经错过了吗?

是否有任何理由,C#的设计者留下出来?

编辑:我知道ILMerge的,但它不提供相同的便利为静态库

有帮助吗?

解决方案

.NET事实上确实支持静态的道德等效 图书馆。这就是所谓的一个netmodule(文件扩展名通常为 .netmodule)。了解更多关于它在这个博客帖子。 要注意的是它没有很好地在Visual Studio支持 构建工具链。我想扩展方法是 问题为好。 ILMerge是更好的工具来得到这个 完成。

其他提示

此没有直接关系到C#,但对整个.NET伞。当然,这是可能的合并使用装配 ILMerge ,但很可惜它仍然是一个研究项目,但至少它的许可证允许用于商业活动。除此之外,运行时(CLR)不能被合并成一个单一的可执行文件,目标平台仍然需要安装.NET。

编辑:

我打字这个您编辑与ILMerge在发布信息之前。我可能是错的,但没有从避免运行时的.NET风格的动态链接额外的好处。这没有什么错把卫星组件与可执行在一起。 Microsoft不建议把他们在GAC。

使用静态库具有的缺点在于它不是由运行时提供者(MS)。跳接

例如,如果你使用静态MFC库和securify问题或其他错误在MFC静态库被发现,MS不能修补它(代码已经在您的可执行文件)。使用共享DLL允许在OS水平的容易补丁没有你关心这一点。

当然具有共享库具有小的缺点:一个依赖取并且必须安装他们在系统上

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top