2011-11-21 59 views
1

Windows窗体上的一个真正的R101问题。发布Windows窗体应用程序 - 图像在哪里去?

我创建了我的第一个Windows应用程序来打印发票。我有一个图像是公司标志(png)。调试时,该应用在VS2010中效果很好 - 我将该图像放入bin文件夹中。

现在我已经刊登出来,并安装到另一台机器我得到这个异常错误的:

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

所以,问题是我在哪里放置图像,因此被列入时候发布?我试图把它放在根文件夹中,但没有运气。

回答

3

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

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

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

+0

感谢您的快速回答。我创建了一个文件夹并在其中放置图像,但我无法看到图像。当我将图像放入根部时,我觉得很奇怪,尽管令人耳目一新,但看不见它们。这些文件在Windows资源管理器 – ComfortablyNumb

+1

@ComfortablyNumb - 您需要将图像添加到项目中。 http://msdn.microsoft.com/en-us/library/9f4t9t92.aspx – Oded

+0

对不起,有点愚蠢。谢谢... – ComfortablyNumb

0

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

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

文档参考here

+0

请尝试链接到文档的_latest_版本。 – Oded

+0

当然 - 下次我会记得检查。谢谢。 –

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"); 

那么这是因为你的计划正在˚F可能会失败或c:\myfile.png而不是C:\path\to\my\program\app.exe的图像。你应该修改你的代码看起来有点像这样:


另一种方法是使用embedded resources。这稍微复杂一些,但有一个优点,即将图像嵌入输出.exe本身 - 不需要额外的文件,因此它减少了找不到所需文件的可能性,因为它们已被删除/移动/不是在安装期间复制。

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

谢谢你。这就解释了为什么我在通过计划任务运行exe时遇到问题。 – ComfortablyNumb

相关问题