命名空间和类冲突

6
我遇到了一个问题,DateTime类和某个未知原因也被称为DateTime的命名空间发生冲突。
程序集CompanyDateTime具有命名空间Company.DateTime。
我的应用程序在命名空间Company中。
问题是每次使用DateTime类时,我都必须明确说明System.DateTime,是否有方法可以解决这个问题?
是否可能说SomeRandomStuff = Company.DateTime并且DateTime始终是System.DateTime?
注意:
1.尽管我不使用它,但我需要在我的应用程序中引用此程序集,因为我需要的一些程序集实际上使用了这个类。
2.我可以在app.config文件中使用条目来标识依赖程序集,但由于公司政策的限制,我不能这样做,所有引用的程序集都需要在输出文件夹中。
3.部署经过构建服务器。
可能的解决方案是什么?
是否可能让CompanyDateTime自动部署到输出文件夹而无需添加引用?
4个回答

11

问题: 每次使用DateTime类时,我都必须明确地说出System.DateTime,有没有办法绕过这个问题?

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

using CompanyDateTime = Company.DateTime;

using StandardDateTime = System.DateTime;

问题:是否可能让CompanyDateTime自动部署到输出文件夹而无需添加引用?

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

参考链接以获取后期生成事件详细信息


我使用了您的PostBuild命令将文件复制过来。它有效了,我希望它在构建服务器上仍然有效。谢谢。 - Viv

8
是的,可以在引用它的代码文件顶部使用using指令来实现这一点,如下所示。
using SomeRandomStuff = Company.DateTime;

编辑: 你可能还需要另一个解决歧义的方法:

using DateTime = System.DateTime;

1
它不起作用,我仍然需要使用 System.DateTime 来调用 DateTime 类。 - Viv

4

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

请注意,这与其他人提到的命名空间别名不同。使用此功能,您应该能够直接使用DateTime来引用System.DateTime,而无需使用其他名称。如果您需要稍后引用另一个名称,则需要指定myalias::Company.DateTime...


是的,它对我起作用并且编译正常,但我失去了变量的智能感知。这是我没有使用它的唯一原因。谢谢。 - Viv

2

使用别名

如果你想使用System.DateTime,但不想使用System,则可以尝试以下操作:

using SysDate = System.DateTime;

然后,只需像引用类一样引用它:

SysDate mySystemDotDateTime = new SysDate();


我使用了 postbuild 命令而不是使用别名。那样也可以工作,但我发现另一种解决方案更好。谢谢。 - Viv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接