2010-09-17 115 views
6

我遇到了DateTime类与名称空间之间因某种未知原因而发生冲突的问题,也称为DateTime。命名空间与类冲突

大会CompanyDateTime具有命名空间Company.DateTime

我的应用程序是在命名空间:公司

的问题是,每次我需要使用日期时间类,我不得不明确地说System.DateTime是他们解决这个问题的方法吗?

是可以说SomeRandomStuff = Company.DateTime,并有日期时间总是的System.DateTime

注:

  1. 我需要在我的应用程序eventhough引用大会我不使用它,因为我需要的一些Assembly实际上使用了这个类。
  2. 我可以使用app.config文件中的条目来标识依赖程序集,但是我无法做到这一点,因为公司策略违反了它,并且所有引用的程序集都需要位于输出文件夹中。
  3. 部署经过一个构建服务器

可能的解决? CompanyDateTime是否可能自动部署到输出文件夹而不将其添加到参考文件中?

回答

9

问题:的问题是,每次我需要使用DateTime类,我要明确地说System.DateTime的是他们的任何方式避过此

答案:上面已经回答了 - 使用别名如

using CompanyDateTime = Company.DateTime;

using StandardDateTime = System.DateTime;

问题: CompanyDateTime可能会自动部署到输出文件夹,而不会将其添加到参考中?

答案:把这个DLL放在应用程序根文件夹中,并创建一个postbuild事件,将其复制到输出文件夹。您可以在这里使用常规的DOS COPY命令。

Refer link for postbuild event details

+0

我用你的postbuild命令来复制文件。它工作,我希望它仍然在构建服务器上工作。谢谢 – Viv 2010-09-17 14:00:35

8

是的,在你的代码文件的顶部使用using指令来引用它。

using SomeRandomStuff = Company.DateTime; 

编辑:您可能还需要另外一个解决歧义:

using DateTime = System.DateTime; 
+1

它不起作用,我仍然需要说System.DateTime使用DateTime类。 – Viv 2010-09-17 13:37:31

+0

尝试添加另一个,如编辑中所述。 – 2010-09-17 13:41:54

+0

它仍然不起作用。 – Viv 2010-09-17 13:59:30

2

使用alias

如果你想使用的System.DateTime,而无需使用系统,然后尝试:

using SysDate = System.DateTime;

然后,就引用它就像您的类:

SysDate mySystemDotDateTime = new SysDate();

+0

我使用了postbuild命令而不是使用别名。它会工作,但我发现其他解决方案更好。谢谢。 – Viv 2010-09-17 14:04:31

4

给组件一个别名(默认为global,将你的设置为别的)。您可以在Visual Studio的属性窗口中选择引用时进行设置,或者在手动编译时使用编译开关。编译器只会解析全局别名中的内容,除非您在代码文件顶部指定了外部别名(extern alias myalias)。

请注意,这与其他人提到的命名空间别名不同。有了这个,你应该可以简单地使用DateTime来引用System.DateTime,而不是使用其他名称。如果以后需要引用另外一个,你需要指定myalias::Company.DateTime...

+0

是的它确实为我工作和编译正确,但我失去了变量的Intellsence。这是我没有使用它的唯一原因。谢谢。 – Viv 2010-09-17 14:07:35