最近、一部のマシンで次の例外が発生しました。
未処理の例外: 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 に存在しないはずのこのメソッドをコードで使用できるのはなぜですか?
私の環境に何か問題があるのではないかと疑っていますが、その理由がわかりません。