2010-09-17 12 views
6

Ich habe ein Problem mit einem Konflikt zwischen der DateTime-Klasse und einem Namespace aus einem unbekannten Grund wurde auch DateTime genannt.Namespace & Klassenkonflikt

Assembly CompanyDateTime hat Namespace Company.DateTime

Meine Anwendung ist im Namensraum: Firma

das Problem ist, dass jedes Mal wenn ich Datetime Klasse verwenden müssen, muss ich explizit sagen System.DateTime ist ihre Art und Weise um dies zu umgehen?

Ist möglich SomeRandomStuff = Company.DateTime zu sagen und haben Datetime immer System.DateTime sein

Hinweis:

  1. ich diese Versammlung in meiner Anwendung eventhough verweisen müssen Ich benutze es nicht, weil eine Assembly, die ich brauche, diese Klasse benutzt.
  2. Ich kann einen Eintrag in der app.config-Datei verwenden, um eine abhängige Assembly zu identifizieren, aber ich kann das nicht tun, da die Firmenrichtlinie dagegen ist und alle referenzierten Assembly im Ausgabeordner sein müssen.
  3. Deployment geht durch einen Build-Server

Mögliche Lösung? Ist es möglich, dass CompanyDateTime automatisch im Ausgabeordner bereitgestellt wird, ohne es in der Referenz hinzuzufügen?

Antwort

9

Frage: das Problem ist, dass jedes Mal wenn ich brauche Datetime-Klasse zu verwenden, muss ich ausdrücklich sagen System.DateTime ist ihr eine Möglichkeit, um dieses

Antwort zu bekommen: Bereits oben beantwortet - verwenden Sie ein Alias ​​zB

using CompanyDateTime = Company.DateTime;

using StandardDateTime = System.DateTime;

Frage: Ist es möglich, dass CompanyDateTime automatisch im Ausgabeordner bereitgestellt wird, ohne es in der Referenz hinzuzufügen?

Antwort: Legen Sie diese DLL in den Stammordner der Anwendung und erstellen Sie ein Postbuild-Ereignis, das dies in den Ausgabeordner kopiert. Sie können den regulären DOS-COPY-Befehl hier verwenden.

Refer link for postbuild event details

+0

Ich habe den Befehl postbuild verwendet, um die Datei zu kopieren. Es hat funktioniert und ich hoffe, dass es immer noch auf dem Build-Server funktioniert. Vielen Dank – Viv

8

Ja, verwenden Sie eine using-Anweisung oben in Ihren Code-Dateien, die darauf verweisen.

using SomeRandomStuff = Company.DateTime; 

bearbeiten: Sie auch eine andere müssen möglicherweise die Mehrdeutigkeit aufzulösen:

using DateTime = System.DateTime; 
+1

Es funktioniert nicht, ich brauche noch System.DateTime zu sagen, die Datetime-Klasse zu verwenden. – Viv

+0

Versuchen Sie, wie in der Bearbeitung beschrieben, einen weiteren hinzuzufügen. –

+0

Es funktioniert immer noch nicht. – Viv

2

Verwenden Sie ein alias.

Wenn Sie System.DateTime verwenden, ohne die Verwendung-System wollen, dann versuchen:

using SysDate = System.DateTime;

Dann, es wie Sie verweisen würde eine Klasse:

SysDate mySystemDotDateTime = new SysDate();

+0

Ich habe den postbuild-Befehl anstelle eines Alias ​​verwendet. Es hätte funktioniert, aber ich fand die andere Lösung besser. Vielen Dank. – Viv

4

Geben Sie der Assembly einen Aliasnamen (der Standardwert ist global, legen Sie etwas anderes fest). Sie können dies im Eigenschaftsfenster von Visual Studio festlegen, wenn Sie eine Referenz auswählen, oder beim manuellen Kompilieren einen Kompilierungsschalter verwenden. Der Compiler löst nur Dinge im globalen Alias ​​auf, es sei denn, Sie geben oben in der Codedatei einen externen Alias ​​an (extern alias myalias).

Hinweis: Dies unterscheidet sich von dem von anderen genannten Namespace-Alias. Damit können Sie einfach DateTime verwenden, um auf System.DateTime zu verweisen, anstatt einen anderen Namen zu verwenden. Wenn Sie auf die andere verweisen müssen später, dann würden Sie angeben müssen myalias::Company.DateTime...

+0

Ja Es hat für mich funktioniert und ordnungsgemäß kompiliert, aber ich verlor die Intellsence für die Variable. Das ist der einzige Grund, warum ich es nicht benutzt habe. Vielen Dank. – Viv

Verwandte Themen