怎么指定特定的.Net版本来启动进程?

socg 2021-04-02 12:18:16
程序A要启动程序B,B是.net2.0编写的,可以在任意.net版本中运行。现在A程序需要指定特定的版本来运行B程序,怎么实现呢?

别问为什么,问题提出肯定是有这样的需求!

不想使用修改config的方法! 因为 A 、B 实际上是同一个程序,启动的起始是自身!
...全文
1087 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
socg 2021-05-26
  • 打赏
  • 举报
回复
个人感觉,要从根本解决这个问题,要么.Net中提供了这种操作,要么研究config文件的处理机制:在双击exe时,系统会查找同名的config文件,读取后以相应的配置来真正的启动exe。
socg 2021-05-26
  • 打赏
  • 举报
回复
引用 19 楼 Eason0807 的回复:
动态编译理论上能解决你的问题
A程序以特定的版本动态编译B程序,然后启动B程序,这确实是一个解决方案,但代价太大,暂不考虑
socg 2021-05-26
  • 打赏
  • 举报
回复
引用 18 楼 xuzuning 的回复:
我想,要解决你这个问题,首先需要解决如何感知当前的 .Net版本 .Net2和 .Net 3.5 都提供有相应的方法(如果没有 可以提示安装),但.Net就没有提供了(至少我不知道)
不太明白。。 A程序可以知道自己的.Net 版本,我可以知道系统已装的所有版本的.Net,现在需要A指定一个.Net版本作为“运行时”来启动B程序
Eason0807 2021-05-25
  • 打赏
  • 举报
回复
引用 6 楼 泡泡龙 的回复:
提这个问题的人是不是不知道.net 4.0各种版本其实只有一个最新版dll。 高版本向下兼容。 如果一定要指定版本,自己检测注册表的.net 4.x release版本号就行了,微软网站有说明。
4.0与之前的3.5和2.0不完全兼容吧? 2.0和3.5编译的程序在4.0上跑不起来
socg 2021-05-25
  • 打赏
  • 举报
回复
程序是2.0编译的,本身就可以在 2.0 和 4.0 上正常执行,我只是想指定特定的运行时版本来启动它
socg 2021-05-25
  • 打赏
  • 举报
回复
引用 13 楼 morliz子轩 的回复:
两个选择: 1、要么将.net 2.0 dll重新编译, 到4.5架框平台上。如果有源码的话 2、将自身程序框架将到2.0开发。 而且常理来说,4.5是向下兼容开发的,也就是用2.0 - 4.0 DllLibrary完全支持。 难道你想说,我想编译出两个框架版本 2.0 和4.5?在这不同的环境下用不同的版本,是这意思?
你没理解我的意思,我的程序是调用编译器来编译其它的程序,将目标程序和dll打包并加密,生成一个等效的新程序
Eason0807 2021-05-25
  • 打赏
  • 举报
回复
动态编译理论上能解决你的问题
xuzuning 2021-05-25
  • 打赏
  • 举报
回复
我想,要解决你这个问题,首先需要解决如何感知当前的 .Net版本 .Net2和 .Net 3.5 都提供有相应的方法(如果没有 可以提示安装),但.Net就没有提供了(至少我不知道)
socg 2021-05-25
  • 打赏
  • 举报
回复
我可以保证我的程序在各版本上都能正常运行,配置config文件可以让它在任意版本中运行,我现在不想用config文件,我需要动态调用我的程序指定版本来运行!!! 要用另一个程序来启动我的程序,指定版本来运行,怎么就说不明白呢
socg 2021-04-30
  • 打赏
  • 举报
回复
引用 10 楼 morliz子轩 的回复:
你这个逻辑我感觉是错的。 如果本身就是一个程序,那启动的时候,是分两套逻辑运行。 那就有个前提,每一套逻辑的运行条件是什么,如何判断是运行哪套逻辑。 而不是硬生生把它,撕成2个程序的概念。
我的程序是加载另一个.net程序和它相关的dll,然后打包重新编译成一个单独的exe,为了最大程度的保留目标程序的特性,我必须已目标程序相同的环境来编译它,例如 我的程序是.net2.0,目标程序是.net4.5,我程序需要用4.5运行来重新编译它才能保证目标程序和新程序的运行时一样
morliz子轩 2021-04-30
  • 打赏
  • 举报
