2009-07-07 12 views
60

Por ejemplo, me sale esta advertencia del compilador, "¿Cómo me deshago de las advertencias del compilador "[algún evento] nunca usado" en Visual Studio?

El evento 'Company.SomeControl.SearchClick' nunca se utiliza.

pero sé que se usa debido al comentar que me arroja a cabo como 20 nuevas advertencias de páginas XAML que están tratando de utilizar este evento!

¿Qué pasa? ¿hay un truco para deshacerse de esta advertencia?

+1

¿Puede usted por favor puesto un ejemplo? –

Respuesta

95

Esto parece ser warning 67 y por lo tanto se puede suprimir con:

#pragma warning disable 67 

No se olvide de restablecer lo más pronto posible (después de la declaración del evento) con:

#pragma warning restore 67 

Sin embargo, volvería a verificar y me aseguro de que esté elevando el evento en algún lugar, no solo suscribiendo a él. El hecho de que el compilador escupe 20 advertencias y no 20 errores cuando se comente el evento también es sospechoso ...

También hay an interesting article sobre esta advertencia y específicamente cómo se aplica a las interfaces; hay una buena sugerencia sobre cómo lidiar con eventos "no utilizados".

+0

¡Eso es exactamente lo que necesito! ¡Gracias! La única diferencia es que agregué mi propio comentario al lado del 67, así que sabía lo que era en el futuro. Aquí está "exactamente" lo que escribí ... #pragma warning disable 67 // evento nunca usado evento público RoutedEventHandler SearchClick; #pragma warning restore 67 – jedmao

+10

Ese es un gran enlace. Gracias. –

+0

Esto es útil; no voy a mantenerlo en su lugar, sino solo algo para poner en marcha la idea actual ... – dudeNumber4

1

El compilador es aparentemente no es consciente de que está siendo usado en el código XAML. Intente suprimir la advertencia en su definición de evento.

Además, asegúrese de que realmente está planteando el evento en algún lugar.

+0

Eso es lo que yo también pensaba, así que moví el código XAML al código que estaba detrás y ¡mostró la misma advertencia! Y sí, estoy 100% seguro de que el evento se está levantando en alguna parte. Estoy mirando a la derecha. Está conectado a un botón. – jedmao

0

Puede suprimir advertencias individuales.

\Program.cs(13,20): warning CS0219: The variable 'foo' is assigned but its value is never used 

En este caso, CS0219 es la advertencia sobre las variables asignadas pero no utilizadas. Puede usar el/nowarn: 0219 flag, o agregar el número de error en el panel de propiedades para el proyecto (en "Build", recuerde eliminar el CS principal). Tenga en cuenta que suprime todas las advertencias de esta clase.

+0

¡Es bueno saberlo! Gracias :) – jedmao

57

Si se ve obligado a implementar un evento desde una interfaz, que su implementación no necesita, puede hacer lo siguiente para evitar la advertencia.

public event EventHandler CanExecuteChanged { add{} remove{} } 
+0

+1 ¡Excelente información, gracias! –

+0

Si hago esto, dice más adelante en el archivo donde '' if (OnCompleteOpenEvent! = Null) OnCompleteOpenEvent(); 'que" OnCompleteEvent no existe en el contexto actual ". – Almo

+0

@ Almo, eso es correcto. Sin embargo, está describiendo el caso en el que ESTÁ utilizando el evento y, por lo tanto, la advertencia no se mostraría, por lo que no utilizaría la solución para la advertencia. ¿Derecha? Normalmente tiene una interfaz que especifica el evento y dos subclases. Uno no usa el evento y usa esta solución. El otro usa el evento y nunca lanzó la advertencia para comenzar. –

1

O puede agregar a su proyecto <NoWarn>67</NoWarn>

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 
    ... 
    <NoWarn>67</NoWarn> 
</PropertyGroup> 
+3

esto deshabilitará la advertencia en todo el proyecto, potencialmente ocultando problemas reales con eventos no utilizados. – vidstige

12

La segunda mejor manera es mi humilde opinión dejar claro que el evento no es compatible con lanzar una excepción si alguien trata de suscribirse a él.

public event RoutedEventHandler SearchClick 
{ 
    add { throw new NotSupportedException(); } 
    remove { } 
} 

Como variante de este también puede simplemente dejar los métodos add y remove vacías ignorar silencio suscripciones en el evento.

La mejor solución es refactorizar el código, tal vez llevar la declaración del evento al implementador si es posible.

Como último recurso también se puede desactivar la advertencia al igual que

#pragma warning disable 67 
public event RoutedEventHandler SearchClick; 
#pragma warning restore 67 
Cuestiones relacionadas