检查运行我的代码所需的.NET版本

时间:2010-09-01 09:23:04

标签: c# .net missingmethodexception

我正在用C#编写代码库,并且测试PC没有安装正确的.NET 3.5 Service Pack来运行代码(与此处发生的问题相同:Exception is occuring only on my machine: Method not found: WaitHandle.WaitOne(Int32))。我想知道是否有一个静态代码分析工具,我可以在我的代码中运行,它将告诉我每个单独模块(或程序集)所需的最低.NET版本。

感谢。

2 个答案:

答案 0 :(得分:3)

项目属性 - >应用程序 - >目标框架。

答案 1 :(得分:2)

我不知道任何静态分析工具,但这是我发现的,基于MSDN文档和一些博客文章:

  • VS 2008 / VS 2008 SP1 + / VS 2010“.NET Framework 2.0” - .NET 2.0 RTM
  • VS 2008 / VS 2008 SP1 + / VS 2010“.NET Framework 3.0” - .NET 3.0 RTM
  • VS 2008“.NET Framework 3.5” - .NET 3.5 RTM
  • VS 2008 SP1 +“.NET Framework 3.5”,引用System.Data.Entity.dll或使用ClickOnce - .NET 3.5 SP1
  • VS 2008 SP1 +“.NET Framework 3.5”,未引用System.Data.Entity.dll且未使用ClickOnce - .NET 3.5 RTM
  • VS 2010“.NET Framework 3.5” - .NET 3.5 SP1
  • VS 2008 SP1 +“.NET Framework客户端配置文件” - .NET 3.5 SP1(客户端)
  • VS 2010“.NET Framework 3.5客户端配置文件” - .NET 3.5 SP1(客户端)
  • VS 2010“.NET Framework 4.0” - .NET 4.0 RTM
  • VS 2010“.NET Framework 4.0客户端配置文件” - .NET 4.0 RTM(客户端)

注意:

  • VS 2008附带.NET 3.5 RTM; VS 2008 SP1随.NET 3.5 SP1一起提供; VS 2010附带.NET 4.0 RTM。
  • 除非单独安装,否则VS 2010无法定位早期版本。
  • 客户端配置文件是在.NET 3.5 SP1中引入的
  • VS 2010是第一个具有可扩展多目标的版本(因此 - 理论上 - 它将能够在没有VS更新的情况下定位未来的 .NET版本。)

我相信.NET 3.5 SP1是唯一增加了重要功能的服务包,因此它是唯一会导致MissingMethodException问题的服务包。例如,这意味着3.0 RTM,3.0 SP1和3.0 SP2具有相同的公共API。我没有找到明确的确认,但“.NET中的新功能”文档仅涵盖2.0 / 3.5 / 3.5SP1 / 4.0,因此这是一个合乎逻辑的结论。

VS 2008 SP1有一些关于“.NET Framework 3.5”的奇怪规则(仅在实际使用时尝试定位SP1),但VS2010仅支持定位.NET 3.5 SP1。

来源: