9 Stimmen

Gibt es ein "Präprozessor"-Symbol, das dem /unsafe-Flag entspricht?

Ich habe es mit einem WriteableBitmap in C#. Ich verwende derzeit einen unsicheren Codeblock, um direkt auf die Pixel über WriteableBitmap.BackBuffer . Ich möchte mich nicht auf die /unsafe Option, deshalb erwäge ich die Verwendung von WriteableBitmap.WritePixels stattdessen.

Gibt es eine Möglichkeit der bedingten Kompilierung in der "unsicheren" Version, so dass es verwendet werden kann, wenn die /unsafe-Option für die Kompilierung verwendet wurde, ohne dass manuelle Integration in meine Projektdatei?

Kurz gesagt, ich suche etwas in der Art von:

#if UNSAFE
   //my unsafe version
#else
   //the supposedly safe version goes here
#endif

Die Erkennung zur Laufzeit ist auch schön; aber das bedeutet, dass ich immer kompilieren muss mit /unsafe und das bedeutet, dass der Bibliothekscode Aktualisierungen der Projektdateien erfordern würde, was weniger praktisch ist.

Im Grunde möchte ich die schnelle Version für den Fall behalten, dass es darauf ankommt, aber eine vernünftige Version haben, die einfach funktioniert, egal was passiert.

6voto

chuckj Punkte 25340

Ich empfehle Ihnen, mit dem Konfigurationsmanager eine oder mehrere neue Konfigurationen zu erstellen, z. B. "Unsafe Debug" und "Unsafe Release", die die vorhandenen Optionen enthalten und zusätzlich das Häkchen bei Unsafe setzen und ein bedingtes Symbol für UNSAFE hinzufügen. Anstatt die unsicheren Optionen umzuschalten, würden Sie die unsichere Konfiguration verwenden.

Die Konfigurationen könnten auch den Ausgabennamen der unsicheren Assembly ändern, so dass Sie zwei Assemblies hätten, z. B. Bitmaps.dll und Bitmaps.Unsafe.dll, und ein Client der Assembly kann entscheiden, welche seinen Anforderungen am besten entspricht, indem er angibt, auf welche Assembly er verweist.

0 Stimmen

Das sieht (genau wie der Vorschlag des Konfigurators) in der Tat recht machbar aus, danke!

1voto

configurator Punkte 39516

Ich würde vorschlagen, dass Sie kompilieren mit /unsafe /define:SAFE . Vielleicht gibt es einen anderen Weg, den ich nicht kenne.

0voto

Kredns Punkte 35211

Versuchen Sie es doch mal mit diesem Code

#define UNSAFE
#undef UNSAFE // comment this line out if you want to compile the save version

Dann können Sie den Code verwenden, den Sie in Ihrem Beispiel angegeben haben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X