V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Buffer2Disk
V2EX  ›  程序员

关于.NET 的编译版本的问题

  •  
  •   Buffer2Disk · 2019-08-07 15:23:20 +08:00 · 1676 次点击
    这是一个创建于 1939 天前的主题,其中的信息可能已经有所发展或是发生改变。

    关于 .csproj 文件里面的 TargetFrameworkVersion 这个标签,

    如果我填的是 v4.7.2

    那么编译出来的可执行文件,能成功安装到那些 v4.5 版本的 .net 的机器上吗?

    如果不能的话,是不是我自己这边要安装 v4.5 版本的 framework ,再去编译可执行文件出来才行呢? 我试了下,微软好像不让降级安装 .net framework

    8 条回复    2019-08-08 09:24:16 +08:00
    ian19znj
        1
    ian19znj  
       2019-08-07 15:55:06 +08:00
    1. 如果 Target framework version 填 4.7.2, 那么无法运行在仅安装了.net 4.5 的客户机上。
    说仅安装是因为.net 不同版本可以共存,客户机上可能同时存在.net 4.5 和 4.7.2, 那么是可以运行的,但如果只有 4.5,无法运行)

    2. 你说的不完全正确,如果要部署在 4.5 的电脑上,确实是要将 target framework version 设置成 4.5 或者更低。但编译的时候,并不是看你的电脑上.net framework 是什么版本,而是看你电脑上是否安装了对应版本的.net framework SDK, 也就是说,你需要在你的电脑上安装.net framework 4.5 sdk.
    abdiweli
        2
    abdiweli  
       2019-08-07 16:11:31 +08:00
    如果你不要 4.7 上新增 API,那完全可以把,net 版本调低一点。
    Buffer2Disk
        3
    Buffer2Disk  
    OP
       2019-08-07 16:27:14 +08:00
    @ian19znj 如果我的电脑上装了 4.5.1 的 SDK, 客户的机器上装的是 4.0 的 framework,这种是能运行起来的嘛?

    因为我看微软官方好像压根没提供 4.0 的开发包
    https://dotnet.microsoft.com/download/visual-studio-sdks
    hihipp
        4
    hihipp  
       2019-08-07 17:03:16 +08:00
    @Buffer2Disk

    先回答问题:

    1. 一二楼已经说得比较清楚了,默认情况下,项目中的 "TargetFrameworkVersion" 版本,客户机必须也有此版本的 runtime 才可以运行。
    2. 这个页面没有开发包,是因为微软不再支持,可以通过搜索引擎搜索下载。

    再对 1 补充:

    从 .net framework 4.0 到最新的 4.8,运行时版本没有变化过,都是 v4.0 运行时。

    具体请看,app.config 文件,supportedRuntime 元素下 version 和 sku 属性。

    version 属性值:v4.0

    sku 属性值:项目的 TargetFrameworkVersion

    v4.0 运行时机制,如果含有 sku 属性值,则会检查是否含有此版本运行时,如果没有则不能运行,反之亦然。

    删除 sku 属性,只要客户机有 v4.0 运行时,就有可能可以运行。但运行情况会不符预期,主要是框架版本之间的差异。
    Buffer2Disk
        5
    Buffer2Disk  
    OP
       2019-08-07 18:24:59 +08:00
    @hihipp 非常感谢回复,解释的很清楚
    Buffer2Disk
        6
    Buffer2Disk  
    OP
       2019-08-07 18:39:01 +08:00
    @hihipp 有一个疑问,如果 TargetFrameworkVersion 写的是 4.5.1

    app.config 里面内容如下,无 sku,包含 4.0 和 v2.0 的 runtime
    <supportedRuntime version="v4.0"/>
    <supportedRuntime version="v2.0.50727"/>

    那么我可以理解为,这个软件可以在一台只装了 V2.0 runtime 的机器上运行,不会提示要求安装.net 4.0 对吧?
    Nasei
        7
    Nasei  
       2019-08-07 18:55:18 +08:00 via Android
    如果不是 winforms 或者 wpf 的话还是可以升级到新的项目文件格式,TargetFrameworks
    whevether
        8
    whevether  
       2019-08-08 09:24:16 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1578 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 16:58 · PVG 00:58 · LAX 08:58 · JFK 11:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.