Windows窗体上真正的R101问题。
我创建了第一个用于打印发票的Windows应用程序。我有一张图片是公司徽标(png)。在调试时,该应用程序在VS2010中运行良好 - 我将图像放在bin文件夹中。
现在我发布了它并将其安装在另一台机器上我收到此异常错误:
System.IO.FileNotFoundException:ice-logo-bw.png
所以问题是我在哪里放置图像以便在我发布时包含它?我试过把它放在根文件夹中没有运气。
答案 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。