【问题标题】:Why does C# not have C++ style static libraries? [closed]为什么 C# 没有 C++ 风格的静态库? [关闭]
【发布时间】:2009-12-02 20:59:07
【问题描述】:

最近我一直在开发一些共享一些通用代码的小型 .NET 应用程序。该代码引入了一些接口来抽象出I/O 单元测试调用。

我希望应用程序是独立的 EXE,没有外部依赖项。这似乎是静态库的完美用例。想想看,第三方控制供应商也可以从这种模式中受益。

静态库中是否有一些我遗漏的隐藏问题?

C# 设计者有什么理由将它们排除在外吗?

编辑:我知道 ILMerge,但它没有提供与静态库相同的便利。

【问题讨论】:

    标签: c# c++ static-libraries


    【解决方案1】:

    .NET 实际上确实支持静态的道德等价物 图书馆。它被称为网络模块(文件扩展名通常是 .net 模块)。在blog post 中了解更多信息。 请注意,Visual Studio 不太支持它 构建工具链。我认为extension methods 是 问题也是如此。 ILMerge 是获得此功能的更好工具 完成。

    【讨论】:

    • 这很有趣,谢谢。
    【解决方案2】:

    这与 C# 没有直接关系,而是与整个 .NET 保护伞相关。当然,可以使用ILMerge 合并程序集,但可惜它仍然是一个研究项目,但至少它的许可证允许用于商业活动。除此之外,运行时 (CLR) 无法合并为单个可执行文件,目标平台仍需要安装 .NET。

    编辑:

    在您使用 ILMerge 编辑帖子之前,我正在输入此内容。我可能错了,但在运行时避免使用 .NET 样式的动态链接并没有额外的好处。将附属程序集与可执行文件放在一起没有任何问题。 Microsoft 不建议将它们放入 GAC。

    【讨论】:

    • 我知道它没有缺点,但只提供一个exe更容易。
    【解决方案3】:

    使用静态库的缺点是运行时提供程序 (MS) 无法对其进行修补。

    例如,如果您使用静态 MFC 库并且在 MFC 静态库中发现了安全问题或其他错误,MS 无法对其进行修补(代码已经在您的可执行文件中)。使用共享 Dll 可以在操作系统级别轻松打补丁,而无需您关心。

    当然,共享库有一个小缺点:需要依赖并且必须在系统上安装它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-31
      • 2011-09-22
      • 1970-01-01
      • 2013-02-12
      • 1970-01-01
      相关资源
      最近更新 更多