避免.NET版本地狱

时间:2010-03-11 11:04:30

标签: .net visual-studio dll

所以有时候(通常是!)你想要定位一个特定的.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 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分: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

答案 2 :(得分:2)

有一种告诉Windows .Net版本使用的方法。这就像使用xmllike:

在Windows \ system32中创建一个名为dllhost.exe.config的文件
<? xml version = "1.0" ?>
<configuration>
<startup>
<SupportedRuntime version = XXXXXX>
</startup>
</configuration>

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

这有用吗:Versioning Controlled Build