2011-11-21 63 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

相關問題