首页 > 解决方案 > 使用 ClickOnce 部署的 C# WPF 应用程序中的图像路径

问题描述

我在使用 ClickOnce 部署的项目中为图像设置正确的文件路径时遇到问题。生成pdf文档的第三方库需要图像路径作为方法的输入。

public Image AddImage(string fileName);

我正在使用以下库来生成 pdf 文档 - https://www.nuget.org/packages/PDFsharp-MigraDoc-gdi/1.50.5147/

该图像位于链接到 WPF 项目的类库项目中。

图像在视觉工作室中有以下设置。

在此处输入图像描述

但安装后,图像不会出现在安装位置。

如果出现,我将使用以下代码获取图像路径。

string path = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); \\+image name

我究竟做错了什么?

我应该使用另一种方法吗?

标签: c#wpfclickoncemigradoc

解决方案


感谢@IlikedtheoldStackOverflow,我设法将图像作为嵌入式资源包含在解决方案中,这在ClickOnce发布后也可以使用。

  1. 我从pdfsharp doc 复制了步骤 - pdfsharp.net/wiki/MigraDoc_FilelessImages.ashx
  2. 将构建操作更改为嵌入式资源

在此处输入图像描述

  1. 以格式创建正确的图像路径 - Namespace.FolderWhereIsImage.NameOfImage.png

来自pdfsharp doc的示例代码

private string MigraDocFilenameFromByteArray(byte[] image)
{
   return "base64:" + Convert.ToBase64String(image);
}

private byte[] LoadImage(string name)
{
   var assembly = Assembly.GetExecutingAssembly();

   using (Stream stream = assembly.GetManifestResourceStream(name))
   {
      if (stream == null)
          throw new ArgumentException("No resource with name " + name);

      int count = (int)stream.Length;
      byte[] data = new byte[count];
      stream.Read(data, 0, count);
      return data;
   }
}


byte[] image = LoadImage("SampleProject.Resources.logo.png");
string imageFilename = MigraDocFilenameFromByteArray(image);
row.Cells[2].AddParagraph().AddImage(imageFilename);

"SampleProject.Resources.logo.png".. Resources是项目中的文件夹名称,SampleProject是项目名称。


推荐阅读