错误“CS0104:‘DataType’是‘System.ComponentModel.DataAnnotations.DataType’和‘CarlosAg.ExcelXmlWriter.DataType’之间的不明确引用

问题描述 投票:0回答:3

我收到此错误:

“CS0104:‘DataType’是一个不明确的引用 'System.ComponentModel.DataAnnotations.DataType' 和 'CarlosAg.ExcelXmlWriter.DataType'"

运行 ASP.NET 4.0 应用程序时。有人可以帮我解决这个问题吗?

c# asp.net
3个回答
12
投票

编译器错误 CS0104 的文档中所述,您遇到了符号冲突 - 源文件范围内有两个类,它们都称为

DataType
- 一个位于 命名空间
System.ComponentModel.DataAnnotations
和other 位于命名空间中
CarlosAg.ExcelXmlWriter.DataType'

您需要执行以下操作之一来解决此问题:

1. 在每次使用时显式提供完整的命名空间前缀,即

System.ComponentModel.DataAnnotations.DataType
CarlosAg.ExcelXmlWriter.DataType

var cdt = new CarlosAg.ExcelXmlWriter.DataType();
var sdt = new System.ComponentModel.DataAnnotations.DataType();

OR 2. 或者使用 using 指令为命名空间/类型起别名,例如

using SystemDT = System.ComponentModel.DataAnnotations;
using Carlos = CarlosAg.ExcelXmlWriter;

然后用命名空间别名识别类型,例如..

var dt = new Carlos.DataType();

OR 3. 您还可以在班级级别使用别名:

using SystemDataType = System.ComponentModel.DataAnnotations.DataType;
using CarlosDataType = CarlosAg.ExcelXmlWriter.DataType;
...
var myObj = new CarlosDataType();

OR 4. 如果您不需要两个命名空间中的符号,则从

using
子句中删除未使用的命名空间。

我更喜欢选项 2 - 它让读者更清楚地知道存在命名空间冲突,但又不会太冗长(就像选项 1 那样)

编辑

回复:“我尝试提供完整的前缀,但仍然收到错误”CS0138:A using namespace 指令只能应用于命名空间; 'CarlosAg.ExcelXmlWriter.DataType' 是类型而不是命名空间”

(所有内容均与上述第 2 点相关)。错误消息指的是这样的情况,这在 .Net 中是不允许的(但在 Java 导入中是允许的)

// i.e. This won't work, can't import at a class level unless it is aliased
using System.ComponentModel.DataAnnotations.DataType; 

根据我的回答,我建议您为命名空间添加别名,然后使用别名前缀来消除 2

DataType
s

之间的歧义

1
投票

我也有同样的问题。我使用的解决方案是删除所有使用并重新进行引用。效果很好。


0
投票

您可以在上面提供名称空间 此示例适用于: 1 在此之前:services.AddScoped();

  1. 之后: services.AddScoped();
© www.soinside.com 2019 - 2024. All rights reserved.