在另一个程序集中查找合并资源字典时出错

时间:2011-06-07 17:07:27

标签: wpf xaml resourcedictionary

我真的在这里撞墙。首先,一些背景。该应用程序是使用WPF的PRISM 4 / MVVM应用程序,我的解决方案结构如下:

MyCompany.MyProduct (MyCompany.MyProduct.exe)
+-- Shell.xaml
       Shell.xaml.cs
    app.config
    (etc)
MyCompany.MyProduct.Infrastructure (MyCompany.MyProduct.Infrastructure.dll)
+-- Resources
|   +-- MyApplicationStyles.xaml
|       SuperCoolImage.png
|       (etc)
+-- BaseClasses
    +-- ViewModelBase.cs
        (etc)
MyCompany.MyProduct.Modules.ModuleA (MyCompany.MyProduct.Modules.ModuleA.dll)
+-- ViewModels
|   +-- StuffViewModel.cs
|       (etc)
+-- Views
+-- StuffView.xaml
       StuffView.xaml.cs
    (etc)

项目参考:

  • MyCompany.MyProduct参考 MyCompany.MyProduct.Infrastructure
  • MyCompany.MyProduct.Modules.ModuleA 引用 MyCompany.MyProduct.Infrastructure

现在,在Shell.xaml和StuffView.xaml中,我都包含一个合并的字典:

<ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary
            Source="pack://application:,,,/MyCompany.MyProduct.Infrastructure;component/Resources/MyApplicationStyles.xaml"/>
        </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

然而,在这两种情况下,我都是先遇到以下错误:

Could not load file or assembly 'MyCompany.MyProduct.Infrastructure, Culture=neutral' or one of its dependencies. The system cannot find the file specified.

(叹气)我还注意到xaml编辑器在这一行显示了两个错误的错误:

<ResourceDictionary Source="pack://application:,,,/MyCompany.MyProduct.Infrastructure;component/Resources/MyApplicationStyles.xaml"/>

第一个波浪形的错误是......

An error occurred while finding the resource dictionary "pack://application:,,,/MyCompany.MyProduct.Infrastrucuture;component/Resources/MyApplicationStyles.xaml".

第二个(一个更好奇的)波浪错误是......

"Assembly name expected instead of project name."

所以这就是我尝试过的:

  • 我已经三次检查项目引用是否存在(我已删除并重新添加它们)
  • 我已检查MyCompany.MyProduct.Infrastructure是否已成功构建
  • 我已经仔细检查过程序集是否正确(通过AssemblyInfo.cs)
  • 我一次又一次地在MyApplicationStyles.xaml上更改了Build Action(它当前设置为“Page”)
  • 我手动清理了解决方案并重建了
  • 我重新启动了Visual Studio几次
  • 我牺牲了一只山羊(没关系......他是一只非常不友好的山羊)

我没有想法,搜索的内容很少。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

确保编译引用的程序集以针对相同版本的.Net框架。

答案 1 :(得分:0)

我遇到了同样的事情。一个项目的包uri运行良好,而在同一解决方案中的另一个项目中使用的相同uri失败。尼斯!

我使用它的方法是将有问题的资源作为来自包uri中指定的目标程序集的链接文件添加到故障项目的根目录中。将链接文件添加到项目后,包 的包发布消失了。

步骤(VS2012)  1.右键单击项目,然后选择“添加”。然后选择“添加现有”。  2.浏览其他项目中的资源文件。  3.突出显示xaml文件。然后通过“添加”按钮选择箭头。下拉菜单显示“添加为链接”,选择并添加到文件中。

这样,对此链接文件所做的任何更改都会进入所有项目,并通过pack解决这个奇怪的问题。