1

app.config 中的supportedRuntime 设置是否仅在3.5 版上运行?例如 SKU?

目前我们遇到的问题是,如果我们的应用程序在 .NET 框架 2.0 上运行,我们的应用程序会因未找到方法而崩溃。这会给客户带来不好的反馈。

4

2 回答 2

2

<supportedRuntime>仅用于确定 CLR 版本 - 对于框架版本 3.5 和 2.0 相同。我不知道在启动参数方面需要 .NET 3.5 的任何方式。

话虽如此,创建一个入口点应该相对简单,该入口点首先探测 .NET 3.5 程序集,并在未找到它们时给出友好的错误消息。当然,这取决于您正在运行的应用程序类型,但如果它是本地 GUI(例如 WPF 或 WinForms),那么它应该不会太难。

于 2013-08-30T12:11:45.907 回答
2

.NET 4.0 之前不支持“sku”属性

这不是真正的问题。您没有对 3.5 的依赖,您对 .NET 2.0 SP1 或 SP2 有依赖。并且客户端运行的是2.0的RTM版本。微软在服务包更新中犯了一个错误,它潜入了一些 RTM 版本中没有的方法重载。在不改变程序集的 [AssemblyVersion] 的情况下,它仍然是 2.0.0.0

那是非常非常顽皮的,并造成了很多痛苦。在 .NET 4 中解决,引用程序集现在不再是 GAC 中程序集的普通副本。

解决这个问题的基本方法:

  • 在安装程序中包含 .NET 3.5SP1 引导程序。这将确保您客户的 PC 使用最新的服务包进行更新
  • 只需修复您的代码并避免对添加的方法重载的依赖。您应该从异常中知道名称。猜测一下,它是 WaitHandle.WaitOne(int) 的可能性很大。在 SP2 中添加,并且由于没有人理解exitContext可能意味着什么,因此在最后一个参数设置为false的情况下,它比等效的 WaitOne(int, bool) 更受欢迎
  • 不太有用但现实的方法:向客户指出您无法支持未打开 Windows 更新的机器。
于 2013-08-30T12:31:21.310 回答