[英]Project WPF .Net 3.5 in visual studio 2010 cause error
[英]Visual Studio 2010 project using .NET 3.5 seems to allow methods in System.Xml that are only available from .NET 4.0
我最近在某些机器上遇到了以下异常。
未处理的异常:System.MissingMethodException:找不到方法:'Void System.Xml.Xsl.XslCompiledTransform.Transform(System.Xml.XPath.IXPathNavigable,System.Xml.Xsl.XsltArgumentList,System.Xml.XmlWriter,System.Xml.XmlResolver )”。
从这个错误可以清楚地看出,我们正试图在System.Xml.Xsl.XslCompiledTransform
类上使用一个不存在的方法。
该错误似乎与Windows XP计算机隔离,无论是否存在.NET Framework 4.0,但在我尝试过的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中?
我怀疑我的环境有问题,但我不知道为什么。
最有可能的是,您只在其失效的计算机上安装了.NET Framework 3.5 Client Profile,并在其运行的计算机上安装了完整的.NET Framework 3.5。
我可以在定位完整框架时编译Windows 7上的代码,但不能在定位客户端配置文件时编译代码。
此时文档似乎不正确。
该方法肯定在我的2.0 GAC中,但是,它完全有可能是由其中一个服务包添加的。 由于4.0与2.0隔离(包括3.0和3.5),因此这些机器具有4.0并不重要。 重要的是它们具有的2.0变体(特别是在XP机器上):
我的猜测是,它也不因为一次意外的文件中显示,或因为它不是在核心框架释放。 有趣的是,该方法也没有智能感知评论,这是非常不寻常的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.