3

最近、一部のマシンで次の例外が発生しました。

未処理の例外: 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存在しないクラスでメソッドを使用しようとしていることは明らかです。

このエラーは、.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 Client Profile のみをインストールし、動作するマシンには完全な .NET Framework 3.5 をインストールしました。

完全なフレームワークを対象とする場合は Windows 7 でコードをコンパイルできましたが、クライアント プロファイルを対象とする場合はコンパイルできませんでした。

この時点でドキュメントが正しくないようです。

于 2012-09-19T11:17:56.757 に答える
2

その方法は間違いなく私の 2.0 GAC に含まれていますが、サービス パックの 1 つによって追加された可能性は十分にあります。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 に答える