Gunakan Analyzer Roslyn, generator sumber dan file aturan dalam proyek Unity untuk memeriksa kode Anda untuk gaya, kualitas, dan masalah lainnya.
Anda dapat menggunakan perpustakaan penganalisis yang ada untuk memeriksa kode Anda, dan menulis penganalisis Anda sendiri untuk mempromosikan praktik atau konvensi terbaik dalam organisasi Anda. Halaman ini menjelaskan cara menggunakan Analyzer Roslyn dan generator sumber dalam Proyek Unity kosong.
Note: Analyzer Roslyn hanya kompatibel dengan IDE yang mendukung publik Unity, yang merupakan Studio Visual dan JetBrains Rider.
Untuk informasi lebih lanjut tentang cara menulis dan menggunakan analisis Roslyn, lihat dokumentasi Konfigurasi Analyzer Microsoft dan Mulai dengan analisa Roslyn.
Anda dapat menggunakan generator sumber sebagai langkah tambahan dalam proses kompilasi skrip Anda. Anda dapat menggunakan generator sumber untuk menambahkan kode baru saat Anda menyusun kode yang ada. Seperti penganalisis, Anda dapat menggunakan generator sumber yang ada atau membuat Anda sendiri.
Note: Unity hanya mendukung versi 6.0.0-preview dari 'Sistem. Teks.Json' namespace. Jika Anda ingin menggunakan namespace ini dalam aplikasi Anda, pastikan Anda menggunakan versi 6.0.0-preview. Untuk informasi lebih lanjut tentang System.Text.Json
, lihat Sistem.Text.Json Namaspace dokumentasi Microsoft.
Untuk mengatur generator sumber menggunakan Visual Studio:
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Text;
using System.Text;
namespace ExampleSourceGenerator
{
[Generator]
public class ExampleSourceGenerator : ISourceGenerator
{
public void Execute(GeneratorExecutionContext context)
{
System.Console.WriteLine(System.DateTime.Now.ToString());
var sourceBuilder = new StringBuilder(
@"
using System;
namespace ExampleSourceGenerated
{
public static class ExampleSourceGenerated
{
public static string GetTestText()
{
return ""This is from source generator ");
sourceBuilder.Append(System.DateTime.Now.ToString());
sourceBuilder.Append(
@""";
}
}
}
");
context.AddSource("exampleSourceGenerator", SourceText.From(sourceBuilder.ToString(), Encoding.UTF8));
}
public void Initialize(GeneratorInitializationContext context) { }
}
}
using UnityEngine;
public class HelloFromSourceGenerator : MonoBehaviour
{
static string GetStringFromSourceGenerator()
{
return ExampleSourceGenerated.ExampleSourceGenerated.GetTestText();
}
// Start is called before the first frame update
void Start()
{
var output = "Test";
output = GetStringFromSourceGenerator();
Debug.Log(output);
}
}
Untuk informasi lebih lanjut tentang generator sumber, lihat Source Generators documentation Microsoft.
Anda dapat membatasi ruang lingkup penganalisis dalam proyek Anda dengan menggunakan definisi perakitan, sehingga mereka hanya menganalisis bagian tertentu dari kode Anda.
Unity menerapkan analyzer untuk semua perakitan di folder Aset proyek Anda, atau dalam setiap subfolder yang folder induk tidak mengandung file definisi perakitan. Jika seorang penganalisis berada dalam folder yang mengandung definisi perakitan, atau subfolder folder tersebut, penganalisis hanya berlaku untuk perakitan yang dihasilkan dari definisi perakitan itu, dan untuk perakitan lain yang merujuk itu.
Ini berarti, misalnya, bahwa packageWadah yang menyimpan berbagai jenis fitur dan aset untuk Unity, termasuk alat Editor atau Runtime dan perpustakaan, koleksi Aset, dan template proyek. Paket adalah unit mandiri yang dapat dibagikan di proyek Unity. Sebagian besar waktu ini disebut packages, tetapi kadang-kadang mereka disebut Unity Package Manager (UPM) packages. More info
Lihat di Glossary dapat memasok Analyzer yang hanya menganalisis kode terkait dengan paket, yang dapat membantu pengguna paket untuk menggunakan API paket dengan benar.
Untuk melihat informasi seperti waktu eksekusi total penganalisis dan generator sumber atau waktu eksekusi relatif dari setiap penganalisis atau generator sumber, pergi ke Preferences > Diagnostic Switches dan mengaktifkan EnableDomainReloadTimings. Ketika diaktifkan, informasi ditampilkan di jendela konsol.
Unity tidak mendukung instalasi Roslyn Analyzer atau generator sumber melalui NuGet secara langsung. Contoh di bawah ini menggunakan perpustakaan WordPress.org untuk menunjukkan cara menginstal Roslyn Analyzers dan generator sumber dari NuGet:
errorprone.net.coreanalyzers<version-number>\analyzers\dotnet\cd
. File yang diperlukan harus berada di folder ini, bernama ErrorProne.NET.Core.dll
, ErrorProne.Net.CoreAnalyzers.dll
, dan RuntimeContracts.dll
.Unity mengenali label RoslynAnalyzer dan memperlakukan aset dengan label ini sebagai Roslyn Analyzers atau generator sumber. Ketika Anda menetapkan label pada penganalisis, Unity recompiles scriptsSepotong kode yang memungkinkan Anda untuk membuat Komponen Anda sendiri, memicu peristiwa permainan, memodifikasi sifat komponen dari waktu ke waktu dan menanggapi input pengguna dengan cara apa pun yang Anda sukai. More info
Lihat di Glossary dalam lingkup penganalisis dan menganalisis kode dalam skrip tersebut sesuai dengan aturan dalam penganalisis. Setiap skrip yang berada dalam definisi perakitan yang sama sebagai penganalisis berada dalam lingkup penganalisis. Untuk menganalisis di tingkat akar folder Aset, Unity mempertimbangkan semua file dalam proyek untuk berada dalam lingkup. Untuk informasi lebih lanjut tentang lingkup, lihat Analisis lingkup di atas.
Untuk menguji bahwa penganalisis Anda bekerja dengan benar, ikuti contoh di bawah ini. Jika Anda telah menginstal penganalisis dengan benar, KesalahanProne. NET analyzer meningkatkan peringatan ketika menganalisis kode dalam contoh.
Buat file skrip baru bernama RethrowError.cs
. Salin kode berikut ke script ini dan simpan file:
using System;
using UnityEngine;
public class RethrowError : MonoBehaviour
{
void Update()
{
try
{
DoSomethingInteresting();
}
catch (Exception e)
{
Debug.Log(e.Message);
throw e;
}
}
private void DoSomethingInteresting()
{
throw new System.NotImplementedException();
}
}
Ketika Anda menyimpan file, Mempersatukan skrip dan menjalankan analisa yang berlaku pada kode skrip. Ketika KesalahanProne. NET analyzer dipasang dengan benar, itu meningkatkan peringatan berikut di jendela Konsol tentang kode di atas:
Assets\RethrowError.cs(14,23): warning EPC12: Suspicious exception handling: only e.Message is observed in exception block.
Assets\RethrowError.cs(15,19): warning ERP021: Incorrect exception propagation. Use throw; instead.
Untuk menentukan aturan Anda sendiri tentang cara menangani berbagai peringatan dan kesalahan yang dianalisis dalam proyek Anda, Anda dapat membuat file aturan. Untuk informasi lebih lanjut tentang cara membuat aturan kustom, lihat dokumentasi Visual Studio Microsoft pada cara membuat set aturan kustom.
Dalam folder akar Aset, letakkan file aturan bernama Default. Login Aturan yang Anda tentukan secara default. aturan berlaku untuk semua rakitan yang telah ditentukan (misalnya Assembly-CSharp.dll
), dan semua rakitan yang dibangun menggunakan file .asmdef.
Untuk menimpa aturan secara default. aturan untuk perakitan yang telah ditentukan, membuat file .ruleset di folder akar dengan nama [PredefinedAssemblyName].ruleset
. Sebagai contoh, aturan dalam Assembly-CSharp.ruleset
berlaku untuk kode di Assembly-CSharp.dll
. Hanya file .ruleset ini diperbolehkan di dalam folder akar:
Default.ruleset
Assembly-CSharp.ruleset
Assembly-CSharp-firstpass.ruleset
Assembly-CSharp-Editor.ruleset
Assembly-CSharp-Editor-firstpass.ruleset
Untuk menguji file aturan dalam Unity, ikuti langkah-langkah ini:
RethrowError.cs
.<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="New Rule Set" Description=" " ToolsVersion="10.0">
<Rules AnalyzerId="ErrorProne.NET.CodeAnalyzers" RuleNamespace="ErrorProne.NET.CodeAnalyzers">
<Rule Id="ERP021" Action="Error" />
<Rule Id="EPC12" Action="None" />
</Rules>
</RuleSet>
File Default.ruleset
mendefinisikan aturan berikut:
Setelah Anda menambahkan file aturan ke proyek Anda, reimport script apa pun yang hidup dalam perakitan di mana aturan harus berlaku. Ini memaksa Unity untuk mengompilkan perakitan menggunakan file aturan baru. Setelah rekompilasi, Anda harus melihat dua pesan di jendela Konsol:
Assets\Subfolder\RethrowError.cs(15,19): error ERP021: Incorrect exception propagation. Use throw; instead.
Assets\RethrowError.cs(15,19): error ERP021: Incorrect exception propagation. Use throw; instead.
Perhatikan bahwa Unity menerapkan aturan yang didefinisikan secara default. aturan untuk kedua Assets/RethrowError.cs
dan Assets/Subfolder/RethrowError.cs
.
Dalam Aset / Subfolder, buat file .ruleset, dan berikan nama apa pun yang Anda suka (dalam exampleHello.ruleset
ini):
<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="New Rule Set" Description=" " ToolsVersion="10.0">
<Rules AnalyzerId="ErrorProne.NET.CodeAnalyzers" RuleNamespace="ErrorProne.NET.CodeAnalyzers">
<Rule Id="ERP021" Action="Info" />
<Rule Id="EPC12" Action="Info" />
</Rules>
</RuleSet>
File Hello.ruleset
baru ini memberi tahu Unity untuk mencetak EPC12 dan ERP021 ke Konsol, tanpa memperlakukan mereka sebagai peringatan atau kesalahan.
Setelah Unity menyusun proyek lagi, Anda harus melihat pesan ini di jendela Konsol:
Assets\Subfolder\RethrowError.cs(14,23): info EPC12: Suspicious exception handling: only e.Message is observed in exception block.
Assets\Subfolder\RethrowError.cs(15,19): info ERP021: Incorrect exception propagation. Use throw; instead.
Assets\RethrowError.cs(15,19): error ERP021: Incorrect exception propagation. Use throw; instead.
Aturan di Default.ruleset
masih berlaku untuk Assets\RethrowError.cs
, tetapi tidak lagi berlaku untuk Assets\Subfolder\RethrowError.cs
, karena aturan dalam override Hello.ruleset
.
Untuk informasi lebih lanjut tentang semua file tindakan aturan yang diizinkan, lihat dokumentasi Visual Studio pada Menggunakan aturan analisis kode set editor.
Berikut ini adalah link ke Github repositories dari perpustakaan analyzer Roslyn populer lainnya: