【问题标题】:Don't start application if required.NET is not installed如果需要,请不要启动应用程序。NET 未安装
【发布时间】:2018-02-02 03:31:03
【问题描述】:

我有一个 .NET Framework 4.6 WPF 应用程序。问题是,如果我在 .NET Framework the application has stopped working。

如果未安装所需的 .NET 版本,是否有办法阻止应用程序启动,而是显示一条更有意义的消息,说明 the application requires a certain .NET version to run

我的 app.config 文件:

<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
  </startup>
</configuration>

sku 属性似乎被忽略,Windows 尝试使用用户计算机上的最新版本 .NET Framework 启动应用程序。

应用程序部署为没有安装程序的单个文件应用程序,因此我无法创建单独的引导程序应用程序来检查 .NET 版本。

【问题讨论】:

  • 通常此检查由应用程序的安装程序完成
  • 您没有使用安装程序有什么原因吗?我觉得这将是迄今为止最简单的方法。
  • 是的,由于客户要求,该应用程序没有也不能有安装程序。
  • 那么您可能需要创建第二个启动程序或其他东西。显然,如果您的主程序甚至没有启动,那么它对您没有用处。但即便如此,您的客户也可能只是继续尝试直接启动主应用程序。
  • 那么我真的不知道除了 a) 帮助他们安装正确的 .NET 版本或 b) 在他们的框架版本下编译程序之外你还能做什么已安装。如果其中任何一个都不可行,那么您的客户就是在自取其辱......

标签: c# .net windows


【解决方案1】:

如果您希望应用程序的用户能够在目标计算机上安装 .NET Framework 4.0+ 的情况下使用您的应用程序,则必须在应用程序的构建设置中以 .NET Framework 4.0 为目标。

<PropertyGroup>
    ...
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    ...
</PropertyGroup>

无法在仅安装 .NET Framework 4.0 的计算机上运行面向 .NET Framework 4.6 的应用程序(至少在您使用任何在 .NET Framework 4.0 之后添加的 API 时不能)。

由于all versions of .NET Framework above version 4.0 are in-place upgrades,无论如何,目标系统将始终使用最新版本。因此,以 .NET 框架 4.0 为目标将为您提供所需的行为。

但是,请注意,4.6 中的某些 API 在 .NET Framework 4.0 中不可用,因此您可能需要进行一些更改或妥协并以 .NET Framework 4.5 为目标。请记住,.NET Framework 4, 4.5, and 4.5.1 are no longer officially supported by Microsoft。以 .NET Framework 4.5 为目标将为您提供 4.0 中缺少的大部分 API,并允许用户在其系统上使用任何版本的 .NET Framework 4.5+。

<PropertyGroup>
    ...
    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
    ...
</PropertyGroup>

【讨论】:

  • 是的,到最后一点,我的假设是该应用程序正在使用一些在目标对象中可用的 API,但在客户系统上的 .NET 版本中不可用。
  • 使用较旧的 .NET Framework 版本是个好主意。但不适用于主应用程序,因为有大量 4.6 依赖项。但是,我可以在 .NET Framework 4.0 中创建一个小型引导程序应用程序来检查已安装的 .NET 版本。然后我会使用 FodyCostura 将引导程序和主应用程序合并到一个文件中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-15
  • 2016-04-21
  • 1970-01-01
  • 2011-03-19
  • 1970-01-01
  • 2016-09-23
相关资源
最近更新 更多