Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

320
Vistas
NoWarn no funciona en DNX

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?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

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; // Fine

Puede 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 :)

over 4 years ago · Santiago Trujillo Denunciar

0

Las opciones del compilador no se pueden especificar en el archivo xproj. Siga estos pasos para suprimir una advertencia del compilador:

  1. Abra el archivo project.json del proyecto. Todas las opciones del compilador deben especificarse en este archivo.

  2. Agregue la sección compilationOptions al final del archivo:

    "Opciones de compilación": { "noWarn": [649] }

  3. 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.

  4. 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.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda