![](/img/trans.png)
[英]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.