PRISM:在模块所依赖的主项目中引用DLL

本文关键字:项目 引用 DLL 依赖 模块 PRISM | 更新日期: 2023-09-27 18:30:33

我在主项目棱镜仪表板中遇到此异常:

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

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

源''模块

''模块A

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

源''模块''

模块A''bin''调试

我没有收到编译错误,并且出现运行时错误。ModuleA 视图将被注入到 Shell 区域中,此视图需要 Microsoft.Expression.Interaction,该交互在 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

PRISM:在模块所依赖的主项目中引用DLL

主应用程序需要能够找到 Microsoft.Expression.Interactions 才能加载模块 A,没有办法绕过它。另请记住,在分发应用程序时,将应用相同的规则。

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