c# - 使用 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
我究竟做错了什么?
我应该使用另一种方法吗?
解决方案
感谢@IlikedtheoldStackOverflow,我设法将图像作为嵌入式资源包含在解决方案中,这在ClickOnce发布后也可以使用。
- 我从pdfsharp doc 复制了步骤 - pdfsharp.net/wiki/MigraDoc_FilelessImages.ashx
- 将构建操作更改为嵌入式资源
- 以格式创建正确的图像路径 - 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是项目名称。
推荐阅读
- ios - 当tableview中的行被选中时,tableview恢复到初始状态
- typescript - 如何显式声明某个 Phaser 类型的变量?
- css - 删除内联样式的正则表达式
- r - R计数功能
- javascript - repl.it javascript 石头、纸、剪刀作业。我错过了什么?
- java - NetBeans Look&Feel 主题与它在 IDE 中的外观不同
- excel - 无法在 Power Pivot 中使用新度量
- javascript - 从选择框Javascript获取二维数组
- javascript - 如何在目标的兄弟姐妹上触发事件
- javascript - 存储的滚动条位置从页面加载的顶部开始