Visual Studio 2010 Designer не может найти сборку - PullRequest
3 голосов
/ 01 марта 2011

Я получаю следующую ошибку в конструкторе VS2010:

System.Reflection.Adds.UnresolvedAssemblyException Тип юниверса не может разрешить сборку: Microsoft.Expression.Interactions, версия = 4.0.5.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35.

Это проект Silverlight, и на отсутствующую сборку ссылается проект. Проект компилируется и работает нормально.

Я посмотрел с помощью fuslogvw и не могу найти это сообщение об ошибке.

Нужно ли копировать dll где-нибудь, где Дизайнер сможет найти его?

Ответы [ 3 ]

1 голос
/ 24 июня 2011

Если вы используете заархивированные .dll, загруженные из Интернета под Vista или Win7, ОС , блокирующая функцию , может вызвать эту проблему.На прошлой неделе я написал сообщение в блоге о том, как разблокировать файл перед разархивированием.Я знаю, что это решило очень похожую проблему, с которой я столкнулся при работе с Ninject.

1 голос
/ 09 марта 2011

Эта сборка является частью Blend SDK.Вы можете бесплатно установить его здесь: Комплект разработчика программного обеспечения Microsoft Expression Blend (SDK) для .NET 4 .

0 голосов
/ 25 июня 2011

Я также столкнулся с этой проблемой и, наконец, решил ее необычным, но успешным способом.

Мы используем Blend SDK System.Windows.Interactivity и Microsoft.Expressions.Interactions.

Все работает нормально, если толькоконструктор аварийно завершает работу при использовании унаследованного DataTrigger с тем же исключением.Это не было бы беспорядком, но исключение также нарушает IntelliSense во всем документе XAML, что недопустимо.

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

См .: http://connect.microsoft.com/VisualStudio/feedback/details/648819/visual-studio-2010-silverlight-designer-crash

Просто получите версии SharpDevelops ILSpy и откройте две сборки в нем.Выберите сборку из списка и перейдите в Файл -> Сохранить.Это позволит разобрать целые проекты.Объедините их в пустом решении и измените имена сборок.Перестройте ссылку из библиотеки Expression.Interactions на новую разобранную версию.

В AssemblyInfo.cs вы можете выполнить хитрость.

В Microsoft.Expression.Interactions:

[assembly: XmlnsPrefix("http://yourdomain.com/interactions", "i")]
[assembly: XmlnsDefinition("http://yourdomain.com/interactions", "Microsoft.Expression.Interactivity.Core")]
[assembly: XmlnsDefinition("http://yourdomain.com/interactions", "Microsoft.Expression.Interactivity.Input")]
[assembly: XmlnsDefinition("http://yourdomain.com/interactions", "Microsoft.Expression.Interactivity.Layout")]
[assembly: XmlnsDefinition("http://yourdomain.com/interactions", "Microsoft.Expression.Interactivity.Media")]

in System.Windows.Interactivity:

[assembly: XmlnsPrefix("http://yourdomain.com/interactions", "i")]
[assembly: XmlnsDefinition("http://yourdomain.com/interactions", "System.Windows.Interactivity")]

Теперь поместите ссылку на новые проекты в вашей сборке или создайте сборки и скопируйте их версию в папку библиотек и напрямую ссылайтесь на встроенные версии.

В XAML добавьте новое пространство имен к вашему корневому элементу, например страницу / окно:

<RootElement xmlns:i="http://yourdomain.com/interactions">
    <!-- your xaml code -->
    <i:Interaction.Triggers> ... </i:Interaction.Triggers>
</RootElement>

Это работает как шарм.Вы можете использовать функции взаимодействия и выражения, объединенные в один xmlns, и, конечно, исключение дизайнера пропало, и IntelliSense больше не сломается.

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