簡體   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