【问题标题】:Visual Studio: What's the correct way to reference resources across projects?Visual Studio:跨项目引用资源的正确方法是什么?
【发布时间】:2019-04-14 19:57:49
【问题描述】:

辅助引用中的 .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 项目资源文件夹。

现在,我想我也可以简单地将资源添加到那个中间人类库中,但我想知道是否有一些正确的方法来引用“辅助”资源,所以我只需要添加一次图像?

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

【问题讨论】:

  • 太好了,我会试一试。我实际上通过将BuildAction 更改为Embedded Resource 找到了一个解决方案,但是现在当我在另一个应用程序(即Excel VBA)中引用此程序集时,地址已更改为`C:\Program Files\Microsoft Office\Office 15 等...我希望您的修复可以解决它:D

标签: c# wpf visual-studio resources


【解决方案1】:

改变

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 实际上解决了我遇到的最初问题)但 pack://app... 工作,编译然后进行安装并在另一个应用程序中实例化(例如Excel中的VBA)...

BuildAction 必须Resource

非常很幸运,我在尝试 Clemens 的答案之前偶然设置了这个,因为如果我没有这样做,我会认为它只是行不通!但确实如此!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多