具有 4.7.2 目标框架版本的 C# 项目可以在 .net 4.6.1 上运行吗
Posted
技术标签:
【中文标题】具有 4.7.2 目标框架版本的 C# 项目可以在 .net 4.6.1 上运行吗【英文标题】:Can C# projects that have 4.7.2 target framework version run on .net 4.6.1 【发布时间】:2019-09-11 11:32:33 【问题描述】:我们有一个 C# 项目,其中的 C# 项目是使用 TargetFrameworkVersion 4.7.2 编译的。例如,在 csproj 文件中指定了 --
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
已编译和构建的 exe 安装在安装了 .net 4.6.1 的 VM 中。我看到安装成功并且软件运行正常。所以我们可以肯定地说,使用 4.7.2 构建的项目可以在安装 .netframework 4.6.1 时执行。或者这里有什么问题需要注意?
【问题讨论】:
我们最近在测试中也发现了这个——我很想听听答案! (在我们的案例中,我们正在测试如果我们将 4.7.2 click-once 应用程序部署到仅安装了 4.6.1 的客户端会发生什么情况。我们预计它会失败,但实际上它运行良好......) 我认为它不能保证有效。 Net 使用 dll 库,当库更改时,入口点和参数列表可能会随着版本的不同而改变。当网络更新时,并不是所有的库都会改变,所以如果你使用没有改变的库,它会起作用。许多 Net 方法只是包装器并调用 Windows dll,因此包装器将始终适用于相同版本的 Windows。 我认为这是因为 v4.0 的 .net 框架共享相同的 CLR,所以除非您使用 4.7.2 的一些全新功能 - 您可以在任何 4.0+ 框架上运行 我认为这回答了它。该项目是在几年前的 .net 4.6.1 中构建的,直到上个月 targetframework 版本才更新到 4.7.2,没有任何代码更改。由于我们没有使用 4.7.2 的任何全新 API,因此一切正常。测试团队也没有发现任何问题。 【参考方案1】:您可以在app.config
文件中使用supportedRuntime
元素,例如
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
</startup>
</configuration>
这是可能的,因为它们共享相同的 CLR 4.0 版。但是,如果使用 .NET 4.7.2 中的任何特定功能,您可能会遇到运行时异常。查看this线程了解更多详情
【讨论】:
啊哈!我只是查看了我们所有的 ClickOnce 应用程序,尽管项目设置已更改为使用 .net 4.7.2,但它们的 App.Config 文件都没有更新以反映该更改!最好继续...以上是关于具有 4.7.2 目标框架版本的 C# 项目可以在 .net 4.6.1 上运行吗的主要内容,如果未能解决你的问题,请参考以下文章
是否可以让 ASP.NET Core 解决方案包含具有不同目标框架的项目?
C#新版本风格项目文件(SDK风格项目 SDK-style project)
无法正确单步执行静态构造函数中的代码(VS2019、C#、.NET 4.7.2)