2010-03-11 116 views
15

所以有时(常常!)要针对特定​​的.NET版本(比如3.0),但后来由于一些.NET服务包你进入类似的问题:避免.NET版本地狱

  • Dispatcher.BeginInvoke(Delegate, Object[]) < - 这在3.0 SP2(3.0.30618)
  • System.Threading.WaitHandle.WaitOne(Int32) <加入 - 这是在3.5 SP1,3.0 SP2,2.0 SP2加入

现在,这些是由JIT编译器检测,所以在Visual Studio中构建.NET 3.0不会保证它将运行在.NET 3.0系统上。

  • 确认每一个使用功能,或
  • 短限制你的开发环境,.NET 3.0(这吮吸,因为你必须开发其他项目也是如此)

避免使用扩展名的最佳方法是什么?

谢谢!

回答

4

此功能内置到Visual Studio的VS 2008 SP1的,也可在FxCop 1.36。请查看David Kean's blog post了解更多详情。

alt text http://davesbox.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/blog/ErrorList_5F00_3.png

+0

YEEEESS !!!!但不支持VS 2008 Pro ...ssssiiiiigggh – moogs 2010-03-18 10:15:58

+0

但是有fxcop!谢谢! – moogs 2010-03-18 10:25:27

+0

很高兴为您提供帮助。我更新了答案以包含对FxCop的引用。 – 2010-03-18 14:52:20

1

在发送发布之前,使用适合版本的Visual Studio编译您的应用程序,该版本与目标用户库的最小公分母相对应。

只需准备一台虚拟机,并说明Visual Studio 2005中没有SP,并在部署之前从那里编译解决方案。

5

微软倾向于认为,如果您安装了.NET XXX,那么您必须使用最新的Service Pack,因为Windows Update会将它们推送给您作为关键更新。我知道这是一个脆弱的假设,有时会失败,但这就是应该发生的事情。

我们的产品目前的目标是.NET 3.5 SP1,因此我们会惊奇地发现仍然运行.NET 3.5 RTM的目标环境。

+0

这是一种与硬件驱动程序结合使用。即使使用现成的非互联网PC,它也必须工作 – moogs 2010-03-16 04:10:25

+3

如果您的安装程序技术允许,您可以尝试将.NET 3.0 SP2嵌入您的安装程序中作为先决条件。例如,InstallShield允许您从网上下载或单独嵌入。 – 2010-03-16 08:44:53

0
+0

请说出你认为它可能有什么帮助。它看起来不相关。 – 2010-03-15 17:04:21

+0

通过控制版本控制。 – 2010-03-15 19:50:27

2

有一种告诉Windows使用.Net版本的方法。这多少有点像创建一个名为dllhost.exe.config在Windows文件\ SYSTEM32与xmllike:

<? xml version = "1.0" ?> 
<configuration> 
<startup> 
<SupportedRuntime version = XXXXXX> 
</startup> 
</configuration> 

参见:http://msdn.microsoft.com/en-us/library/w4atty68.aspx