我收到此错误:
“CS0104:‘DataType’是一个不明确的引用 'System.ComponentModel.DataAnnotations.DataType' 和 'CarlosAg.ExcelXmlWriter.DataType'"
运行 ASP.NET 4.0 应用程序时。有人可以帮我解决这个问题吗?
如编译器错误 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 在此之前:services.AddScoped