3

我最近在某些机器上遇到了以下异常。

未处理的异常:System.MissingMethodException:找不到方法:'无效 System.Xml.Xsl.XslCompiledTransform.Transform(System.Xml.XPath.IXPathNavigable,System.Xml.Xsl.XsltArgumentList,System.Xml.XmlWriter,System.Xml.XmlResolver )'。

从这个错误中可以清楚地看出,我们正在尝试对System.Xml.Xsl.XslCompiledTransform不存在的类使用方法。

该错误似乎与存在或不存在 .NET Framework 4.0 的 Windows XP 机器隔离,但适用于我尝试过的 Windows 7 机器(都有 3.5 和 4.0)。

阅读文档,我们可以看到这里使用的签名在 .NET 4.0 中可用,但在更早的版本中不可用。

在新的 .NET 3.5 控制台应用程序中使用以下代码,我尝试以几种不同的方式编译项目。

using System;
using System.Xml.XPath;
using System.Xml.Xsl;

namespace SystemXmlTestTool
{
    class Program
    {
    static void Main(string[] args)
    {
        var transform = new XslCompiledTransform();

        try
        {
            transform.Transform((IXPathNavigable)null, null, null, null);
        }
        catch (Exception e)
        {
            Console.WriteLine(e.GetType().Name);
            Console.WriteLine(e.Message);
        }

        Console.ReadKey();
    }
    }
}

通过运行

C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe /target:clean
C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe /target:build

在 Windows 7 机器上(以及通过 Visual Studio 2010 编译),项目将成功编译。

如果我在 Windows XP 机器(也安装了 .NET Framework 4.0)上执行相同操作,我会收到一个编译器警告,告诉我很明显。

归根结底的问题是;为什么 Windows 7 机器(多台)上的 Visual Studio 2010/MSBuild 允许我在我的代码中使用此方法,而 .NET Framwork 3.5 中不应该存在这种方法?

我怀疑我的环境有问题,但我不知道为什么。

4

2 回答 2

7

最有可能的是,您只在它失败的机器上安装了 .NET Framework 3.5 客户端配置文件,而在它工作的机器上安装了完整的 .NET Framework 3.5。

当以完整框架为目标时,我可以在 Windows 7 上编译代码,但在以客户端配置文件为目标时不能。

此时文档似乎不正确。

于 2012-09-19T11:17:56.757 回答
2

该方法肯定在我的 2.0 GAC 中,但是,它完全有可能是由其中一个服务包添加的。由于 4.0 与 2.0(包括 3.0 和 3.5)是隔离的,所以那些机器有 4.0 并不重要。重要的是它们拥有的 2.0 版本(特别是在 XP 机器上):

  • 2.0 - 使用 SP1?与 SP2?
  • 3.0 - 使用 SP1?与 SP2?
  • 3.5 - 使用 SP1?

我的猜测是它没有显示在文档中,要么是因为事故,要么是因为它不在核心框架版本中。有趣的是,该方法也没有智能注释,这很不寻常。

于 2012-09-19T11:31:14.870 回答