繁体   English   中英

使用.NET 3.5的Visual Studio 2010项目似乎允许System.Xml中仅可从.NET 4.0获得的方法

[英]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机器上):

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

我的猜测是,它也不因为一次意外的文件中显示,或因为它不是在核心框架释放。 有趣的是,该方法也没有智能感知评论,这是非常不寻常的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM