我有一些在两种机器上运行的通用代码:
- 服务器类型机器上的 .NET 2.0 完整框架
- Windows CE 设备上的 .NET 2.0 Compact Framework
我有一项功能正在添加到完整的框架设备中,但该代码不会为紧凑的框架设备运行。
我还需要将引用的 dll 分发到 Windows CE 设备吗?
经过考虑,由于代码位于不同的文件中,我将省略 Windows CE 解决方案中的文件,但我仍然希望从技术角度回答上述问题。
标记
我有一些在两种机器上运行的通用代码:
我有一项功能正在添加到完整的框架设备中,但该代码不会为紧凑的框架设备运行。
我还需要将引用的 dll 分发到 Windows CE 设备吗?
经过考虑,由于代码位于不同的文件中,我将省略 Windows CE 解决方案中的文件,但我仍然希望从技术角度回答上述问题。
标记
如果您使用早期绑定引用您的库(右键单击项目 -> 添加引用),您需要将它与代码一起分发。这是因为代码的元数据将引用引用的库。如果引用的库以相同的方式引用其他库,为了使事情变得更加有趣,它们也应该可供 CLR 定位和加载。
但是,如果您使用反射和发现等技术并在运行时进行绑定,您将能够加载应用程序而 CLR 无法找到库,直到您的代码需要它(通过反射调用它)
即使您有时使用某些代码,实际上也不必这样做:-) 例如,如果您使用常量或枚举,则不需要 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