1

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

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

现在我已将其发布并安装在另一台机器上,但出现此异常错误:

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

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

4

3 回答 3

3

您应该将图像包含在项目中 - 可能在它自己的文件夹下以及其他图像。

然后,您应该在此图像上设置构建操作- 右键单击​​,选择属性并选择“如果较新则复制”或“始终复制”。

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

于 2011-11-21T11:50:20.967 回答
1

正如其他人已经说过的那样,您需要确保当您将应用程序部署/安装到另一台机器时,您的图像文件也会被复制 - 最合适的位置可能是项目的输出目录(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);
于 2011-11-21T12:07:24.390 回答
0

它不是放置大小写(放置文件的位置),而是Build Action&Copy to OutputDirectory属性 - 可以在属性窗口(Visual Studio)中访问。将文件(图像)添加到项目设置以下属性后:

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

文档参考这里

于 2011-11-21T11:50:40.143 回答