如何在ASP.NET 5中修复CS0433错误?

4

这段代码中出现了错误,错误的原因是涉及到类型 System.Collections.Generic.Dictionary 的引用,无论是作为变量类型还是在Using声明中。

这个Using声明之前能够正常工作,并且简化了我的类,避免了在100个地方写上 System.Collections.Generic.Dictionary<string, object>。不加Using声明解决不了问题,只会把问题转移至使用字典类型的方法参数处。

完整的错误文本:

CS0433  The type 'Dictionary<TKey, TValue>' exists in both
'System.Collections, Version=4.0.10.0, Culture=neutral,
  PublicKeyToken=b03f5f7f11d50a3a' 
 and 
'mscorlib, Version=4.0.0.0, Culture=neutral, 
 PublicKeyToken=b77a5c561934e089'   ProjectName.DNX 

这个错误发生在使用 DNX 1.0.0-beta7 的基于 ASP.NET 5 MVC 6 模板的项目中,这些项目包含一些引用了泛型集合类型的 Model 和 Controller 类。项目的 project.json 设置如下:
  "frameworks": {
    "dnx451": { }
  }

如果您只是让它说:“The sample problem occurs”,那么就会出现样例问题。
  "frameworks": {
    "dotnet": { }
  }
  • 导致这个问题的代码行是一个Using声明,它类似于类型别名,此前一直正常工作,但当我尝试将beta6项目转换为beta7时就出现了问题。

  • 转换进行到添加这些使用JsonDictionary别名时,编译就会中断。

我已经搜索了这个错误代码,它在ASP.NET中有着漫长而不光彩的历史。

这个问题是由什么引起的?我该如何解决它,因为我不能从我的项目中删除mscorlib,也不能删除System.Collections?


为什么你不能移除对 System.Collections.dll 的引用? - Dai
2个回答

2
在beta6中,当你创建一个类库项目时,它会以“dotnet”方式设置框架部分,就像你发布的那样。但是如果你在beta7中创建一个新的类库项目,它将设置为以下方式:
"frameworks": {
    "dnx451": { },
    "dnxcore50": {
      "dependencies": {
        "Microsoft.CSharp": "4.0.1-beta-23225",
        "System.Collections": "4.0.11-beta-23225",
        "System.Linq": "4.0.1-beta-23225",
        "System.Runtime": "4.0.21-beta-23225",
        "System.Threading": "4.0.11-beta-23225"
      }
    }
  }

我相信如果您根据项目的json文件进行更新,就可以解决这个问题。

我的主要asp.net项目和一个依赖于它的类库配置不一致,需要修复它们各自的project.json文件。令人惊讶的是,依赖子程序集中的错误值破坏了主程序集的编译。我本来以为在依赖程序集中出现问题会破坏它的编译,但事实并非如此。 - Warren P

1
您需要将其指定为框架依赖项。
"frameworks": {
     "dnx451": {
      "frameworkAssemblies": {
         "System.Collections":  ""
       }
     }
}

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