多目标框架项目中如何指定运行.NET 4.6.1分支代码?
解决多目标框架项目运行时指定.NET 4.6.1分支的问题
这个问题的核心是:你的项目虽然配置了多目标编译,但运行时默认选择的是.NET Standard 2.0对应的输出(或者说用了兼容.NET Standard的宿主环境),导致代码走到了else分支。下面是具体的解决办法:
1. 在Visual Studio中明确选择运行的目标框架
- 右键你的项目,选择「属性」,切换到「应用程序」标签页,在「目标框架」下拉菜单里选中
.NET Framework 4.6.1,点击确定后重新编译运行。 - 更快捷的方式:在Visual Studio顶部工具栏,找到解决方案配置(比如Debug/Release)旁边的「目标框架」下拉框,直接切换到
net461,然后点击运行按钮。
2. 命令行运行时指定框架参数
如果你用dotnet run命令启动项目,需要显式指定要运行的框架版本:
dotnet run --framework net461
这样dotnet CLI会自动找到net461目录下的编译输出并运行,代码就会进入#if NET461的分支。
3. 直接运行对应目录的可执行文件
多目标项目编译后,会在输出目录下生成两个子文件夹:
bin/Debug/net461:这里面是.NET Framework 4.6.1的可执行文件(.exe),直接双击运行它就能触发.NET 4.6.1的分支逻辑。bin/Debug/netstandard2.0:这里只有.dll文件,因为.NET Standard是一个API规范,不能直接运行,需要依赖兼容的宿主(比如.NET Core/.NET 5+),这时候就会走到else分支。
额外验证:确认预处理器符号正确
再检查下你的预处理器指令,NET461是官方定义的正确符号,没有拼写错误(注意是全大写,没有空格),这个符号会在编译.NET Framework 4.6.1版本时自动启用,所以只要运行的是该版本的输出,代码就会进入对应的分支。
内容的提问来源于stack exchange,提问作者random
相关产品推荐
相关产品推荐

