Visual Studio打包部署时添加的图片资源对应的文件路径是什么
解决方案
问题原因
你当前硬编码了Debug\\hunting.jpg作为图片路径,仅在本地Debug调试时有效,打包部署后不存在Debug目录,自然无法加载图片。
前置配置(必须完成)
先在VS的解决方案资源管理器中找到你的hunting.jpg文件,右键选择「属性」,修改两个配置项:
- 「生成操作」改为内容
- 「复制到输出目录」改为如果较新则复制
配置完成后,不管是Debug调试、Release编译还是打包部署,这张图片都会自动复制到主程序exe所在的同级目录下。
代码修改
你需要在生成HTML时动态获取当前程序所在的目录,拼接出图片的绝对路径,再转换为HTML可识别的file协议路径即可,同时修正你把img标签写在head和body之间的不规范写法。
修改后的代码片段如下:
private StringBuilder GenerateReport() { StringBuilder html = new StringBuilder(); StringBuilder css = new StringBuilder(); try { // 新增:动态获取logo的绝对路径 string logoPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "hunting.jpg"); string logoSrc = new Uri(logoPath).AbsoluteUri; css.AppendLine("<style>"); css.AppendLine("td {padding: 5px; text-align:center; font-weight: bold; text-align: center; font-size: 12px;}"); css.AppendLine("h1 {color: orange;}"); css.AppendLine("</style>"); html.AppendLine("<html>"); html.AppendLine($"<head>{css}<title>Receipt</title></head>"); html.AppendLine("<body>"); // 替换原有img标签,路径用动态获取的地址,用CSS居中替代已废弃的align属性 html.AppendLine($"<img src='{logoSrc}' style='display:block; margin:0 auto; width: 75px; height: 50px;'>"); // 后续原有生成收据的代码保持不变 html.AppendLine($"<h1> Order Receipt</h1>"); html.Append($"<br></br>"); html.Append($"<p style = 'text-indent: -550px; font-size: 15px'><b>{"Customer: " + strFirstName + " " + strLastName}</b></p>"); html.Append($"<p style = 'text-indent: -550px; font-size: 15px'><b>{"Order Number: " + strMaxOrderID}</b></p>"); html.Append($"<p style = 'text-indent: -550px; font-size: 10px'><b>{"Phone Number: " + strPhoneNumber}</b></p>"); html.AppendLine("<table>"); html.AppendLine("<tr><td>Item Name</td><td>Quantity</td><td>Price</td></tr>"); html.AppendLine("<tr><td colspan=3><hr /></td></tr>"); for (int i = 0; i < lstShoppingCartName.Count; i++) { html.Append("<tr>"); html.Append($"<td>{lstShoppingCartName[i]}</td>"); html.Append($"<td>{lstShoppingCartQuantity[i]}</td>"); html.Append($"<td>{lstShoppingCartCost[i]}</td>"); html.Append("</tr>"); html.AppendLine("<tr><td colspan=4><hr /></td></tr>"); } html.AppendLine("</table>"); html.Append($"<br></br><br></br>"); html.Append($"<p style = 'align:center; text-indent: 390px; font-size: 15px '><b>{"SubTotal: " + decSubTotal.ToString("C2")}</b></p>"); html.Append($"<p style = 'align:center; text-indent: 371px; font-size: 15px '><b>{"Discount Percent: " + decDiscountPercent.ToString("N3")}</b></p>"); html.Append($"<p style = 'align:center; text-indent: 422px; font-size: 15px '><b>{"Discount: " + decDiscount.ToString("C2")}</b></p>"); html.Append($"<p style = 'align:center; text-indent: 297px; font-size: 15px '><b>{"SubTotal After Discount: " + decSubTotalDiscount.ToString("C2")}</b></p>"); html.Append($"<p style = 'align:center; text-indent: 430px; font-size: 15px '><b>{"Taxes: " + decTaxes.ToString("C2")}</b></p>"); html.Append($"<p style = 'align:center; text-indent: 450px; font-size: 20px ' ><b>{"Total: " + decTotal.ToString("C2")}</b></p>"); html.Append($"<div><button onClick='window.print()'> Print this page</button></div>"); html.AppendLine("</body></html>"); } catch(Exception ex) { MessageBox.Show(message + ex.Message, "Program Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } return html; }
打包后资源位置说明
按上述配置后,打包安装应用时,hunting.jpg会和你的主程序exe存放在同一个安装目录下,通过AppDomain.CurrentDomain.BaseDirectory可以动态拿到该目录的绝对路径,无需硬编码,调试和部署场景都能兼容。
内容的提问来源于stack exchange,提问作者tech127956
相关产品推荐
相关产品推荐

