关于 Windows 窗体的一个真正的 R101 问题。
我创建了我的第一个 Windows 应用程序来打印发票。我有一张图片是公司徽标(png)。该应用程序在调试时在 VS2010 中运行良好 - 我将图像放在 bin 文件夹中。
现在我已将其发布并安装在另一台机器上,但出现此异常错误:
System.IO.FileNotFoundException: ice-logo-bw.png
所以问题是我在哪里放置图像以便在发布时包含它?我试过把它放在根文件夹中,但没有成功。
关于 Windows 窗体的一个真正的 R101 问题。
我创建了我的第一个 Windows 应用程序来打印发票。我有一张图片是公司徽标(png)。该应用程序在调试时在 VS2010 中运行良好 - 我将图像放在 bin 文件夹中。
现在我已将其发布并安装在另一台机器上,但出现此异常错误:
System.IO.FileNotFoundException: ice-logo-bw.png
所以问题是我在哪里放置图像以便在发布时包含它?我试过把它放在根文件夹中,但没有成功。
您应该将图像包含在项目中 - 可能在它自己的文件夹下以及其他图像。
然后,您应该在此图像上设置构建操作- 右键单击,选择属性并选择“如果较新则复制”或“始终复制”。
另一种方法是将其添加为资源,但这意味着您还需要从资源而不是文件系统中获取它。
正如其他人已经说过的那样,您需要确保当您将应用程序部署/安装到另一台机器时,您的图像文件也会被复制 - 最合适的位置可能是项目的输出目录(bin/
编译后的目录.exe
) -您可以将文件的“复制到输出目录”属性设置为“如果较新则复制”,让 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);
它不是放置大小写(放置文件的位置),而是Build Action
&Copy to OutputDirectory
属性 - 可以在属性窗口(Visual Studio)中访问。将文件(图像)添加到项目设置以下属性后:
Build Action = None (depend on your application)
Copy to Output Directory = Copy always
文档参考这里。