发布Windows窗体应用程序 - 图像在哪里?

时间:2011-11-21 11:48:12

标签: c# asp.net windows-applications

Windows窗体上真正的R101问题。

我创建了第一个用于打印发票的Windows应用程序。我有一张图片是公司徽标(png)。在调试时,该应用程序在VS2010中运行良好 - 我将图像放在bin文件夹中。

现在我发布了它并将其安装在另一台机器上我收到此异常错误:

  

System.IO.FileNotFoundException:ice-logo-bw.png

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

3 个答案:

答案 0 :(得分:3)

您应该在项目中包含图像 - 可能在其他图像的文件夹下。

然后,您应该在此图片上设置Build Action - 右键单击​​,选择属性并选择“如果更新则复制”或“始终复制”。

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

答案 1 :(得分:1)

正如其他人已经说过,您需要确保在将应用程序部署/安装到另一台计算机时也复制了您的映像文件 - 最合适的位置可能是项目的输出目录({{1}编译的bin/所在的目录) - 您可以将文件的“复制到输出目录”属性设置为“如果更新则复制”,以使Visual Studio自动为您执行此操作。

要考虑的另一件事是如何加载图像 - 如果您使用相对路径,那么您可能会发现程序无法找到您的图像,即使它们与您的可执行文件一起存在,因为工作目录不同,请尝试运行从开发计算机上的命令提示符开始编程,看看是否发生了这种情况:

.exe

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

:: 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查找图片。你应该修改你的代码看起来像这样:


另一种选择是使用embedded resources。这稍微复杂一点,但是有一个优点,就是你的图像嵌入到输出.exe本身 - 不需要额外的文件,所以它减少了找不到所需文件的可能性,因为它们已被删除/移动/没有在安装过程中复制。

C:\path\to\my\program\app.exe

答案 2 :(得分:0)

这不是地方案例(放置文件的地方),但是Build Action& Copy to OutputDirectory属性 - 可以在属性窗口(Visual Studio)中加入。 将文件(图像)添加到项目集后面的属性:

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

文档参考here