具有 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)

框架4.7.2中的无法还原nuget软件包

在具有部署目标 iOS 7.0 及更早版本的扩展包含应用程序中使用嵌入式框架

在哪个 .Net Framework 版本 C# 7.2 可用