37 votes

Comment écrire un code avec la date d'expiration?

J'ai juste eu cette idée de quelque chose que j'aimerais être capable d'utiliser:

Disons que j'ai corriger un bug et j'ai décider d'écrire une vilaine ligne de code qui résout le problème immédiat, mais uniquement parce que je me promets que je vais bientôt trouver le temps d'effectuer un véritable refactoring.

Je veux être capable de quelque marque que la ligne de code comme "Expiré" et ajouter une date, de sorte que si le code est compilé quelques temps après cette date, il y aura une erreur de compilation/avertissement avec un message approprié.

Toutes les suggestions? Il doit être possible de faire - peut-être à l'aide de certains compliqué #SI ou de certaines options dans visual studio? Je suis avec VS 2005 - principalement pour C#.

Merci!

[EDIT]: Wow - jamais attendu à cette question à amasser autant d'intérêt :) Merci à vous tous pour vos réponses et pour le transformer en un débat intéressant. Je sais que c'est difficile de justifier l'utilisation de quelque chose comme cela - et je n'aurai probablement pas l'utiliser, mais parfois, lorsque vous devez expédier une version d'HIER et vous vous retrouvez compromettre sur une inégale corriger au lieu de cela, vous voulez vous forcer à le résoudre dans un avenir proche.

J'ai choisi MartinStettner la suggestion que la réponse parce qu'elle répondait à mes besoins - pas d'erreur sur uniquement à l'exécution, au cours de la compilation, pas besoin de définir de nouveaux types juste pour ce but - et il n'est pas limité à un champ d'application de l'ensemble de la méthode. Cheers!

32voto

Binary Worrier Points 27424
<p>Marquez le code avec l'attribut, vous obtiendrez un avertissement de <code></code> compilateur, qui vous harcelerpour fixer le code<pre><code></code></pre><p>autrement...</p><p>Écrivez votre propre attribut, en le passant une date d'expiration sur le constructeur, dans le constructeur jeter une exception si <code></code> .</p><p>La compilation échouera jusqu'à ce que vous répariez le code (ou plus probablement augmenter la date d'expiration, ou <em>beaucoup plus probable</em> que vous supprimez simplement l'attribut.</p></p>

27voto

jim tollan Points 12995

oooohhh - là est orrible. essayez ceci pour un éclat de rire:

[AttributeUsage(AttributeTargets.All)]
public class BugExpiryAttribute : System.Attribute
{
    // don't tell 'anyone' about this hack attribute!!
    public BugExpiryAttribute(string bugAuthor, string expiryDate)
    {
        DateTime convertedDate = DateTime.Parse(expiryDate);
        Debug.Assert(DateTime.Now <= convertedDate, 
            string.Format("{0} promised to remove this by {1}", 
                bugAuthor, convertedDate.ToString("dd-MMM-yyyy")));
    }
}

ensuite, décorer votre méthode/classe etc:

[BugExpiryAttribute("Jack Skit", "2011-01-01")]
public static void Main(string[] args)
{
...
}

... méchant :-)

[AVERTISSEMENT] - créé au nom de l'intérêt des milieux universitaires, pas de code de production finese!!

[edit] - juste pour clarifier, le code compilé et dans la production continuera à courir à compter de la 'bugExpriryDate'. seulement une fois que le code est exécuté dans le compilateur (à compter de la date), le message d'avertissement d'être soulevée (debug.assert). juste pensé qu'il vaut la peine de faire cette distinction - bravo MartinStettner.

[avertissement] - si elle est utilisée dans les classes/méthodes, etc devront être lus par la réflexion. cependant (et c'est intéressant) va travailler tout de suite dans le compilateur s'il est utilisé sur sub Main(). comme c'est étrange!! (merci pour le clin de œil Hans...)

17voto

ja72 Points 9417
<p>Je pense que c'est la raison pour laquelle Visual Studio a une liste de tâches. Ajouter le commentaire:<pre><code></code></pre><p>et il va apparaître comme ça</p><p><img src="http://i.stack.imgur.com/Iuuzk.png" alt="Task List Pane">.</p><p>les mots clés sont configurables à partir des options</p><p><img src="http://i.stack.imgur.com/qnrcY.png" alt="Task List Options"></p></p>

16voto

MartinStettner Points 14514

Vous pouvez écrire des lignes de commentaires dans le formulaire

// Expires on 2011/07/01

et ajouter un paquetage pas qui ne une solution à l'échelle de remplacer ces lignes par quelque chose comme

#error Code expired on 2011/07/01

pour toutes les lignes qui contiennent une date antérieure à la date actuelle. Pour ce paquetage étape vous devez écrire un programme court (probablement à l'aide d'expressions régulières et d'une date de comparaison de logique)

Cette étape peut également être réalisée par un VS macro, qui permet un accès plus facile à tous les fichiers fo la solution, mais a l'inconvénient qu'il doit être installé et exécuté sur tous VS installations où votre projet est compilé.

7voto

openshac Points 1246
<p>Eh bien, il ne fait pas exactement ce que vous demandez, mais vous pouvez utiliser un appel méthode Debug.Assert() méthode qui vous alerter (dans Debug seulement) que le code a expiré. Un avantage serait qu'il ne serait pas par inadvertance affecter votre code de production (compilation ou exécution), mais serait suffisamment ennuyeux dans Debug pour que vous vouliez le corriger.<pre><code></code></pre></p>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X