89 lines
2.1 KiB
Markdown
89 lines
2.1 KiB
Markdown
# Unity Editor Only Usage Analyzer
|
|
|
|
Roslyn Analyzer để phát hiện việc sử dụng code được wrap trong `#if UNITY_EDITOR` từ code không có directive tương ứng, có thể gây lỗi build.
|
|
|
|
## Cài đặt
|
|
|
|
### Cách 1: Build và thêm vào .csproj (Khuyến nghị)
|
|
|
|
1. Build analyzer project:
|
|
```bash
|
|
cd UnityEditorOnlyAnalyzer
|
|
dotnet build -c Release
|
|
```
|
|
|
|
2. Thêm analyzer vào Unity project bằng cách chỉnh sửa `.csproj` files:
|
|
```xml
|
|
<ItemGroup>
|
|
<Analyzer Include="$(SolutionDir)UnityEditorOnlyAnalyzer\bin\Release\netstandard2.0\UnityEditorOnlyAnalyzer.dll" />
|
|
</ItemGroup>
|
|
```
|
|
|
|
### Cách 2: Sử dụng như NuGet Package
|
|
|
|
1. Tạo NuGet package:
|
|
```bash
|
|
dotnet pack -c Release
|
|
```
|
|
|
|
2. Thêm vào `packages.config` hoặc sử dụng PackageReference trong .csproj
|
|
|
|
## Cách hoạt động
|
|
|
|
Analyzer sẽ cảnh báo khi:
|
|
- Một method được định nghĩa trong `#if UNITY_EDITOR` nhưng được gọi từ code không có directive này
|
|
- Một class được định nghĩa trong `#if UNITY_EDITOR` nhưng được khởi tạo từ code không có directive này
|
|
- Một property/field được định nghĩa trong `#if UNITY_EDITOR` nhưng được truy cập từ code không có directive này
|
|
|
|
## Ví dụ
|
|
|
|
### ❌ Code sẽ bị cảnh báo:
|
|
|
|
```csharp
|
|
#if UNITY_EDITOR
|
|
public void EditorOnlyMethod() { }
|
|
#endif
|
|
|
|
public void RegularMethod()
|
|
{
|
|
EditorOnlyMethod(); // ⚠️ Cảnh báo: EditorOnlyMethod chỉ có trong UNITY_EDITOR
|
|
}
|
|
```
|
|
|
|
### ✅ Code đúng:
|
|
|
|
```csharp
|
|
#if UNITY_EDITOR
|
|
public void EditorOnlyMethod() { }
|
|
#endif
|
|
|
|
#if UNITY_EDITOR
|
|
public void RegularMethod()
|
|
{
|
|
EditorOnlyMethod(); // ✅ OK: Cả hai đều trong UNITY_EDITOR
|
|
}
|
|
#endif
|
|
```
|
|
|
|
## Diagnostic ID
|
|
|
|
- **ID**: `UNITY_EDITOR_ONLY_USAGE`
|
|
- **Severity**: Warning
|
|
- **Category**: Unity
|
|
|
|
## Tùy chỉnh
|
|
|
|
Bạn có thể disable warning này trong `.editorconfig`:
|
|
|
|
```ini
|
|
[*.cs]
|
|
dotnet_diagnostic.UNITY_EDITOR_ONLY_USAGE.severity = none
|
|
```
|
|
|
|
Hoặc trong code:
|
|
```csharp
|
|
#pragma warning disable UNITY_EDITOR_ONLY_USAGE
|
|
// Your code here
|
|
#pragma warning restore UNITY_EDITOR_ONLY_USAGE
|
|
```
|