returns - param name c#
NoWarn no funciona en DNX (2)
Código de muestra:
class Example {
private string warningHere; // CS0649
void UseField() {
Console.WriteLine(warningHere);
}
}
Tienes que convencer al compilador de que sabes lo que estás haciendo, se niega a considerar la posibilidad de que uses Reflection para meter un valor en el campo. Eso es bastante simple de hacer:
private string warningHere = null; // Fine
Puede objetar "¡Pero eso es completamente inútil! ¡El CLR ya inicializa el campo a nulo!". Lo cual es ciertamente cierto. Sin embargo, no se hace daño, eliminar el código superfluo como este es el trabajo del optimizador de fluctuaciones . Es particularmente bueno para eliminar tareas 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 martillo global. Esta advertencia es muy importante, desea tenerla en efecto para todo el código que compile. Solo para demostrar, en el fragmento de código anterior cambiar 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 colateral de la estructura se encajona antes de pasarla a FieldInfo.SetValue (), solo se actualiza la copia en caja. Eso es un error desagradable para diagnosticar si no tienes una advertencia para alertarte.
Usar la #pragma warning
en la fuente es correcto, pero no superior, demasiado fácil de olvidar para restaurarlo.
El proyecto se cambió a la construcción con MSBuild hace solo dos meses, asegúrese de que su tirón no sea demasiado antiguo y que usted también haya cambiado. Puede presentar un error en github para recordarles si la función aún está disponible. Y considere rascarse la picazón si no puede esperar, arréglelo usted mismo. El beneficio final de un proyecto de código abierto :)
En mi proyecto de prueba, tengo campos privados que no están asignados en el código, pero que 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
He intentado 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?
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:
"compilationOptions": {"noWarn": [649]}
Guarde el archivo y espere unos segundos hasta que vea el mensaje "Se completó la restauración del paquete" en la barra de estado de Visual Studio.
Reconstruir el proyecto.
Esto debería suprimir la advertencia. Sin embargo, a veces (probablemente un error), los cambios que realice 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 la reconstrucción, por lo general, resuelve el problema.