回复
引用 12 楼 socg 的回复:
我的程序是加载另一个.net程序和它相关的dll,然后打包重新编译成一个单独的exe,为了最大程度的保留目标程序的特性,我必须已目标程序相同的环境来编译它,例如 我的程序是.net2.0,目标程序是.net4.5,我程序需要用4.5运行来重新编译它才能保证目标程序和新程序的运行时一样
两个选择: 1、要么将.net 2.0 dll重新编译, 到4.5架框平台上。如果有源码的话 2、将自身程序框架将到2.0开发。 而且常理来说,4.5是向下兼容开发的,也就是用2.0 - 4.0 DllLibrary完全支持。 难道你想说,我想编译出两个框架版本 2.0 和4.5?在这不同的环境下用不同的版本,是这意思?
datafansbj 2021-04-29
  • 打赏
  • 举报
回复
不同版本的 .net 运行库并不兼容!不存在高版本向下兼容的问题!也就是说你想让一个 .net 2.0 的程序跑在 .net 4.0 运行库上,是行不通的!
morliz子轩 2021-04-28
  • 打赏
  • 举报
回复
你这个逻辑我感觉是错的。 如果本身就是一个程序,那启动的时候,是分两套逻辑运行。 那就有个前提,每一套逻辑的运行条件是什么,如何判断是运行哪套逻辑。 而不是硬生生把它,撕成2个程序的概念。
泡泡龙 2021-04-28
  • 打赏
  • 举报
回复
引用 7 楼 socg 的回复:
[quote=引用 6 楼 泡泡龙 的回复:]提这个问题的人是不是不知道.net 4.0各种版本其实只有一个最新版dll。 高版本向下兼容。 如果一定要指定版本,自己检测注册表的.net 4.x release版本号就行了,微软网站有说明。
运行时版本不同时是不能兼容的,你用3.5 编译的程序不能再win10上运行,除非用config指定4.0为运行时,或在win10上安装.net3.5 本人也遇到过3.5的程序强制在4.0中运行报错,而在3.5下运行正常的情况。 [/quote] 2.0、3.5、4.x分别是不同的jit,当然不能强制乱用
socg 2021-04-12
  • 打赏
  • 举报
回复
现在仍然没有找到好的解决办法,暂时修改config方法代替
socg 2021-04-12
  • 打赏
  • 举报
回复
引用 6 楼 泡泡龙 的回复:
提这个问题的人是不是不知道.net 4.0各种版本其实只有一个最新版dll。 高版本向下兼容。 如果一定要指定版本,自己检测注册表的.net 4.x release版本号就行了,微软网站有说明。
运行时版本不同时是不能兼容的,你用3.5 编译的程序不能再win10上运行,除非用config指定4.0为运行时,或在win10上安装.net3.5 本人也遇到过3.5的程序强制在4.0中运行报错,而在3.5下运行正常的情况。
泡泡龙 2021-04-10
  • 打赏
  • 举报
回复
提这个问题的人是不是不知道.net 4.0各种版本其实只有一个最新版dll。 高版本向下兼容。 如果一定要指定版本,自己检测注册表的.net 4.x release版本号就行了,微软网站有说明。
socg 2021-04-08
  • 打赏
  • 举报
回复
引用 3 楼 shawn_yang 的回复:
.net实际上高版本向下兼容低版本
由于特殊需求,程序B需要指定版本运行
龟宝宝 2021-04-08
  • 打赏
  • 举报
回复
当遇见一个问题不知道怎么解决的时候 那你就解决掉提出问题的人。
shawn_yang 2021-04-06
  • 打赏
  • 举报
回复
.net实际上高版本向下兼容低版本
加载更多回复(2)

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