如何在 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的发布键。
结果:
【讨论】:
你说得对,<compilation targetFramework="4.8" />
确实有效。我做了一些更多的研究,发现了为什么它在我的情况下不起作用 - 请参阅我的答案以了解详细信息。【参考方案2】:
@BrandoZhang 的回答是正确的,<compilation targetFramework="4.8" />
确实有效。我添加了这个答案来解释为什么它在我的情况下不起作用。 (评论太长了,可能会对遇到同样问题的人有所帮助。)
在我的例子中,web.config
不在 Web 应用程序的目录中。它位于 parent 目录中,因为我有多个 Web 应用程序需要以完全相同的方式进行配置,我不想重复自己。
事实证明,compilation
的targetFramework
属性显然不会被子应用程序继承(如果您知道为什么,请随时发表评论)。在应用程序目录中添加以下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 地址
将 Flutter 应用上传到 AppStore 导致 App.framework 不支持 Info.plist 中指定的最低 OS 版本
将 Flutter 应用上传到 AppStore 导致 App.framework 不支持 Info.plist 中指定的最低 OS 版本