2009-10-05 78 views
4

什么可以是问题,如果我建立一个解决方案,所有的projets是targetFrameworkVersion = 2.0,但一个在与targetFrameworkVersion = 3.5和C#.NET框架版本

的3.5功能
  1. 没有使用
  2. 一些使用3.5的功能,但调用3.5代码的类从未实例化
  3. 一些3.5特性用于某些类中,但这些类实例化但3.5中的代码从未调用过
  4. 3.5代码被调用
+0

您是否在使用任何构建工具?或Visual Studio? – abhilash

+0

取决于项目的视觉工作室或团队系统服务器buil – Toto

+0

您可以在不实例化类的情况下使用.NET 3.5的哪些功能?或者你在谈论C#3.0? –

回答

1

这取决于你的意思是“功能”。有像var关键字和lambda表达式这样的编译时功能,并且像LINQ或WCF这样的运行时功能需要.NET 3.x运行库中的库。

我假设你使用Visual Studio 2008,它将处理所有的编译时功能。如果你正在使用的是编译时功能,那么在所有情况下,一切都会正常工作。我在当前的项目中经常这样做。

如果您正在使用运行时功能,那么我相信这是它如何抖了出来:

  1. 事情会只是工作。
  2. 我认为这也会起作用。
  3. 它取决于何时静态函数被打印,以及静态函数中是否有任何3.5库引用代码。
  4. 当包含3.5库函数的函数被调用时,可能MissingMethodException

如果您打算使用运行时功能,我只需在App.config中添加一个密钥,以便运行时需要3.5运行时,它会检查启动如果它不存在,就会炸弹。那么你不需要弄清楚所有这些排列,你的应用程序就会更加稳定。

+0

好吧,我在全球范围内也一样。我主要关心的是2和3个运行时功能。我想知道是否有必要检查所有组件以及何时检查。 – Toto

+0

那么,问题是你正在编译一个明显安装了3.5框架的机器。所以在一个DLL中的所有引用都能正常工作和编译。但是,然后你正在加载(并JITting)该DLL可能会或可能不会安装3.x运行时的机器上。 CLR通过C#Jeffery Richter对所有这些活动何时发生进行了很好的讨论,并且是获得确切答案的最佳选择。 IIRC,当一个函数被打乱时,你只会遇到问题,并且函数在第一次被调用时被抛出。 – Lee

+0

好的,所以如果在所有的客户端机器上安装3.5框架,1,2,3,4都可以使用? – Toto

0

首先,你需要知道你的目标实际上是.NET 2.0 SP1

您的项目如何相关?你有没有建立在.NET 2.0下的引用.NET 3.5项目的项目(反之亦然)?

+0

我都有。 3.5引用2.0和2.0引用3.5 – Toto