C#-从不同程序集中的文件资源加载图像

C#-从不同程序集中的文件资源加载图像,c#,image,assemblies,pack,C#,Image,Assemblies,Pack,C#-从不同程序集中的文件资源加载图像 我有一个PNG图像文件,它存储在一个名为SomeProject的项目中,并在同一个项目中使用XAML多次显示。在另一个程序集中,我现在希望访问相同的图像。之前,我只是简单地指定了一个实际文件的相对路径,该路径运行良好。但是,当我构建发布安装程序时,图像文件被打包到SomeProject.DLL中 是否有任何简单的方法可以从另一个程序集访问PNG文件,而不必将文件本地复制到第二个项目?我想也许可以使用“pack://”,但我运气不太好 // SomeOthe

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;

任何建议都很好。

如果要用作
内容的图像位于
另一个程序集中
,则必须
将其复制到
主项目目录

您可以使用生成事件来执行此操作:

右键单击包含
images->Properties->Buil Events->
edit post-build的项目,将图像复制到
主项目目录

那你就得把它当作

pack://application:,,,/ContentFile.xaml

(或)

如果您需要它在子文件夹中

pack://application:,,/Subfolder/ContentFile.xaml


查看此HF有关详细信息,请尝试按如下方式加载其他程序集:

Application.LoadComponent(new Uri(@"AnotherAssembly;;;component\AnotherResourceFilePath/logo.png", UriKind.Relative)));
LoadComponent函数返回一个对象。您可以将其转换为适当的类型