PRISM:引用Module所依赖的主项目中的DLL

时间:2013-09-06 08:40:28

标签: c# wpf prism expression-blend

我在主要的Project PrismDashboard中得到了这个例外:

  

来源\ PrismDashboard \ BIN \调试\ PrismDashboard.vshost.exe   发生了System.Windows.Markup.XamlParseException   的HResult = -2146233087   Message =无法加载文件或程序集“Microsoft.Expression.Interactions,PublicKeyToken = 31bf3856ad364e35”或其依赖项之一。系统找不到指定的文件。

这是使用Bootrstrapper和Shell的项目。它正在发生,因为Shell正在使用另一个项目的ModuleA:

  

来源\模块\ ModuleA

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

  

来源\模块\ ModuleA \ BIN \调试

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

我不想在我的主项目中添加对其他项目所需的DLL的引用。 尝试在ModulaA中引用Embaded Interop Types,但收到错误:

  

错误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

1 个答案:

答案 0 :(得分:3)

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

如果你真的不想在你的shell项目中引用那个程序集(btw实际上是最简单的方法,因为它将它复制到主应用程序的输出目录,所以你已经确定)唯一的另一个选择是复制它手动。可以使用构建后事件来完成,但通过这样做,您还将两个项目绑定在一起,因为他们需要了解彼此的输出目录。另一种方法是让所有项目将其输出放在同一目录中。我一直在使用它用于一些非常大规模的应用程序,它运行良好。然后,分发应用程序只需复制整个目录。