使用 ClickOnce 部署的 C# WPF 应用程序中的图像路径

path to image in deployed C# WPF app with ClickOnce

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

public Image AddImage(string fileName);

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

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

图像在 visual studio 中具有以下设置。

但是安装后,图片没有出现在安装位置。

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

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

我做错了什么?

我应该使用其他方法吗?

感谢@IlikedtheoldWhosebug,我设法将图像作为嵌入式资源包含到解决方案中,它在ClickOnce发布后也能正常工作。

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

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

示例代码来自 pdfsharp 文档

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 是项目名称。