2012-08-17 1 views
-1

Je dois déclarer un attribut pour l'exclusion de couverture dans mon code, le problème est que j'ai un groupe de projet et je souhaite le créer quelque part où je peux y accéder depuis tous les projets quand je besoin, maintenant que je l'ai en dehors des espaces de noms de sorte qu'il serait plus facile à utiliser, et son déclaré dans chaque projet comme:Meilleur moyen d'obtenir une classe accessible dans tous mes projets

public class CoverageExcludeAttribute : Attribute 
{ 

} 

est-il une meilleure façon d'atteindre cet objectif dans un manière qu'il pourrait être accès n'importe où dans mon groupe de projet et déclaré une seule fois, sans avoir à ajouter son espace de noms (par exemple en utilisant l'espace de noms global) à chaque fichier dans lequel j'utilise l'attribut?

Merci

+1

Avez-vous pensé à créer simplement une classe CustomCoverageExclusion en tant que fichier .cs distinct ou .dll que vous pouvez référencer dans votre projet .. vous pouvez ajouter cela comme propriétés internes au projet, consultez Paramètres – MethodMan

+1

-1 'sans avoir à ajouter son espace de noms à chaque fichier j'utilise l'attribut dans? '. .NET requiert intentionnellement que l'espace de noms soit importé via une instruction using ou en qualifiant pleinement le nom. Même l'espace de noms System n'existe pas par défaut. Demander à .NET d'arrêter de travailler comme ça est futile. –

+1

Alors que je suis d'accord avec P.Brian.Mackey, je pense que la seule façon de le faire est exactement comme DjKraze l'a dit: créer un nouveau micro-projet de type ClassLibrary, en ajouter un seul.cs fichier avec votre classe de couverture (..) et assurez-vous que la classe est à l'intérieur du bloc no namespaces. Construire puis dans chacun des autres projets faire une référence à ce micro-projet que vous venez de créer .. Désolé, presque pas d'autres options pour une telle chose! – quetzalcoatl

Répondre

1

Même si je suis d'accord avec P.Brian.Mackey, je pense que la seule façon de le faire est exactement comme DjKraze dit:

Créer une nouvelle micro-projet de type ClassLibrary, ajoutez un seul fichier .cs avec votre classe Coverage (..) et assurez-vous que la classe est à l'intérieur du bloc no namespaces. Ensuite, construisez-le et, pour chacun des autres projets, faites une Add-Reference à ce micro-projet que vous venez de créer. De cette façon, cela fonctionnera sûrement, et vous aurez un endroit pratique pour mettre tout autre code commun à disponible partout.

Cependant, chaque projet devra être mis à jour avec la référence. C'est l'exigence minimale - tout compte fait, si vous voulez utiliser n'importe quoi au lieu de copier, il doit être référé ..

Désolé, presque pas d'autres options pour une telle chose! L'autre façon est de .. euh, copier. Vous pouvez facilement configurer un simple script de pré-construction qui copiera le fichier .cs donné à chacun de vos projets, mais "ajouter" le fichier à la liste de construction du .csproj est un peu plus difficile, encore possible avec un peu de Ruby ou Python ou des amis ...

Hm .. disant que, il peut être possible d'écrire un script de pré-construction pour injecter une référence au micro-projet automatiquement .. Mais je ne sais pas si cela vaut la peine de le faire. Avez-vous plus de 50-100 projets? Sinon, probablement ça ne vaut pas ..

-1

Vous pouvez utiliser l'injection de dépendances http://en.wikipedia.org/wiki/Dependency_injection

Les plus populaires sont: l'unité Microsoft, Ninject, NHibernate, StructureMap, Autofac.

Bonne chance!

+0

Huh? Pour une compilation [Attribut]? Comment?! DI/IoC ne va pas aider ici! – quetzalcoatl

+1

Désolé, je n'ai pas remarqué que c'est un attribut :) –

0

Ceci ne concerne que VS2010 et au-dessus

Si vous voulez un code source défini dans chacun de vos projets, mais sans référence du projet, jetez un oeil à certains la fonctionnalité fournie par NuGet, en particulier Source Code Transformations. Ceux-ci permettent l'ajout de code source au projet lorsque vous ajoutez le package NuGet au projet.

+0

Merci ... mais im en utilisant VS2008 – CloudyMarble

+0

J'aurais dû voir cela dans vos balises, désolé :( – Lukazoid

Questions connexes