避免.NET版本混乱问题

15

有时(经常!)您想要针对特定的.NET版本(比如3.0),但由于某些.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(这很糟糕,因为您还需要为其他项目开发)

有什么最好的方法可以避免使用扩展功能吗?

谢谢!

5个回答

5

微软通常认为,如果您安装了.NET XXX,则必须安装最新的服务包,因为Windows Update会将它们作为关键更新推送给您。我知道这是一个脆弱的假设,有时会失效,但这就是应该发生的事情。

我们的产品目前针对.NET 3.5 SP1,因此我们会很惊讶地发现目标环境仍在运行.NET 3.5 RTM。


这在某种程度上与硬件驱动程序配合使用。它必须能够在即使是非联网的现成电脑上工作。 - moogs
3
如果您的安装程序技术允许,您可以尝试将.NET 3.0 SP2作为前提条件嵌入到您的安装程序中。例如,InstallShield允许您从Web上下载它或者作为独立文件嵌入。 - Christian Hayter

4

很高兴能够提供帮助。我更新了答案,同时包括对FxCop的引用。 - Jerry Bullard

2
有一种方法可以告诉Windows使用哪个.NET版本。类似于在Windows\System32下创建名为dllhost.exe.config的文件,其中包含XML格式的内容:
<? xml version = "1.0" ?>
<configuration>
<startup>
<SupportedRuntime version = XXXXXX>
</startup>
</configuration>

请查看:http://msdn.microsoft.com/en-us/library/w4atty68.aspx


1
在发布之前,请使用与目标用户群的最小公共分母相对应的适当版本的Visual Studio编译您的应用程序。
只需准备一个虚拟机,例如装有Visual Studio 2005没有SPs,并从那里编译解决方案,然后再部署。

0

请说一下您认为它可能如何有所帮助。它看起来与此无关。 - John Saunders

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接