发布Windows窗体应用程序-图像到哪里去

本文关键字:图像 Windows 窗体 应用程序 发布 | 更新日期: 2023-09-27 18:15:21

关于Windows窗体的一个真正的R101问题。

我已经创建了我的第一个Windows应用程序来打印发票。我有一个图像这是公司的标志(png)。这个应用程序在VS2010调试时工作得很好-我把图像放在bin文件夹中。

现在我已经发布了它并在另一台机器上安装了它,我得到了这个异常错误:

先。FileNotFoundException: ice-logo-bw.png

问题是我在哪里放置图像,以便在发布时包含它?我试过把它放在根文件夹没有运气。

发布Windows窗体应用程序-图像到哪里去

您应该将图像包含在项目中-可能与其他图像一起放在自己的文件夹中。

你应该在这个图像上设置构建操作-右键单击,选择属性并选择"如果更新则复制"或"始终复制"。

另一种方法是将其作为资源添加,但这意味着您还需要从资源而不是文件系统中获取它。

正如其他人已经说过的,你需要确保当你在另一台机器上部署/安装你的应用程序时,你的图像文件也被复制了——最合适的地方可能是你的项目的输出目录(bin/目录,编译后的.exe所在的目录)——你可以设置文件的"Copy to output directory "属性为"Copy if newer",让Visual Studio自动为你做这个。

另一件要考虑的事情是你如何加载你的图像——如果你使用的是相对路径,那么你可能会发现你的程序无法找到你的图像,即使它们出现在你的可执行文件旁边,因为工作目录是不同的,试着在你的开发机器上从命令提示符运行你的程序,看看这种情况:
:: Make sure that the current working directory is different from the one app.exe is in
C:'> path'to'my'program'app.exe

如果你的代码看起来像这样:

var image = LoadImage("myfile.png");

那么这可能会失败,因为您的程序正在寻找c:'myfile.png而不是C:'path'to'my'program'app.exe的图像。您应该将代码修改为如下所示:


另一种选择是使用嵌入式资源。这稍微复杂一些,但有一个好处,你的图像嵌入到输出。exe本身-不需要额外的文件,所以它减少了无法找到所需文件的机会,因为它们已被删除/移动/在安装过程中没有复制。

string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "myfile.png");
var image = LoadImage(path);

不是place case(你放文件的地方)而是Build Action &Copy to OutputDirectory属性-可以在属性窗口(Visual Studio)中访问。添加文件(图像)到项目后设置以下属性:

Build Action = None (depend on your application)
Copy to Output Directory  = Copy always

文档参考在此