gpt4 book ai didi

C# - 从不同程序集加载图像

转载 作者:太空狗 更新时间:2023-10-30 01:29:57 26 4
gpt4 key购买 nike

我在不同的程序集中有一张图片:

  • (.NET Standard 1.4) ResourcesAssembly/Common/Images/CompanyLogo.png - 强制要求
  • 构建操作:内容- 强制要求
  • Copy to output directory: Copy if newer (我在编译后检查 - 所需的图像出现在我的exe所在的输出目录中 - 例如,Debug/Common/Images/CompanyLogo.png。所以应该没有从那里得到它的问题。)

我想将它粘贴到窗口内我的应用程序集 (WPF) 中。我尝试了 2 种变体。

1.

<Image Source="pack://siteoforigin:,,,/Common/Images/CompanyLogo.png" />

界面中的图像在运行时可见。但是 VS 的 XAML 设计器在设计时没有显示图像,并说这是一个错误:

Could not find a part of the path 'C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\Common\Images\CompanyLogo.png'.

2.

<Image Source="pack://application:,,,/ResourcesAssembly;component/Common/Images/CompanyLogo.png" />

图像在运行时不可见,但在设计时一切正常。

Visual Studio 2017 社区版 15.4.4。

所以第一个变体似乎适合我,但那个奇怪的错误 - 为什么它试图在 Visual Studio 文件夹中查找图像? “siteoforigin”选项与应用程序 exe 相关,而不与 Visual Studio exe 相关,不是吗?

更新

尝试将构建操作作为“嵌入式资源”的第二个变体(ResourcesAssembly 是一个 .NET Standard 1.4 项目)。甚至清理并重建了解决方案。结果与第二个变体相同:图像在运行时不可见,但在设计时可见。

最佳答案

"siteoforigin" option relates to the application exe, not to the Visual Studio exe, isn't it?

确切地说,siteoforigin 指向执行程序集目录。但是,当您使用 VS 的 XAML 设计器时,执行程序集是 ... XDesProc.exe 从您指定的目录 (C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE ).这就是为什么图像搜索路径是 ...\IDE\Common\Images\CompanyLogo.png 的原因。

您可能会问——“有没有办法在 WPF 设计器和应用程序运行时中正确显示图像?”好吧,如果您想保留这两个要求(第一个 - 外部资源程序集中的图像,第二个 - 将图像设置为“内容”的构建操作),那么可能不会。至少我想不出解决方案。

在 pack URI 中带有 siteorigin 权限的选项是不合适的,因为图像应该加载到具有不同执行目录的不同应用程序中(见上文)。

包 URI 中具有 application 权限的选项不适用,因为它仅适用于编译到程序集(本地或引用)中的资源文件。这实际上就是为什么您在运行时看不到第二个变体的图像的原因。

因此,如果第一个变体适合您,那么好吧,这是您在不违反您声明的要求的情况下所能拥有的最好的变体。允许在设计器和运行时正确查看图像的最接近的解决方案是将图像的 Build Action 设置为 Resource 并将第二个源路径与 申请权限。

更新

“资源”构建操作不适用于 .Net 标准类库。我还没有找到任何信息是否会支持它。目前,如果您的 ResourcesAssembly 必须以 .Net Standard 为目标,您最好的选择是使用您在问题中描述的第一个变体。

关于C# - 从不同程序集加载图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48730942/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com