ARTICLE · 1093310
Qt 完美支持 C# 项目编译(一个插件+语言服务)
TUTORIAL · Qt Creator 20.0.1 · .NET SDK 10 · Windows x64
高级上位机编程—— 让 Qt Creator 同时成为 Qt C++ 与 C# 的开发主场:既能直接编译、运行 WinForms / WPF 项目,又能把 C# 程序集和 Qt C++ 界面工程串在同一个 IDE、同一条构建链路里。

目录
先搞清楚一件事:Qt Creator 凭什么能编译 C#
环境准备
打开配套工程 WinFormsApp1.rar
在 Qt Creator 里构建与运行
配置 C# / JSON 代码智能(语言服务器)
Qt C++ 与 C# 混编的上位机架构(打通篇)
故障排查手册
速查附录
01 先搞清楚一件事:Qt Creator 凭什么能编译 C#
IDE,但它从 20.x 开始提供了三件互相独立的东西。很多人一开始把它们搅在一起,于是排查问题时处处踩空。先把边界划清楚:
关键结论 · 语言服务器与构建完全正交csharp-ls 跟"能不能运行"无关。它只管编辑器里的代码智能。没有它,dotnet build / dotnet run 照常工作;两者是正交的:语言服务器管编辑体验,项目类型管构建运行。


02 环境准备

提示 · 本机有两套 dotnetC:\Program Files\dotnet(完整,带 sdk 目录)与 C:\Program Files (x86)\dotnet(只有运行时,无 sdk 目录)。一旦命令解析到 x86 那套,就会报 No .NET SDKs were found.。规避办法:把运行/构建命令的可执行文件写成绝对路径 C:\Program Files\dotnet\dotnet.exe。
03 打开配套工程 WinFormsApp1.rar
3.1 用什么打开它
注意 · PowerShell 的 Expand-Archive 不能解 rarExpand-Archive 只支持 .zip。遇到 .rar 会直接报错,别在这里浪费时间。
3.2 解压到哪里
zhishi</span>,得到E:\Jay_Pro_Test\C# zhishi\WinFormsApp1</span>,与包内记录的路径完全一致,打开即用。
建议 · 不要把 bin / obj / .vs 带进版本库或压缩包 本次压缩包里就带了 .stale 残留文件和 .vs 缓存(见第 7.3 节的一次真实事故)。干净的分发包应只保留源码与配置文件:*.cs、*.csproj、*.slnx、*.resx、.qtcreator\project.json。
3.3 解压后的目录长相

3.4 工程源文件内容
<ProjectSdk="Microsoft.NET.Sdk"><PropertyGroup><OutputType>WinExe</OutputType><TargetFramework>net10.0-windows</TargetFramework><Nullable>enable</Nullable><UseWindowsForms>true</UseWindowsForms><ImplicitUsings>enable</ImplicitUsings></PropertyGroup></Project>
<Solution><Configurations><PlatformName="Any CPU" /><PlatformName="x64" /></Configurations><ProjectPath="WinFormsApp1.csproj" /></Solution>
using System.Runtime.InteropServices; // 支持调用外部 DLLnamespace WinFormsApp1{internal static class Program{// [DllImport("kernel32.dll")]// private static extern bool AllocConsole();///<summary>/// The main entry point for the application.///</summary>[STAThread]staticvoidMain(){// 从 Qt Creator 运行时不需要 AllocConsole:// dotnet run 已经把 stdout/stderr 接给了"应用程序输出"面板ApplicationConfiguration.Initialize();Application.Run(new Form1());}}}
namespace WinFormsApp1{public partial class Form1 : Form{publicForm1(){InitializeComponent();}///<summary>/// 测试:填充 0~254 的字节序列///</summary>privatevoidbutton1_Click(object sender, EventArgs e){byte[] a = new byte[255];for (int i = 0; i < 255; i++){a[i] = (byte)i;}// hex 格式打印(依赖控制台窗口,默认注释)// Console.WriteLine("a:" + BitConverter.ToString(a));}}}
3.5 Qt Creator 侧的项目描述文件

{"dll = "E:\Jay_Pro_Test\C# zhishi\WinFormsApp1\bin\x64\Debug\net10.0-windows\WinFormsApp1.dll"$s = [Text.Encoding]::UTF8.GetString([IO.File]::ReadAllBytes($dll))if ($s -match 'AlloConsole') { '仍是旧编译' } else { '已是修复后编译' }
8.4 上线检查清单
WinFormsApp1.slnx
Program.cs
csharp-ls
Preferences → Language Client
.qtcreator/project.json
8.5 当前状态
已解决:[x] csharp-ls 已安装并可运行(0.28.0)[x] vscode-json-languageserver 已装到 Qt Creator 期望的位置(含 .bin shim)[x] WinFormsApp1.slnx 已声明 Any CPU / x64 平台 → MSB4126 消除[x] Program.cs 的 AlloConsole 拼写错误已修正(→ AllocConsole,随后改为注释)[x] 构建通过:0 警告 0 错误;Qt Creator 内点运行可弹出窗体待办:[ ] 重启 Qt Creator 或重启机器后,删除 bin 下的 *.stale 文件[ ] 建议取消 qtcreator.exe 的"以管理员身份运行 + Windows 8 兼容模式"[ ] 若仍出现 No .NET SDKs were found.,把运行目标改成绝对路径的 dotnet.exe
一句话总结 Qt Creator 编译 C#,靠的是 Dotnet 插件(认得工程)+ project.json(定义构建与运行);csharp-ls 只负责写代码时的智能提示,跟能不能编译无关。把这两条分开看, 再记住"崩溃 → 残留进程 → 文件锁 → 构建失败"这条因果链,Qt Creator 就真正成为了 Qt C++ 与 C
上位机开发的统一主场。
故我在
点击下方卡片 关注我
↓↓↓

好看,请点击
收藏
点赞
在看
+1

