SDK .NET 10: https://dotnet.microsoft.com/en-us/download/dotnet/10.0
ConfigTool là ứng dụng MAUI Blazor Hybrid chạy Windows dùng để quản trị file cấu hình JSON và quản trị SQL bằng giao diện hiện đại. Mục tiêu chính là hỗ trợ workflow làm game/Unity: Unity có thể đang ghi file config trong lúc chạy, còn ConfigTool vẫn theo dõi realtime, reload/merge an toàn và hạn chế ghi đè dữ liệu mới từ app khác.
- Chọn thư mục config bằng native Windows Open Folder Dialog.
- Quét và đọc tất cả file
*.jsontrong thư mục đã chọn. - Lưu thư mục đã chọn vào:
<AppStartup>/config/cauhinh.json- Hiển thị mỗi file JSON thành bảng/block dữ liệu.
- CRUD object, array, item, key/field như làm việc với database.
- Block editor cha/con cho object và array, có thu gọn/mở rộng.
- Array hỗ trợ thêm nhanh theo số lượng, thêm theo index, giữ item cũ khi update.
- Nhập nhanh bằng JSON paste hoặc danh sách dấu phẩy, ví dụ:
item 1, item 2, item 3- Có tìm kiếm nhanh, phân trang, query form và gợi ý key/field có sẵn.
- Tạo file JSON mới bằng giao diện block.
- Theo dõi realtime thay đổi file từ Unity/app khác bằng FileSystemWatcher + background scan.
- Load dữ liệu qua SignalR local server, client Blazor không cần JS custom.
- Quản trị nhiều tài khoản kết nối SQL trong file:
<AppStartup>/config/connect.json- Hỗ trợ nhóm kết nối:
- MySQL
- MariaDB
- SQL Server / MSSQL
- Thêm, sửa, xóa, nhân bản, test kết nối tài khoản SQL.
- Chọn database, bảng, cột, khóa/key bằng giao diện.
- CRUD database, table, column, foreign key và record.
- Query editor chạy qua SignalR.
- Menu chuột phải cho database, bảng, cột, key, foreign key, record và kết quả query.
- Import/export SQL kiểu phpMyAdmin.
- Query có menu chọn nhanh bảng/cột/key để chèn vào dòng lệnh.
- Kết quả SELECT có thể sửa/xóa/thêm record trực tiếp trong bảng kết quả.
- MAUI Blazor Hybrid, single-page style.
- Bootstrap modal, layout hiện đại, responsive.
- Nav ngang trên cùng.
- Modal rộng khoảng 90% cửa sổ, có thể resize.
- FontAwesome Pro 7.2.0 dùng qua local vendor path.
- Hạn chế JS custom, chỉ dùng JS của Bootstrap khi cần.
- .NET / MAUI Blazor Hybrid Windows
- Blazor
- SignalR local server
- Bootstrap local vendor
- FontAwesome local vendor
- MySqlConnector cho MySQL/MariaDB
- Microsoft.Data.SqlClient cho SQL Server nếu bật module SQL Server
- Windows 10/11.
- Visual Studio 2026 hoặc IDE hỗ trợ MAUI/.NET tương ứng.
- .NET SDK đúng version project đang dùng.
- MAUI workload.
Cài workload nếu máy chưa có:
dotnet workload install mauiHoặc restore workload theo project:
dotnet workload restoreConfigTool/
├─ Components/
│ ├─ Layout/ # Layout Blazor
│ └─ Pages/ # Trang JSON CRUD, SQL Admin
├─ Hubs/ # SignalR hub
├─ Models/ # DTO/model dùng cho JSON + SQL
├─ Services/ # Service đọc/ghi JSON, watcher, SQL, config
├─ Platforms/Windows/ # Windows folder dialog, window sizing
├─ wwwroot/
│ ├─ app.css
│ └─ vendor/
│ ├─ bootstrap/
│ └─ fontawesome/
├─ Resources/
├─ ConfigTool.csproj
├─ Directory.Build.props
├─ Directory.Build.targets
└─ README.mdProject trỏ sẵn asset theo path local:
wwwroot/vendor/bootstrap/css/bootstrap.min.css
wwwroot/vendor/bootstrap/js/bootstrap.bundle.min.js
wwwroot/vendor/fontawesome/css/all.min.cssNếu dùng FontAwesome Pro 7.2.0, tự copy asset hợp lệ theo license vào:
wwwroot/vendor/fontawesome/Không nên upload/chia sẻ font hoặc asset Pro nếu license không cho phép.
File cấu hình chính:
<AppStartup>/config/cauhinh.jsonVí dụ:
{
"configFolderPath": "D:\\UnityProjects\\AvatarTraining\\Assets\\Configs",
"signalRPort": 59177,
"lastFolderSelectedAt": "2026-06-01T10:00:00+07:00",
"requiredFileNames": [
"GameCoreConfig.json",
"GameJsonDatabaseConfig.json",
"PlantConfig.json",
"PlantingConfig.json",
"tilemaps.json"
]
}requiredFileNames chỉ là danh sách tham khảo. Tool vẫn có thể quét tất cả file *.json trong thư mục được chọn.
File cấu hình SQL:
<AppStartup>/config/connect.jsonMẫu:
{
"connect": [
{
"id": "local-mysql",
"name": "Local MySQL root",
"typeconect": "mysql",
"host": "127.0.0.1",
"port": "3306",
"user": "root",
"password": "",
"allownopassword": true,
"database": "",
"timeoutseconds": 15
},
{
"id": "local-mariadb",
"name": "Local MariaDB root",
"typeconect": "mariadb",
"host": "127.0.0.1",
"port": "3306",
"user": "root",
"password": "",
"allownopassword": true,
"database": "",
"timeoutseconds": 15
},
{
"id": "local-mssql",
"name": "Local SQL Server sa",
"typeconect": "sqlserver",
"host": "127.0.0.1",
"port": "1433",
"user": "sa",
"password": "",
"allownopassword": false,
"database": "master",
"encrypt": false,
"trustservercertificate": true,
"timeoutseconds": 15
}
]
}Giá trị typeconect hiện dùng:
mysql
mariadb
sqlserver
mssql- Mở solution/project
ConfigTool. - Chọn target Windows.
- Chạy Debug bằng nút Start.
- Trong app, bấm Chọn thư mục config và trỏ tới thư mục chứa JSON.
- Nếu dùng SQL Admin, vào tab SQL và thêm tài khoản kết nối.
Chạy trong thư mục chứa ConfigTool.csproj:
dotnet restore
dotnet build ConfigTool.csproj -c Debug -f net10.0-windows10.0.19041.0Khuyến nghị dùng publish, không dùng Build thường nếu muốn output là thư mục chạy rời.
dotnet publish ConfigTool.csproj -c Release -f net10.0-windows10.0.19041.0 -r win-x64 -p:WindowsPackageType=None -p:SelfContained=false -p:PublishSingleFile=false -o bin\Release\ConfigTool-Windows-FolderNếu project đã có file publish-folder-release.bat, có thể chạy trực tiếp:
publish-folder-release.batOutput:
bin/Release/ConfigTool-Windows-Folder/Project có thể dùng publish profile nếu đã thêm:
dotnet publish ConfigTool.csproj -p:PublishProfile=ConfigTool-Windows-SlimBản trim mạnh hơn:
dotnet publish ConfigTool.csproj -p:PublishProfile=ConfigTool-Windows-Slim-TrimmedBản trimmed cần test kỹ vì MAUI/Blazor/SQL reflection có thể bị ảnh hưởng.
Có thể giới hạn ngôn ngữ trong ConfigTool.csproj:
<PropertyGroup>
<SatelliteResourceLanguages>vi;en</SatelliteResourceLanguages>
</PropertyGroup>Sau đó clean lại:
rmdir /s /q bin
rmdir /s /q obj
dotnet clean
dotnet buildLỗi dạng:
All image output filenames must be unique: appicon (wwwroot\appicon.png)Cách xử lý:
- Đổi tên
wwwroot/appicon.pngthànhfavicon.png, hoặc - Remove
wwwroot/**/*.pngkhỏiMauiImagebằngDirectory.Build.targets.
Sau đó xóa cache:
rmdir /s /q bin
rmdir /s /q objLỗi dạng:
Access denied for user 'root'@'localhost' (using password: NO)Kiểm tra lại:
userpasswordallownopassword- quyền đăng nhập theo host
- MySQL/MariaDB service đã bật chưa
Kiểm tra đang chạy target Windows và project dùng implementation trong:
Platforms/Windows/WindowsConfigFolderPicker.csKhông nên commit các thư mục/file build:
bin/
obj/
.vs/
*.user
*.suoKhông nên commit thông tin nhạy cảm:
config/cauhinh.json
config/connect.jsonNên commit file mẫu:
connect.example.jsonKhông nên commit FontAwesome Pro nếu license không cho phép. Có thể để sẵn README hướng dẫn copy asset vào wwwroot/vendor/fontawesome.
- Mở app.
- Chọn thư mục config của Unity.
- Chọn file JSON.
- Chọn bảng/block.
- Tìm kiếm, thêm, sửa, xóa key/item/record.
- Nếu Unity đổi file khi app đang mở, tool sẽ reload realtime và hạn chế ghi đè dữ liệu mới.
- Vào tab SQL.
- Thêm tài khoản kết nối.
- Bấm test kết nối.
- Chọn database.
- Chọn bảng/cột/key.
- CRUD bảng/cột/record hoặc chạy query.
- Dùng menu chuột phải để copy/paste/cut/export/import/xóa nhanh.
- Ưu tiên SignalR cho load dữ liệu/tìm kiếm/realtime.
- Không thêm JS custom nếu Blazor làm được.
- Bootstrap JS chỉ dùng cho modal/behavior cơ bản nếu cần.
- Khi ghi JSON cần đọc bản mới nhất trước, merge thay đổi rồi mới save để tránh đấu dữ liệu với Unity.
- Query SQL nên bọc soft error, không throw làm crash app.
- Các thao tác nặng nên chạy async/background và không block UI thread.
ConfigTool có thêm tab DNS Update để quản lý Dynamic DNS nội bộ:
- Tạo nhiều tài khoản No-IP.org và Dynu.com.
- Mỗi tài khoản có thể thêm nhiều domain/hostname.
- Lấy IP public thật, update lẻ từng domain hoặc update bulk theo provider/tài khoản.
- Log update, trạng thái domain, IP mới nhất và thông tin tài khoản được lưu ở
config/dynamic.json. - Có nút mở nhanh thư mục
configbằng Windows Explorer.
File mẫu nằm ở dynamic.example.json; khi app chạy, nếu chưa có config/dynamic.json thì tool sẽ tự tạo file rỗng.
Lưu ý: hãy dùng DDNS key/password do nhà cung cấp cấp cho update client. Không commit
config/dynamic.jsonthật lên Git nếu trong đó có mật khẩu.
- JSON: mở thư mục config đã chọn hoặc mở location của file JSON đang chọn.
- SQL: mở location
config/connect.json. - DNS: mở location
config/dynamic.json.
Chức năng Git Admin sử dụng Git CLI thật trên máy, vì vậy cần cài Git trước.
Link tải Git chính thức:
https://git-scm.com/install