我遇到了这个我无法理解的错误。
我在Windows 8上使用VS 2012(VS11)和.net4.5,在编译适用于VS 2010和.net4.0的项目时出现此错误。
这是完整的错误:
类型
System.Windows.Input.ICommand
同时存在于'c:\ Program中 文件(x86)\参考 大会\微软\ Framework.NETFramework \ V4.0 \ PresentationCore.dll中” 和'c:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ System.dll'
如果有人能够提供一些有关它的原因和/或如何修复它的信息,我将不胜感激。
感谢。
答案 0 :(得分:7)
C:\的Windows \ Microsoft.NET \框架\ v4.0.30319 \ System.dll中
消息是准确的,ICommand确实存在于.NET 4.5的两个程序集中。问题是您对System.dll的引用,您的项目使用了错误的。 Microsoft.NET目录中的程序集不再适合作为引用程序集,就像它们在.NET 4.0之前的.NET版本中一样。它们应该不再存在,但遗憾的是需要构建C ++ / CLI项目。
您对PresentationCore.dll的引用是正确的,它使用c:\ program files \ reference assembly子目录。 .NET 4.0及更高版本中适用于参考程序集的主页。这些程序集是特殊,它们只包含元数据,而不是运行时程序集的副本。
您需要修复项目。 System.dll可能不是唯一有此问题的程序集。打开项目的“引用”节点并逐个验证它们。删除指向Microsoft.NET的坏文件,并使用Project + Add Reference替换好文件。最好只更换它们以确保。
答案 1 :(得分:2)
我遇到了与fxcopcmd V12类似的问题。 我能够通过明确添加
来解决它/reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\WindowsBase.dll"
答案 2 :(得分:0)
看一下这个类似的帖子How can I resolve this? The unit type exists in two dll files,它建议您引用两个具有相同类型的程序集,因此您需要提供要使用完全量化名称的类型。
答案 3 :(得分:0)
迁移到新的构建服务器后,我们的库遇到了同样的问题。
解决方案是指定要构建的.net框架的路径:
/p:FrameworkPathOverride="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0"
如果构建服务器上没有安装.net 4.0框架(多目标包)(就像我们一样),您只需复制" v4.0"包含其所有程序集到构建服务器的文件夹;)