Тип «System.Windows.Input.ICommand» существует в «PresentationCore.dll» и «System.dll».

у меня есть эта ошибка, которую я просто могуя не понимаю

Я использую VS 2012 (VS11) в Windows 8 с .net4.5, и я получаю эту ошибку при компиляции проекта, который работал с VS 2010 и .net4.0.

Это полная ошибка:

ТипSystem.Windows.Input.ICommand существует в обоихc: \ Program Files (x86) \ Справочные сборки \ Microsoft \ Framework.NETFramework \ v4.0 \ PresentationCore.dll ' а также 'C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ System.dll»

Если кто-нибудь может дать некоторое представление о том, что вызывает это и / или как это исправить, я 'буду благодарен.

Благодарю.

 Jeremy Rodgers27 мая 2013 г., 14:49
Тот'У меня это есть. Спасибо большое. (У меня был проект, нацеленный на .net 4.0, но это должен был быть .net 4.5)
 user74338227 мая 2013 г., 14:40
Справочные сборки для .NET 4.5 находятся в каталоге c: \ Program Files (x86) \ Справочные сборки \ Microsoft \ Framework \ .NETFramework \ v4.5, а не v4.0. Содержит ли ваша программа явную ссылку на путь ссылки сборки? (На самом деле я'я не уверен из вашего вопроса, если выВы пытаетесь построить свой проект для .NET 4.0 или для 4.5. В первом случае проблема будет в том, что выне используя справочную сборку для System.dll, а скорее системную сборку.)

Ответы на вопрос(4)

Как я могу решить это? Тип устройства существует в двух файлах DLLОн предполагает, что вы ссылаетесь на две сборки одного типа, поэтому вам нужно будет указать тип, который вы хотите использовать полностью определенное имя.

 user74338227 мая 2013 г., 14:39
Тот'Обходной путь, а не исправление. В этом случае тип не долженбыть определенным в двух разных сборках.

явно добавив

/reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\WindowsBase.dll"

Увидеть:Исключение движка FxCop при сборке WPF

овый сервер сборки.

Решение состояло в том, чтобы указать путь .net Framework для сборки:

/p:FrameworkPathOverride="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0"

Если .net 4.0 Framework (Multi-Targeting Pack) не установлен на сервере сборки (как это было у нас), вы можете просто скопировать "v4.0" папка со всеми ее сборками на сервере сборки;)

Решение Вопроса

Сообщение верно, ICommand действительно существует в обеих сборках для .NET 4.5. Проблема в вашей ссылке на System.dll, ваш проект использует неправильный. Сборки в каталоге Microsoft.NET больше не подходят для использования в качестве справочных сборок, как это было в версиях .NET до .NET 4.0. Их больше не должно быть, но, к сожалению, они нужны для сборки проектов C ++ / CLI.

Ваша ссылка на PresentationCore.dll правильная, она использует подкаталог c: \ program files \ reference assembly. Надлежащий дом для справочных сборок в .NET 4.0 и выше. Эти сборкиспециальныйони содержат только метаданные и не являются копиями сборок во время выполнения.

Вы'Вам нужно будет исправить ваш проект. System.dll, вероятно, не единственная сборка, которая имеет эту проблему. Откройте узел References вашего проекта и проверьте их один за другим. Удалите плохие, которые указывают на Microsoft.NET, и замените их хорошими, используя Project + Add Reference. Лучше просто заменить их все, чтобы быть уверенным.

 Jeremy Rodgers28 мая 2013 г., 11:00
Спасибо за дополнительную информацию по этому вопросу. Я запустил проект, переключив цель на 4.5.Я не слишком обеспокоен тем, под какой структурой он работает, нохорошо знать, что я все еще могу настроить его на .NET 4.0 на Windows 8. (я неЯ не совсем понимаю смысл Справочных Ассамблей, но ваш ответstackoverflow.com/questions/9701135/... было полезно)
 Jeppe Stig Nielsen19 окт. 2013 г., 11:43
Этот ответ все правильно. Если мы посмотрим на документацию для этого типа, мы можем подтвердить, чтов .NET 4.0 этот тип был в сборкеPresentationCore.dll, в то время какв .NET 4.5 оно было перенесено на сборку.System.dll
 YKa10 апр. 2014 г., 01:51
У меня была та же ошибка, но проблема в моем случае была в том, что файл PresentationCore.dll был ... / v3.0, который нужно было изменить. Очень хороший ответ

Ваш ответ на вопрос