6

Ich bin mir ziemlich sicher, dass ich die Antwort kenne, aber ich frage mich, ob es eine Möglichkeit gibt, eine globale "using" -Richtlinie in meinen C# -Projekten zu definieren, so dass ich die Anweisung nicht über jeder Code-Datei wiederholen muss.Globale "Using" -Direktiven in VS2010/C#?

Mein Interesse ist wirklich mit der Einführung von Erweiterungsmethoden in .NET Framework verwurzelt. Die einzige Möglichkeit, eine Erweiterungsmethode zu verwenden, besteht darin, eine using-Direktive für den Namespace zu definieren, der die Erweiterungsmethoden enthält. Ohne die using-Direktive verliere ich Intellisense-Fähigkeiten für die Erweiterungsmethoden, was bedeutet, dass ich nicht immer sehen werde, welche Methoden verfügbar sind.

Als Framework-Entwickler ist es wichtig für mich, sicherzustellen, dass die Typen und Methoden, die im Framework zur Verfügung stehen, klar und für den Entwickler verfügbar sind. Während Dokumentation und Training ihren Zweck erfüllen, habe ich festgestellt, dass die meisten Entwickler den Zeitraum erreichen und durch die Intellisense-Liste scrollen, um zu sehen, welche Methoden und Eigenschaften verfügbar sind. Selbst wenn sie den Objektkatalog aufrufen oder die Referenzdokumentation anzeigen, wissen sie nichts über eine Erweiterungsmethode, wenn sie nicht darüber Bescheid wissen. Hier kommt Intellisense ins Spiel.

Und während ich die using-Direktive zu der Vorlage hinzufügen kann, die VS verwendet, entfernt die Option "Remove and Sort" in VS die Direktive, die auf die Erweiterungsmethoden verweist, wenn sie nicht verwendet wird .

Also, alles, was gesagt wird, gibt es eine Möglichkeit, eine globale "Using" -Richtlinie in VS 2010 zu definieren? Wenn nicht, wird es von MS für die Zukunft in Betracht gezogen?

+0

Dies ist durch Missbrauch der Erweiterungsmethode selbst induziert. Hart auf die Entwickler gerade jetzt, um das richtige # zu finden.Mord in ein paar Jahren, wenn jemand anders den Code lesen muss. –

+1

Ich stimme nicht zu. Extensions-Methoden dienen einem Zweck, sind aber nur nützlich, wenn Sie wissen, dass sie da sind. Wenn keine Richtlinie verwendet wird, sind sie standardmäßig nicht verfügbar. Es kommt also nicht darauf an, ob der Entwickler die richtige using-Anweisung findet, wenn er erst die Methode kennen muss. Und mit der integrierten Resolve-Funktionalität in VS sowie Tools wie ReSharper und anderen ist es viel einfacher, die richtige using-Anweisung zu finden. – SonOfPirate

Antwort

6

Sie können Ihre Erweiterungsmethoden im globalen Namespace platzieren, indem Sie sicherstellen, dass die enthaltenen Klassen nicht in einem Namespace deklariert sind. Dies wird sie global verfügbar machen.

Wie Standard-Namespaces - dies ist nicht möglich, abgesehen von der Änderung der VS-Vorlagen.

Natürlich ist es immer möglich die MS wird es berücksichtigen. Unwahrscheinlich, aber möglich.

Anstatt nach einer technischen Lösung zu suchen, sollten Sie vielleicht Ihre Mitentwickler aufklären und eine Konvention bezüglich Erweiterungsmethoden (z. B. ein bekanntes Standort-/Namespace-Schema) bereitstellen?

+0

Ich stimme Ihrem letzten Absatz zu; niemand (naja, vielleicht meistens niemand) möchte ein Framework benutzen, das ihren globalen Namensraum verschmutzt, sie wollen eine gezielte Nutzung des Frameworks, wann immer sie es wollen und dass es verschwindet, wenn es nicht gewünscht wird. – Randolpho

+0

Wie gesagt, Bildung und Dokumentation gehen nur so weit und die überwiegende Mehrheit der Menschen (einschließlich der Entwickler) behalten durch die Anwendung. Während wir bei Code-Reviews Trainings- und Referenzmaterial bereitstellen und Instanzen abfangen können, wäre es dennoch schön, wenn die Methoden in Intellisense angezeigt würden. Wenn ReSharper dies erreicht, wie unten angegeben, dann denke ich, dass es mir gut geht. – SonOfPirate

+0

@SonOfPirate - so weit ich weiß, fügt Resharper ** not ** automatisch 'using' Anweisungen hinzu. – Oded

0

Um Ihr tatsächliches Problem zu beantworten, wenn Sie Ihre statische Klasse mit Erweiterungen in keine Namespace setzen, wird es überall verfügbar sein. Verwenden Sie vorsichtig!

+0

Ich hatte nicht darüber nachgedacht, die Erweiterungsmethoden auf diese Weise zu "verstecken", aber ich stimme zu, dass es sich nicht wie eine gute Übung anhört. – SonOfPirate

0

Wenn es Ihnen wirklich wichtig ist, können Sie Ihr Unternehmen ReSharper kaufen lassen und es auf allen Entwicklungsmaschinen installieren, damit Sie Intellisense für diese Methoden erhalten, mit der Option, die using-Direktive automatisch hinzuzufügen.

Von dem was ich gehört habe (habe es nicht selbst benutzt) scanne der ReSharper alle möglichen Assemblies und ich nehme an, du kannst es so konfigurieren, dass beim Erstellen einer neuen Klasse automatisch die "using" Direktive hinzugefügt wird, obwohl ich mir nicht 100% sicher bin Dies.

+0

Ich muss ReSharper erneut sehen, um zu sehen, ob es die Erweiterungsmethoden in Intellisense zeigt, selbst wenn keine Direktive verwendet wird. Dies würde mein Problem lösen und wir haben bereits ReSharper auf allen Entwicklungssystemen installiert. Leider ist ReSharper's eingebaute Organisationsfunktion, die unbenutzt beim Speichern nach den Direktiven sortiert und entfernt, die diese Situation auf den Kopf gestellt hat. Aber wenn sie immer noch in Intellisense angezeigt werden, dann ist alles gut. – SonOfPirate

+0

@SonOfPirate - Ich glaube es, vielleicht nur in der neueren Version though ..: / –

0

Sie können .net-Dateivorlagen für Klassen erstellen, die Ihre using-Direktiven enthalten.

Siehe Erstellen von Projekt- und Artikelvorlagen (https://msdn.microsoft.com/en-us/library/ms247121.aspx).

Sie können die Vorlage als Teil des Projekts speichern, in dem sich Ihre Erweiterungen befinden. Dies ist jedoch am besten in einem anderen Projekt möglich.