Отсутствует System.Windows - PullRequest
       1

Отсутствует System.Windows

1 голос
/ 05 января 2011

У меня довольно большое решение с некоторыми проектами Silverlight и WPF, а также с некоторыми библиотеками классов и другими вещами.

Один из проектов - это библиотека классов, которая ссылается на приложение SilverLight, которое ссылается на System.Windows

Но во время выполнения я получаю ошибку:

{"Could not load file or assembly 'System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' or one of its dependencies. The system cannot find the file specified.":"System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e"}

Я посмотрел в GAC (C:\Windows\assembly) и не смог увидеть его там ...

Что здесь происходит?

Ссылка на: c:\Program Files\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\System.Windows.dll который существует.

Ответы [ 4 ]

3 голосов
/ 05 января 2011

Похоже, ваше приложение WPF загружает библиотеку классов, которая ссылается на сборку Silverlight.Это не может работать, кошки и собаки.Если на сборку ссылаются как приложение WPF, так и приложение Silverlight, то она должна быть скомпилирована дважды с разными ссылками на сборку каркаса.Это занимает два проекта.Разделение WPF и Silverlight в разных решениях - лучший способ избежать неприятностей.

1 голос
/ 05 апреля 2012

Я не нашел такого решения нигде, но наткнулся на него как на метод проб и ошибок при пожаре ...

Сообщение об ошибке немного вводило меня в заблуждение. Подсказка заключалась в том, что это была не сама сборка «System.Windows», а одна из зависимых сборок .

Что вы можете сделать, это проверить ваш GAC и посмотреть, есть ли в нем одна из следующих сборок:

  • System.Windows
  • System.Windows.Controls
  • System.Windows.Controls.Toolkit
  • System.Windows.Controls.Layout.Toolkit

Попробуйте удалить их только из GAC, а затем выполните восстановление. Если это не работает, просто откройте два окна проводника и скопируйте их обратно в папку c: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework \ Silverlight \ v4.0 \ System.Windows.dll или в папку папку для вашего набора инструментов Silverlight, и вы вернетесь туда, откуда начали.

Вот что я подозреваю: Компилятор Visual Studio 2010 запутывается в том, где взять эти ссылочные сборки при выполнении сборки, потому что сборки GAC всегда имеют приоритет над другой копией сборки (даже папкой ссылочной сборки, которую использует VS2010). Поэтому, несмотря на то, что сборка технически правильна с тем же ключом ID, и все, что есть в компиляторе VS2010, который не может определить, какую библиотеку использовать для сборки, и он откажется завершить сборку.

1 голос
/ 05 января 2011

Я видел похожие ошибки в двух случаях, которые могут применяться здесь:

  1. Когда сборка, на которую я ссылаюсь, требовала сборки, на которую я не ссылался. , , в этом случае это будет означать, что System.Windows использует что-то еще, вам тоже нужно добавить ссылку.

  2. Более интересный случай, когда VS2010 автоматически выбрал «.Net Framework 4 Client Profile» для меня, когда мне действительно понадобился «.Net Framework 4» (без «client profile»). Выберите свойства проекта и посмотрите, какие у вас настройки.

Frank

За ваш запрос дополнительных инструкций:

Откройте Solution в VS2010, щелкните правой кнопкой мыши по рассматриваемому проекту (не по строке решения) и выберите «свойства» снизу. В появившемся графическом интерфейсе выберите вкладку «Приложение» и убедитесь, что в «Target Framework» нет имени клиента. , , это должно быть ".NET Framework 4", а не ".NET Framework 4 Client Profile".

0 голосов
/ 03 июня 2013

мммм иногда вы помещаете свои классы в другой проект, например, вы можете создать проект для моделей представления, если это так, то вам нужно обратиться к PresentationCore.dll, это dll, которая дает вам доступ к System.windows, чтобы вы моглиможет использовать ICommand для привязки команд

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...