如果我们在安装了.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,并强制我们的应用程序使用它吗?
System.Xml.dll
,看起来从SP1发货组件比重写我们的应用程序要容易得多。 - Dmitrii Lobanov