Cuando instalo el analizador de código Roslyn como paquete NuGet para un proyecto (por ejemplo Assembly-CSharp ) de solución de mi proyecto Unity, suceden 2 cosas:
Packages en la raíz del proyecto Unity<Analyzer Include="packages\SomeAnalyzer.1.2.3\analyzers\dotnet\cs\SomeAnalyzer.dll" /> se agregan al archivo .csproj (en nuestro caso Assembly-CSharp.csproj ) El problema es que Unity regenera el archivo .csproj (por ejemplo, cuando agrega o elimina archivos .cs o cuando cierra y vuelve a abrir el editor de Unity). La regeneración de .csproj borra las líneas añadidas, mencionadas anteriormente. Y los analizadores dejan de funcionar.
Parece que para Unity 2020 el problema está resuelto . Pero mi proyecto está en Unity 2019 y no se pudo actualizar a 2020 ahora. Entonces, mi pregunta es: ¿Es posible agregar un analizador de código a Unity-project y hacer que funcione para las versiones de Unity anteriores a 2020?
Ok, he encontrado algunas soluciones:
# 1 Código con olor, pero funciona (pero lo más probable es que una de las siguientes dos soluciones sea mejor para usted):
( lo encontré aquí ) Aceptamos que Unity borre líneas sobre el paquete instalado del archivo .csproj . Pero usamos un gancho de Unity AssetPostprocessor.OnGeneratedCSProjectFiles para reescribir "manualmente" .csproj devolviendo esas líneas.
#2 Manera mucho más elegante (yo la elegí)
(Lo encontré aquí ) Simplemente colocamos el archivo Directory.Build.props cerca de nuestro .sln y lo colocamos (manualmente, pero una vez) en sus líneas, que Unity elimina de .csproj . Eso es todo.
#Nota: si desea que el analizador no funcione para todos los proyectos, puede usar Condición para el grupo de propiedades .
#3 No lo comprobé, pero puede ser que se convierta en la mejor solución para ti
( lo encontré aquí ) Deberíamos agregar el archivo Assets/csc.rsp que hace referencia al conjunto de reglas y dlls del analizador de esta manera:
-a:"full_or_relative_path_to_UnityEngineAnalyzer.dll" -ruleset:"full_or_relative_path_to_rules.ruleset"Puede funcionar solo con Rider (IDE), porque los requisitos se establecen como:
Se aplica a Unity 2019.2+ con el paquete Rider 1.1.3+
He estado observando la característica de los analizadores para la unidad, en una versión 2019.4, los archivos csproj se generan correctamente sin ningún archivo csc.rsp si sigo las siguientes reglas de la unidad (del enlace que publicaste):
Pero ahora no me salen los avisos que buscaba en la consola de Unity. Sin embargo, las advertencias están ahí en una versión 2020. ¿Puede ver las advertencias de los nuevos analizadores en una versión 2019 de Unity?