如何在 Web 应用程序中指定最低 .NET Framework 版本?

Posted

技术标签:

【中文标题】如何在 Web 应用程序中指定最低 .NET Framework 版本?【英文标题】:How do I specify a minimum .NET Framework version in a web application? 【发布时间】:2019-06-23 20:31:22 【问题描述】:

我有一个需要 .NET Framework 4.8(或更高版本)的 ASP.NET WebForms 应用程序。如果所需的框架版本不可用(例如,在仅安装 4.7 的系统上),我希望应用程序“提前失败”。换句话说,我想要 supportedRuntime tag for executables 之类的东西,仅用于 Web 应用程序。

这可以通过一些 web.config 设置来实现吗?我试过了:

system.web/httpRuntime/targetFramework system.web/compilation/targetFramework startup/supportedRuntime/sku(只是为了完整性,我没想到它会起作用)

即:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  ...
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
  </startup>

  <system.web>
    <httpRuntime targetFramework="4.8" />
    <compilation targetFramework="4.8" />
    ...
  </system.web>
</configuration>

但是,Web 应用程序仍然可以在仅安装 .NET Framework 4.7 的服务器上愉快地运行。

是我遗漏了什么还是这个功能不可用?

【问题讨论】:

只是出于好奇,这个“提前失败”对于网络应用程序应该是什么样子的?每个请求都返回 500? @WiktorZychla:是的,返回 500(如果 customErrors/mode 允许,返回描述性和有用的错误消息)会很棒。 Application_Start 中的简单运行时检查应该很早就失败(您甚至可以从 web.config 中提取版本以进行检查)***.com/questions/951856 @DaveM:是的,那是我的备用计划。我只是想确保我没有先重新发明***。 【参考方案1】:

据我所知,如果你没有安装 .net framework 4.8,如果你在 IIS 上运行你的 web 应用程序,它会显示以下错误:

我建议您可以尝试按照以下步骤检查您是否安装了 .net frameworr 4.8:

1.从“开始”菜单中选择“运行”,输入 regedit,然后选择“确定”。您必须拥有管理凭据才能运行 regedit。

2.在注册表编辑器中,打开以下子项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full。如果 Full 子项不存在,则说明您没有安装 .NET Framework 4.5 或更高版本。

3. 检查名为 Release 的 DWORD 条目。如果存在,则您已安装 .NET Framework 4.5 或更高版本。它的值是对应于特定版本的 .NET Framework 的发布密钥。例如下图中Release条目的值为528040,即.NET Framework 4.8的发布键。

结果:

【讨论】:

你说得对,&lt;compilation targetFramework="4.8" /&gt; 确实有效。我做了一些更多的研究,发现了为什么它在我的情况下不起作用 - 请参阅我的答案以了解详细信息。【参考方案2】:

@BrandoZhang 的回答是正确的,&lt;compilation targetFramework="4.8" /&gt; 确实有效。我添加了这个答案来解释为什么它在我的情况下不起作用。 (评论太长了,可能会对遇到同样问题的人有所帮助。)

在我的例子中,web.config 不在 Web 应用程序的目录中。它位于 parent 目录中,因为我有多个 Web 应用程序需要以完全相同的方式进行配置,我不想重复自己。

事实证明,compilationtargetFramework 属性显然不会被子应用程序继承(如果您知道为什么,请随时发表评论)。在应用程序目录中添加以下web.config 文件直接 解决了我的问题:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.web>
    <compilation targetFramework="4.8" />
  </system.web>
</configuration>

【讨论】:

以上是关于如何在 Web 应用程序中指定最低 .NET Framework 版本?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 protobuf-net 反序列化 .asmx webservice 中指定的对象

ADO .Net - 如何在具有多个 IP 地址的系统上的 SqlConnection 中指定源 IP 地址

如何在 .NET 中指定控制台应用程序的退出代码?

将 Flutter 应用上传到 AppStore 导致 App.framework 不支持 Info.plist 中指定的最低 OS 版本

将 Flutter 应用上传到 AppStore 导致 App.framework 不支持 Info.plist 中指定的最低 OS 版本

在 asp.net core rc2 中指定代理