En mi proyecto de prueba, tengo campos privados que no están asignados en el código, pero están asignados con reflexión.
Al compilar recibo advertencias como:
Advertencia CS0649 El campo 'CLASSNAME.FIELDNAME' nunca se asigna y siempre tendrá su valor predeterminado nulo
Intenté agregar <NoWarn>649</NoWarn> al primer PropertyGroup en xproj. Pero sigo teniendo los errores.
¿NoWarn no funciona en DNX? ¿O estoy haciendo algo mal? ¿Hay alguna otra solución al problema?
Código de muestra:
class Example { private string warningHere; // CS0649 void UseField() { Console.WriteLine(warningHere); } }Debe convencer al compilador de que sabe lo que está haciendo, se niega a considerar la posibilidad de que use Reflection para introducir un valor en el campo. Eso es bastante simple de hacer:
private string warningHere = null; // FinePuede objetar "¡Pero eso es completamente inútil! ¡CLR ya inicializa el campo en nulo!". Lo cual es ciertamente cierto. Sin embargo, no pasa nada, eliminar código superfluo como este es el trabajo del optimizador de jitter . Es particularmente bueno para eliminar asignaciones nulas innecesarias.
Podría tener
<NoWarn>0649</NoWarn>en el csproj
Tenga en cuenta que esto es equivalente a resolver un problema local con un mazo global. Esta advertencia es muy importante, querrás tenerla en vigor para todo el código que compiles. Solo para demostrar, en el fragmento de código anterior cambie class a struct , mantenga el código de reflexión igual. Y tenga en cuenta que no puede dar un valor a ese campo de warningHere . Un efecto secundario de que la estructura se encuadre antes de pasar a FieldInfo.SetValue(), solo se actualiza la copia enmarcada. Ese es un error desagradable para diagnosticar si no tiene una advertencia para alertarlo.
Usar la #pragma warning en la fuente está bien, pero no es superior, demasiado fácil de olvidar para restaurarlo.
El proyecto cambió a la construcción con MSBuild hace solo dos meses, asegúrese de que su extracción no sea demasiado antigua y que también haya cambiado. Puede presentar un error en github para recordarles si la función aún no funciona. Y considere rascarse esa picazón si no puede esperar, arréglelo usted mismo. El beneficio final de un proyecto de código abierto :)
Las opciones del compilador no se pueden especificar en el archivo xproj. Siga estos pasos para suprimir una advertencia del compilador:
Abra el archivo project.json del proyecto. Todas las opciones del compilador deben especificarse en este archivo.
Agregue la sección compilationOptions al final del archivo:
"Opciones de compilación": { "noWarn": [649] }
Guarde el archivo y espere unos segundos hasta que vea el mensaje "Restauración del paquete completada" en la barra de estado de Visual Studio.
Reconstruya el proyecto.
Esto debería suprimir la advertencia. Sin embargo, a veces (probablemente un error), los cambios que realiza en project.json no surten efecto incluso después de una compilación limpia. En este caso, al realizar cambios ficticios adicionales en el archivo y reconstruirlo, generalmente se resuelve el problema.