2008-11-04 10 views
18

Ich entwickle eine Bibliothek für die Verwendung in anderen Anwendungen und diese Bibliothek verfügt über zahlreiche Debugging und Logging-Anweisungen dank NLog.Visual Studio - So entfernen Sie eine Referenz im Freigabemodus

Kann ich den Verweis auf NLog.dll ausschließen, wenn ich in den Freigabemodus umschalte?

Cheers,

+2

Gute Frage. Ich habe einen Anwendungsfall, bei dem ich eine Referenz im Freigabemodus entfernen muss. –

Antwort

25

Sie können manuell die csproj Datei, bearbeiten und so etwas tun:

<Reference Include="NLog" Condition="'$(Configuration)' == 'Debug'" /> 

Dies macht es nur, dass die Baugruppe in Debug verweisen. Ich würde jedoch nicht empfehlen, dies häufig zu tun, da sich dieses Verhalten nicht in der Referenzliste in Visual Studio widerspiegelt, wenn Sie die Konfiguration ändern. Es funktioniert aber beim Kompilieren

+2

Ich denke, Sie können VS erzwingen, wenn Sie entladen und neu geladen werden, sobald Sie Ziele gewechselt haben. –

+5

Ich benutze diese Methode ausgiebig und es ist sehr nützlich. Leider generiert Visual Studio eine Warnung über die Referenz "deaktiviert". Nichtsdestoweniger ermöglicht dies sehr wichtige Szenarien, z. B. die Referenzierung verschiedener Dateien in 64-Bit-Builds und 32-Bit-Builds. – Sander

0

ich nicht eine gute Art und Weise denken, dies zu tun. Es sei denn, Sie haben eine Stub-Referenz für NLog.dll geschrieben. Da Sie die Referenz in Ihrem Code verwenden, sehe ich nicht, wie Sie es einfach in Ihrer Version entfernen könnten.

Wahrscheinlich zu spät jetzt, aber in der Zukunft könnten Sie eine Klasse schreiben NLog.dll zu wickeln und dann nur an einer Stelle ändern, so dass es nicht tatsächlich in der Release-Version einloggen würde. Oder eine Art Flagge haben.

+0

Nun, wenn Sie Code in der #if DEBUG hinzufügen, dann sind sie ausgeschlossen, wenn im Freigabemodus kompiliert –

+0

Wow, tut das auf jeden Log-Aufruf ziemlich schmerzhaft. Ich würde vorschlagen, das Attribut Conditional einzuschließen und dann zu verwenden. – fostandy

2

Die einzige Art, die ich weiß, ist, die Referenz vollständig herauszunehmen und die Baugruppe über Reflektion aufzurufen. Dann sollten Sie nur protokollieren, wenn die Assembly geladen wird.

-1

Es gibt keinen Grund, eine Referenz zu entfernen, wenn Sie sicher sind, dass von dieser DLL kein Code verwendet wird. In diesem Fall können Sie einfach DLL entfernen.

-1

Warum möchten Sie das tun?

Wenn Sie die Protokollierung stoppen möchten, können Sie die Protokollierung programmatisch ausschalten. Der Leistungshit wird minimal sein. (Ich hatte großen Erfolg mit NLog, auch wenn der Querprozess protokolliert wurde.)

Andernfalls müssen Sie es wie oben beschrieben umwickeln.

-Scott