【问题标题】:If my code references an assembly when built, do I need to distribute it?如果我的代码在构建时引用了一个程序集,我是否需要分发它?
【发布时间】:2013-06-24 04:23:15
【问题描述】:

我有一些在两种机器上运行的通用代码:

  • .NET 2.0 在服务器型机器上的完整框架
  • .NET 2.0 Compact Framework 在 Windows CE 设备上

我有一项功能正在添加到完整框架设备中,但该代码无法在紧凑型框架设备上运行。

我还需要将引用的 dll 分发到 Windows CE 设备吗?

考虑后,由于代码在不同的文件中,我将省略 Windows CE 解决方案中的文件,但我仍然希望从技术角度回答上述问题。

标记

【问题讨论】:

    标签: .net clr assemblies


    【解决方案1】:

    即使您有时使用一些代码,实际上也不必这样做 :-) 例如。如果您使用常量或枚举,则不需要 dll,除非您使用使用枚举类型的代码。 所以一般来说,如果你有没有运行的代码,你可能不会分发 dll。 但有时你可能有 typeloadexception,如果你的代码是这样的

    if (condition)
      use type from another library
    else
     use type from current library
    

    如果条件不是某个编译相关​​常量,JITer 可能无法做出正确的假设,即 代码不会运行,然后它会尝试加载类型,然后你有异常。 在这种情况下,我会使用条件编译,像这样

    #if COMPACT
    //use type here
    #else
    //not use type here
    #endif
    

    【讨论】:

      【解决方案2】:

      如果您使用早期绑定引用您的库(右键单击项目 -> 添加引用),您需要将其与代码一起分发。这是因为代码的元数据将引用引用的库。如果被引用的库以相同的方式引用其他库,为了使事情变得更有趣,它们也应该可供 CLR 定位和加载。..

      但是,如果您使用反射和发现等技术并在运行时进行绑定,您将能够加载应用程序而 CLR 无法找到库,直到您的代码需要它(通过反射调用它)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-22
        • 2021-11-03
        • 2014-06-07
        • 2014-12-18
        • 2020-03-28
        • 1970-01-01
        • 2020-11-05
        • 1970-01-01
        相关资源
        最近更新 更多