Visual Studio:在整个项目中引用资源的正确方法是什么?

时间:2018-11-12 05:28:36

标签: c# wpf visual-studio resources

在运行期间,辅助引用中的.xaml映像位置未变为正确的资源位置,而是引用了主要引用资源文件夹。我该如何更改?

背景-

我有几个项目的解决方案。这里重要的三个项目是

  1. 作为类库构建的WPF项目
  2. 默认班级 图书馆
  3. 用于测试的控制台应用程序

WPF项目的资源中有一个.png图像。在创建的MainWindow中,它的调用方式是:

<ImageBrush
  ImageSource="pack://siteoforigin:,,,/Resources/MyDemoImage.png" 
  Stretch="Uniform"/>

当我直接通过console app运行WPF窗口的实例时,它可以正常工作。资源引用在运行时变为:

C:\Users\me.me\Documents\Visual Studio 2015\Projects\sol\ WPFProjectName\ bin\Resources\MyDemoImage.png

但是,如果我在类库项目中创建对WPF项目的引用,然后调用类库的实例,则地址变为

C:\Users\me.me\Documents\Visual Studio 2015\Projects\sol\ ClassLibraryName\ bin\Resources\MyDemoImage.png

因此,此“打包”地址成为对类库资源而不是WPF项目资源文件夹的引用。

现在,我想我也可以简单地将资源添加到该中级类库中,但是我想知道是否存在某种正确的方法来引用“辅助”资源,所以我只需要添加一次图像? / p>

顺便说一句,我尝试编译时遇到的错误是System.Windows.Baml2006.TypeConverterMarkup-我找到了与此相关的答案,但是尝试了他们说的无济于事(将图像标记为始终为副本等)

1 个答案:

答案 0 :(得分:0)

更改

pack://siteoforigin:,,,/Resources/MyDemoImage.png

pack://application:,,,/AssemblyName;component/Resources/MyDemoImage.png

感谢@Clemens的建议。效果很好。

我只是想回答并分享我在尝试此过程时发现的其他一些挫折感积累的知识。

使用pack://application:,,,/AssemblyName;component/Resources/MyDemoImage.png对我的第一张图片效果很好。然后,我在尝试对第二张/第三张图片执行相同操作时遇到了很多麻烦。它保持编译正常,但在运行时内部异常抛出,找不到“ resources / mydemoimage.png”

其原因是由于图像上的 BuildAction 。我一直在使用不同的类型,其中一些适用于我的本地副本(例如,将 BuildAction 设置为Embedded Resource实际上解决了我遇到的最初问题)但{{1 }}工作,编译,然后进行安装并在另一个应用程序(例如Excel中的VBA)中进行实例化。

BuildAction 必须pack://app...

我很幸运在尝试Clemens的答案之前偶然地设置了这个选项,因为如果没有的话,我会以为它只是行不通!但是确实如此!