2

我在主项目 PrismDashboard 中遇到了这个异常:

Source\PrismDashboard\bin\Debug\PrismDashboard.vshost.exe System.Windows.Markup.XamlParseException 发生 HResult=-2146233087 消息=无法加载文件或程序集“Microsoft.Expression.Interactions,PublicKeyToken=31bf3856ad364e35”或其依赖项之一。该系统找不到指定的文件。

这是带有 Bootrstrapper 和 Shell 的项目。发生这种情况是因为 Shell 正在使用另一个项目中的 ModuleA:

源\模块\模块A

这需要参考Microsoft.Expression.Interactions,我可以看到这个 DLL 存在于:

源\Modules\ModuleA\bin\Debug

我没有收到编译错误,我收到了运行时错误。ModuleA 视图将被注入到 Shell 区域,并且此视图需要 Microsoft.Expression.Interactions,它在 ModuleA 项目中被引用,但在具有 Bootstrapper 和 Shell 的主项目中没有。

我不想在我的主项目中添加对其他项目所需的 DLL 的引用。尝试在 ModulaA 中设置嵌入互操作类型,但出现错误:

错误 1 ​​无法嵌入程序集“c:\Program Files (x86)\Microsoft SDKs\Expression\Blend.NETFramework\v4.0\Libraries\Microsoft.Expression.Interactions.dll”中的互操作类型,因为它缺少“ImportedFromTypeLibAttribute”属性或“PrimaryInteropAssemblyAttribute”属性 c:\Program Files (x86)\Microsoft SDKs\Expression\Blend.NETFramework\v4.0\Libraries\Microsoft.Expression.Interactions.dll ModuleA 错误 2 无法嵌入程序集 'c: 中的互操作类型: \Program Files (x86)\Microsoft SDKs\Expression\Blend.NETFramework\v4.0\Libraries\Microsoft.Expression.Interactions.dll' 因为它缺少 'GuidAttribute' 属性 c:\Program Files (x86)\Microsoft SDKs \Expression\Blend.NETFramework\v4.0\Libraries\Microsoft.Expression.Interactions.dll ModuleA

4

1 回答 1

3

主应用程序需要能够找到 Microsoft.Expression.Interactions 才能加载模块 A,无法绕过它。还请记住,当您分发应用程序时,同样的规则也适用。

如果您真的不想在您的 shell 项目中引用该程序集(顺便说一句,这实际上是最简单的方法,因为它会将其复制到主应用程序的输出目录,所以您已经解决了)唯一的其他选择是手动复制它。可以使用构建后事件来完成,但是通过这样做,您还将两个项目捆绑在一起,因为它们需要了解彼此的输出目录。另一种方法是让所有项目将它们的输出放在同一个目录中。我一直在将它用于一些相当大规模的应用程序,并且效果很好。分发应用程序也只是复制整个目录的问题。

于 2013-09-06T09:03:54.133 回答