我最近在某些机器上遇到了以下异常。
未处理的异常: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 中不应该存在这种方法?
我怀疑我的环境有问题,但我不知道为什么。