C# - 从不同程序集中的文件资源加载图像
我有一个PNG图像文件,它存储在一个名为SomeProject的项目中,并在同一个项目中使用XAML进行多次显示。在不同的程序集中,我现在希望访问相同的图像。以前我只是指定一个工作正常的实际文件的相对路径。但是,当我构建发布安装程序时,图像文件将打包到SomeProject.DLL中。
有没有简单的方法可以从另一个程序集访问PNG文件而不需要简单地将文件本地复制到第二个项目?我虽然可能使用'pack://'但我没有太多运气。
// SomeOtherProject.SomeClass.cs ...
Image logo = new Image();
BitmapImage logoSource = new BitmapImage();
eChamSource.BeginInit();
// Following line works fine is Visual Studio, but obviously not after installation
// logoSource.UriSource = new Uri(@"..\SomeProject\Resources\Images\logo.png", UriKind.Relative);
logoSource.UriSource = new Uri("pack://application:,,,/SomeProject;component/Resources/Images/logo.png");
logoSource.EndInit();
logo.Width = 100; logo.Height = 100;
logo.Source = logoSource;
任何建议都会很好。
答案 0 :(得分:1)
如果您要用作Content
的图片位于another assembly
,则必须copy
他们加入main projects directory
。
您可以使用Build事件执行此操作:
右键单击包含images -> Properties -> Buil Events ->
编辑帖子构建的项目,将图像复制到main project directory
。
然后你必须将其用作
<强> pack://application:,,,/ContentFile.xaml
强>
(OR)
如果您需要在子文件夹中
<强> pack://application:,,,/Subfolder/ContentFile.xaml
强>
答案 1 :(得分:1)
尝试按照以下方式加载其他程序集:
Application.LoadComponent(new Uri(@"AnotherAssembly;;;component\AnotherResourceFilePath/logo.png", UriKind.Relative)));
LoadComponent函数返回一个对象。您可以将其转换为适当的类型。