命名空间&阶级冲突

时间:2010-09-17 13:30:37

标签: c# .net namespaces conflict

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

程序集 CompanyDateTime 具有名称空间 Company.DateTime

我的应用程序位于名称空间中:公司

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

可以说 SomeRandomStuff = Company.DateTime 并且 DateTime 始终为 System.DateTime

注意:

  1. 我需要在我的应用程序中引用此程序集,尽管我不使用它,因为我需要的一些程序集实际上使用了这个类。
  2. 我可以使用app.config文件中的条目来识别依赖程序集,但我不能这样做,因为公司策略是针对它的,并且所有引用的程序集都需要在输出文件夹中。
  3. 部署通过构建服务器
  4. 可能的决议? CompanyDateTime 是否可以自动部署到输出文件夹而不在引用中添加它?

4 个答案:

答案 0 :(得分:9)

问题:问题是每次我需要使用DateTime类时,我都要明确地说System.DateTime是他们以任何方式解决这个问题

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

using CompanyDateTime = Company.DateTime;

using StandardDateTime = System.DateTime;

问题:CompanyDateTime是否可以自动部署到输出文件夹而不在引用中添加它?

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

Refer link for postbuild event details

答案 1 :(得分:8)

是的,在代码文件的顶部使用using指令,就像这样引用它。

using SomeRandomStuff = Company.DateTime;

修改:您可能还需要另一个来解决歧义:

using DateTime = System.DateTime;

答案 2 :(得分:4)

为程序集添加别名(默认为global,将其设置为其他内容)。您可以在选择引用时在Visual Studio的属性窗口中进行设置,或者在手动编译时使用编译开关进行设置。除非您在代码文件(extern alias myalias)的顶部指定外部别名,否则编译器将仅解析全局别名中的内容。

请注意,这与其他人提到的命名空间别名不同。有了这个,您应该只需使用DateTime来引用System.DateTime,而不是使用其他名称。如果您稍后需要参考另一个,则需要指定myalias::Company.DateTime...

答案 3 :(得分:2)

使用alias

如果要在不使用System的情况下使用System.DateTime,请尝试:

using SysDate = System.DateTime;

然后,就像你上课一样引用它:

SysDate mySystemDotDateTime = new SysDate();