我们在安装了 .NET 2.0 SP1 的机器上针对 .NET 2.0 构建了应用程序。System.Xml.dll
该应用程序引用了一些包含在 .NET SP1(即)中的标准 .NET 程序集。
如果我们在具有 .net 2.0 RTM 的计算机上运行此应用程序,该应用程序运行良好,它甚至使用System.Xml.dll
汇编。但是,当它尝试使用 2.0 RTM 中不存在但 2.0 SP1 中存在的方法时,应用程序会抛出MethodNotFoundException。
我的问题是:运行时如何解析 System.Xml.dll?
程序集版本的修订号不同(但主要、次要和构建部分是相同的)。这意味着 2.0 RTM 和 2.0 SP1 程序集在程序集绑定过程方面是不同的。运行时应尝试查找 System.Xml.dll 2.0.50727.1378
,但它只能找到2.0.50727.42
. 然后程序集绑定过程应该失败,因为 Machine.config 中不能有任何发布者策略或重定向。但绑定工作正常。怎么可能?
上述问题之后的另一个问题。
我们不能强制所有客户在他们的计算机上安装 .NET 2.0 SP1。如果我们从 .NET 2.0 SP1 发布 System.Xml.dll,我们如何强制我们的应用程序使用我们的应用程序附带的 System.Xml.dll?
更新 1:看起来 System.Xml.dll 版本是 2.0.0.0,而不是 2.0.50727.x。这描述了运行时成功解决它的原因。但第二个问题仍然适用:我们能否将 SP1 中的 System.Xml.dll 与我们的应用程序一起发送并强制我们的应用程序使用它?