2008-12-04 5 views
2

J'essaie de respecter les règles d'analyse de code VS2005 pour un nouveau projet. J'ai cette méthode:Analyse de code VS2005: CA1063 (appelez disposer (true) et supress finaliser) - avec journalisation

public void Dispose() 
{ 
    Console.WriteLine("Dispose() called"); 
    Dispose(true); 
    GC.SuppressFinalize(this); 
} 

(L'appel de la console deviendra un appel log4net à un moment donné, et nous sommes toujours intéressés par l'exploitation forestière pour éliminer certains de nos types).

Le presense de la ligne de débogage de la console déclenche cette erreur:

Erreur 1 CA1063: Microsoft.Design: Modifier PerfectDisposableClass.Dispose(): Void pour qu'il appelle Dispose (vrai), puis appelle GC. SuppressFinalize sur l'instance d'objet actuelle ('this' ou 'Me' dans VB), puis retourne. F: \ Visual Studio 2005 \ Projects \ DisposeAndFinalize \ DisposeAndFinalize \ PerfectDisposableClass.cs 26 DisposeAndFinalize

Sans recourir à des directives pragma est-il un moyen de contourner cela? Peut-être écrire mes propres règles? En outre, aér les règles existantes dans un assemblage quelque part je peux regarder avec le réflecteur?

Répondre

3

Vous pouvez mettre l'instruction à l'intérieur du journal Dispose (bool élimination) méthode pour maintenir dans les directives:

public void Dispose(bool disposing) 
{ 
    if (disposing) 
    { 
    Console.WriteLine("..."); 
    } 
    ... 
} 
+0

Des réponses simples sont toujours les meilleurs! J'ai eu des appels de log dans mon Dispose(), Dispose (bool) et le finaliseur. Pas besoin des appels de log dans Dispose() ou le finaliseur, je peux simplement les ajouter à Dispose (bool) comme vous l'avez suggéré, merci. – ng5000

+0

Avez-vous une idée de la protection de la méthode Dispose (bool)? Dans ce cas, je voudrais que la Console.WriteLine soit appelée avant chaque élimination, alors nous aurions toujours besoin que le code soit ce qu'il est dans le message d'origine, et cela casserait toujours CA1063. – Karata