2013-09-06 1 views
2

Я получаю это исключение в главном PrismDashboard проекта:PRISM: ссылки на библиотеки DLL в главном проекте, что модуль зависит от

Source\PrismDashboard\bin\Debug\PrismDashboard.vshost.exe System.Windows.Markup.XamlParseException occurred HResult=-2146233087 Message=Could not load file or assembly 'Microsoft.Expression.Interactions, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.

Это проект с Bootrstrapper и Shell. Это происходит потому, что Shell использует ModuleA из другого проекта:

Source\Modules\ModuleA

Это требует refrence к Microsoft.Expression.Interactions и я могу видеть, что эта DLL существует в:

Source\Modules\ModuleA\bin\Debug

Я не получаю ошибку компиляции, и Я получаю ошибку времени выполнения. ModuleA View будет введен в область оболочки, и для этого представления требуется Microsoft.Expression.Interactions, на который ссылается проект ModuleA, но не в основном проекте с Bootstrapper и Shell.

Я не хочу добавлять ссылку на DLL, требуемую другими проектами в моем основном проекте. Пытались установить типы Embaded Interop по ссылке в ModulaA, но получаю ошибку:

Error 1 Cannot embed interop types from assembly 'c:\Program Files (x86)\Microsoft SDKs\Expression\Blend.NETFramework\v4.0\Libraries\Microsoft.Expression.Interactions.dll' because it is missing either the 'ImportedFromTypeLibAttribute' attribute or the 'PrimaryInteropAssemblyAttribute' attribute c:\Program Files (x86)\Microsoft SDKs\Expression\Blend.NETFramework\v4.0\Libraries\Microsoft.Expression.Interactions.dll ModuleA Error 2 Cannot embed interop types from assembly 'c:\Program Files (x86)\Microsoft SDKs\Expression\Blend.NETFramework\v4.0\Libraries\Microsoft.Expression.Interactions.dll' because it is missing the 'GuidAttribute' attribute c:\Program Files (x86)\Microsoft SDKs\Expression\Blend.NETFramework\v4.0\Libraries\Microsoft.Expression.Interactions.dll ModuleA

ответ

3

Основное приложение должно быть в состоянии найти Microsoft.Expression.Interactions для того, чтобы загрузить модуль A, никоим образом вокруг него. Также имейте в виду, что при распространении вашего приложения применяется одно и то же правило.

Если вы действительно не хотите ссылаться на эту сборку в своем проекте оболочки (что, кстати, это самый простой способ, так как он скопирует его в выходной файл основного приложения, чтобы вы были улажены), единственным вариантом является копирование это там вручную. Может быть сделано с помощью события post-build, но, делая это, вы также связываете оба проекта вместе, поскольку они должны знать о выходной директории друг друга. Другим способом является то, что все проекты помещают свой вывод в один и тот же каталог. Я использовал это для некоторых довольно крупных приложений, и он работает хорошо. Кроме того, распространение приложения - это просто копирование всего каталога.

+0

Я надеялся, что есть плагин или настройка, которая позаботится об этом. Предложение о настройке вывода - это тот, который пришел мне на ум, но ожидал чего-то еще. Это может быть действительно опасно, чтобы не получить ошибку времени компиляции, а вместо этого запустить временную ошибку. – user007

Смежные вопросы