1. Cài đặt Visual Studio Code và Extension
Khi tải Visual Studio Code, hãy ưu tiên chọn bản System Installer (nằm trong phần Other platforms). Việc sử dụng bản User Installer đôi khi dẫn đến xung đột kiến trúc (32-bit/64-bit) với .NET runtime, khiến trình gỡ lỗi không thể khởi chạy. Sau khi cài đặt thành công, truy cập vào tab Extensions, tìm kiếm và cài đặt gói C# chính chủ của Microsoft.
2. Thiết lập .NET SDK và .NET Framework
Tiến hành cài đặt .NET Core SDK. Lưu ý chọn phiên bản SDK tương thích với yêu cầu của dự án (ví dụ: một số dự án hoặc engine cũ yêu cầu phiên bản 2.2.x và không hỗ trợ nâng cấp trực tiếp lên 3.0).
Nếu dự án yêu cầu .NET Framework (chẳng hạn 4.7.1 hoặc 4.8), bạn cần tải và cài đặt bản Developer Pack tương ứng từ trang chủ Microsoft. Sau khi cài đặt, kiểm tra lại trong Control Panel để đảm bảo cả SDK và Targeting Pack đã xuất hiện.
3. Cấu hình biến môi trường MSBuild
Để hệ thống nhận diện đúng các SDK của .NET, bạn cần thiết lập biến môi trường trong Windows:
- Tên biến:
MSBuildSdksPath - Giá trị: Đường dẫn đến thư mục Sdks trong thư mục cài đặt SDK của bạn (Ví dụ:
C:\Program Files\dotnet\sdk\2.2.300\Sdks).
4. Quản lý phiên bản SDK với global.json
Trong trường hợp máy tính cài đặt nhiều phiên bản .NET SDK khác nhau, bạn cần cố định phiên bản sử dụng cho từng dự án cụ thể để tránh lỗi biên dịch. Sử dụng file global.json để thực hiện việc này.
Mở terminal tại thư mục gốc của dự án và chạy lệnh:
dotnet new globaljson --sdk-version 2.2.300
Sau đó, kiểm tra phiên bản hiện tại đang được áp dụng cho thư mục này bằng lệnh:
dotnet --version
Bạn có thể tạo các file global.json với phiên bản khác nhau cho từng dự án riêng biệt. Để xem danh sách tất cả SDK đã cài đặt, sử dụng lệnh dotnet --info.
5. Tải và đồng bộ dự án
Khi mở một thư mục bằng Visual Studio Code, IDE sẽ tự động tạo thư mục ẩn .vscode và quét các file .sln hoặc .csproj trong thư mục đó cùng các thư mục con để tải vào môi trường phát triển.
- Dự án Unity: File giải pháp (.sln) và project (.csproj) sẽ được tự động sinh ra khi cấu hình đúng extension.
- Dự án thuần .NET: Cài đặt thêm extension
vscode-solution-explorerđể dễ dàng tạo và quản lý các solution/project trực tiếp trên giao diện IDE.
Lưu ý: Nếu dự án đã từng được biên dịch trước đó, hãy xóa toàn bộ thư mục obj và bin trong các project, sau đó mở lại VS Code và thực hiện lệnh Restore để tải lại các package.
6. Cấu hình Debug và Build Tasks
Để biên dịch và gỡ lỗi, bạn cần thiết lập file launch.json và tasks.json trong thư mục .vscode. Nếu các file này đã tồn tại nhưng bị lỗi, hãy xóa đi và tạo lại từ đầu thông qua Debug Panel.
Dưới đây là cấu hình mẫu cho launch.json để biên dịch và attach debugger vào một ứng dụng console:
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug GameServer (Console)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "compile-server",
"program": "${workspaceFolder}/Output/GameServer.dll",
"args": ["--env", "development"],
"cwd": "${workspaceFolder}/Output",
"console": "integratedTerminal",
"stopAtEntry": true
},
{
"name": "Attach to Process",
"type": "coreclr",
"request": "attach",
"processId": "${command:pickProcess}"
}
]
}
Tiếp theo, cấu hình tasks.json để định nghĩa các lệnh build. Điểm quan trọng là sử dụng thuộc tính dependsOn để đảm bảo các project phụ thuộc được biên dịch trước:
{
"version": "2.0.0",
"tasks": [
{
"label": "compile-core",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/Source/Core/Core.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "compile-server",
"command": "dotnet",
"type": "process",
"dependsOn": [
"compile-core"
],
"args": [
"build",
"${workspaceFolder}/Source/Server/GameServer.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "deploy-release",
"command": "dotnet",
"type": "process",
"args": [
"publish",
"${workspaceFolder}/Source/Server/GameServer.csproj",
"-c", "Release",
"/property:GenerateFullPaths=true"
],
"problemMatcher": "$msCompile"
},
{
"label": "hot-reload",
"command": "dotnet",
"type": "process",
"args": [
"watch",
"run",
"--project",
"${workspaceFolder}/Source/Server/GameServer.csproj"
],
"problemMatcher": "$msCompile"
}
]
}
Trong cấu hình trên, task compile-server khai báo "dependsOn": ["compile-core"]. Điều này có nghĩa là khi bạn kích hoạt task build server, hệ thống sẽ tự động gọi task build core trước để đảm bảo mọi thư viện cốt lõi được cập nhật mới nhất.