Ich weiß, dass ich Präprozessordirektiven in C#
verwenden kann, um die Kompilierung eines Teils des Codes zu aktivieren / deaktivieren.
Wenn ich eine Direktive in der gleichen Datei definiere, funktioniert es gut:
%Vor% Ich werde jetzt in C++
verwendet, um all diese Konfigurationsdirektiven in eine einzige Headerdatei zu schreiben und sie in alle Dateien einzuschließen, in denen ich solche Anweisungen brauche.
Wenn ich das gleiche in C#
mache, funktioniert etwas nicht:
Ich habe auch Folgendes versucht, aber scheint, dass ich keine Direktive in einem Namespace definieren kann:
%Vor%C#
? In Ihrem .csproj gibt es einen Abschnitt:
%Vor%Wenn Sie zusätzliche Präprozessoren haben möchten, können Sie sie dort hinzufügen.
Oder über die Eigenschaften des Projekts, die sie dort automatisch für Sie hinzufügen. In Eigenschaften unter der Registerkarte Erstellen.
Sie können dies für das gesamte Projekt über Projekt | Eigenschaften tun.
Afaik gibt es keine Möglichkeit, Include-Dateien in C # zu verwenden. Für Gruppen von Dateien gibt es keine einfache Lösung.
Anstatt die bedingte Kompilierung zu Ihren Dateien hinzuzufügen und Code-Blöcke hinzuzufügen, die Linq verwenden, und andere, die dies nicht tun. Ich hatte alle Datenzugriffslogik verschoben (d. H. Code, der zwei Implementierungen mit Linq und ohne), um Bibliotheken zu trennen.
z. Erstellen Sie Schnittstellen, die Ihre Hauptanwendung verwenden wird. Und erstellen Sie zwei Implementierungen dieser Schnittstellen - eine, die Linq verwendet, und eine andere, die nicht verwendet:
Im Hauptprojekt:
%Vor%In Persistence.Linq.dll :
%Vor%In Persistence.SomethingOther.dll :
%Vor% Jetzt können Sie jede Implementierung von IUserRepository
in Ihre Hauptanwendungsklassen injizieren.
Es gibt keinen Sinn, #define
auf usings
anzuwenden, da Sie auf diese Weise die Verknüpfung der Bibliotheken nicht aufheben . Sie möchten vermeiden, in irgendeiner Bedingung zu verweisen.
In .NET gibt es keine Referenz für bedingte Assemblys (wenn nicht manuell, dynamisch).
Der Hauptnutzenpunkt von Präprozessordirektiven ist also nur enable/disable
Teile des Codes in Namespaces .
Tags und Links c# c-preprocessor conditional-compilation