我在主要的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
答案 0 :(得分:3)
主应用程序需要能够找到Microsoft.Expression.Interactions才能加载模块A,无法绕过它。同时请记住,当您分发应用程序时,适用相同的规则。
如果你真的不想在你的shell项目中引用那个程序集(btw实际上是最简单的方法,因为它将它复制到主应用程序的输出目录,所以你已经确定)唯一的另一个选择是复制它手动。可以使用构建后事件来完成,但通过这样做,您还将两个项目绑定在一起,因为他们需要了解彼此的输出目录。另一种方法是让所有项目将其输出放在同一目录中。我一直在使用它用于一些非常大规模的应用程序,它运行良好。然后,分发应用程序只需复制整个目录。