【问题标题】:Can C# projects that have 4.7.2 target framework version run on .net 4.6.1具有 4.7.2 目标框架版本的 C# 项目可以在 .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,因此一切正常。测试团队也没有发现任何问题。

标签: c# .net .net-framework-version


【解决方案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 文件都没有更新以反映该更改!最好继续...
猜你喜欢
  • 1970-01-01
  • 2017-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多