关于 .csproj 文件里面的 TargetFrameworkVersion 这个标签,
如果我填的是 v4.7.2
那么编译出来的可执行文件,能成功安装到那些 v4.5 版本的 .net 的机器上吗?
如果不能的话,是不是我自己这边要安装 v4.5 版本的 framework ,再去编译可执行文件出来才行呢? 我试了下,微软好像不让降级安装 .net framework
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. |
2
abdiweli 2019-08-07 16:11:31 +08:00
如果你不要 4.7 上新增 API,那完全可以把,net 版本调低一点。
|
3
Buffer2Disk OP @ian19znj 如果我的电脑上装了 4.5.1 的 SDK, 客户的机器上装的是 4.0 的 framework,这种是能运行起来的嘛?
因为我看微软官方好像压根没提供 4.0 的开发包 https://dotnet.microsoft.com/download/visual-studio-sdks |
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 运行时,就有可能可以运行。但运行情况会不符预期,主要是框架版本之间的差异。 |
5
Buffer2Disk OP @hihipp 非常感谢回复,解释的很清楚
|
6
Buffer2Disk OP @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 对吧? |
7
Nasei 2019-08-07 18:55:18 +08:00 via Android
如果不是 winforms 或者 wpf 的话还是可以升级到新的项目文件格式,TargetFrameworks
|
8
whevether 2019-08-08 09:24:16 +08:00
如果是新项目还是直接上.net core 好一点。
|