Vấn đềVS Code mà không có OmniSharp server hoạt động thì về cơ bản chỉ là một trình soạn thảo văn bản thông thường. Khi lỗi này xảy ra, bạn sẽ mất đi các tính năng giúp lập trình hiệu quả. IntelliSense biến mất, 'Go to Definition' ngừng phản hồi và các đường gạch chân đỏ báo lỗi cú pháp cũng không còn. Thông thường, điều này xảy ra do extension C# không tìm thấy runtime .NET tương thích hoặc bị xung đột giữa các phiên bản SDK.
Nguyên nhân phổ biến- Không khớp phiên bản SDK: Bạn có thể đã cài .NET 8.0, nhưng extension lại đang tìm kiếm phiên bản LTS cũ hơn như 6.0.- Xung đột kiến trúc: Đây là vấn đề lớn trên Apple Silicon (M1/M2/M3) hoặc Windows ARM64. Nếu bạn cài SDK x64 trên máy ARM, language server sẽ lỗi ngầm hoặc văng ngay khi khởi động.- Sự thay đổi 'Modern .NET': Microsoft gần đây đã thay đổi cách OmniSharp xử lý runtime. Các dự án cũ thường yêu cầu bản build Mono truyền thống, trong khi dự án mới cần bật cài đặt 'Modern'.- File thực thi bị hỏng: Đôi khi việc cập nhật VS Code làm gián đoạn quá trình tải extension, dẫn đến các file server bị lỗi.## Các bước khắc phục### 1. Kiểm tra đường dẫn .NET SDKBắt đầu bằng việc kiểm tra xem hệ thống có thực sự nhận diện được .NET SDK hay không. Mở terminal và nhập:
dotnet --list-sdks
Bạn sẽ thấy một danh sách như 8.0.204 [/usr/local/share/dotnet/sdk]. Nếu lệnh trả về 'command not found', SDK chưa nằm trong PATH của hệ thống. Việc cài đặt lại phiên bản mới nhất từ Microsoft thường sẽ giải quyết được vấn đề này ngay lập tức.
2. Điều chỉnh cài đặt 'Use Modern Net'Tùy chọn omnisharp.useModernNet là cách sửa lỗi phổ biến nhất cho việc lập trình C# hiện đại. Nó kiểm soát việc OmniSharp sử dụng runtime .NET 6+ hay framework Mono cũ hơn.
- Nhấn
Ctrl + ,(hoặcCmd + ,trên Mac) để mở Settings.- Tìm kiếm OmniSharp: Use Modern Net.- Nếu bạn đang dùng .NET 6, 7 hoặc 8, hãy đảm bảo mục này đã được tích chọn (checked).- Nếu bạn đang làm việc với dự án .NET Framework 4.7.2 cũ, hãy bỏ tích (uncheck) và đảm bảo bạn đã cài đặt Mono.Khởi động lại VS Code sau khi thay đổi để cài đặt có hiệu lực.
3. Tìm lỗi trong Output LogNếu server vẫn không hoạt động, log sẽ cho bạn biết chính xác lý do. Đừng đoán mò — hãy kiểm tra dữ liệu.
- Mở bảng Output (
Ctrl + Shift + U).- Chọn OmniSharp Log từ menu thả xuống ở phía bên phải.- Cuộn xuống dưới cùng và tìm các dòng chữ màu đỏ.Tìm cụm từThe architecture of the SDK is not compatible. Nếu bạn thấy dòng này trên Mac, có khả năng bạn đã cài bản x64 của .NET. Bạn phải gỡ cài đặt nó và tải bản cài đặt Arm64 để thay thế.
4. Làm sạch và cài đặt lại ExtensionKhi các file bị lỗi, chỉ nhấn nút 'Uninstall' là không đủ vì VS Code vẫn giữ lại cache. Bạn cần xóa thư mục thủ công.
- Gỡ cài đặt extension C# trong VS Code.- Đóng hoàn toàn trình soạn thảo.- Xóa các thư mục
ms-dotnettools.csharpkhỏi thư mục extensions của bạn:Windows:%USERPROFILE%\.vscode\extensions- macOS/Linux:~/.vscode/extensions- Mở lại VS Code và cài đặt lại extension.### 5. Chỉ định trực tiếp tệp SolutionOmniSharp có thể bị nhầm lẫn nếu workspace của bạn có nhiều thư mục. Nếu nó không tìm thấy tệp.csprojhoặc.sln, nó sẽ không khởi động. Bạn có thể ép nó tìm đúng chỗ bằng cách thêm dòng sau vào.vscode/settings.jsoncủa mình:
"omnisharp.slnPath": "MyProject.sln"
Xác minhSau khi thực hiện các bước này, hãy kiểm tra thanh trạng thái ở dưới cùng của VS Code. Bạn sẽ thấy một biểu tượng ngọn lửa nhỏ hoặc chữ 'OmniSharp' với dấu tích xanh. Mở bất kỳ tệp .cs nào và di chuột lên tên một class. Nếu một tooltip kèm tài liệu hiện ra trong vòng một hoặc hai giây, nghĩa là mọi thứ đã hoạt động trở lại.
Mẹo nhỏ để ổn định hơnTránh cài lẫn lộn SDK x64 và ARM64 trên cùng một máy, vì điều này tạo ra một 'cuộc chiến đường dẫn' gây nhầm lẫn cho server. Khi tải các bản cài đặt, tôi khuyên bạn nên kiểm tra tính toàn vẹn của tệp để tránh các bản cài bị lỗi. Tôi thường sử dụng Hash Generator trên ToolCraft để so sánh mã băm SHA-256 của bản tải về với mã checksum chính thức từ Microsoft. Việc này chỉ mất mười giây nhưng giúp ngăn chặn hàng giờ xử lý sự cố do file thực thi bị hỏng.
Đối với các dự án nhóm, hãy sử dụng tệp global.json ở thư mục gốc của dự án. Điều này bắt buộc mọi lập trình viên (và cả OmniSharp) sử dụng chính xác cùng một phiên bản SDK, ví dụ như 8.0.100, loại bỏ các lỗi kiểu 'chạy được trên máy tôi'.

