您可以指定一個文件在您的項目通過文件的屬性會發生什麼:
Build Action
到Resource
和Copy To Output Directory
到Copy always
將意味着該文件被複制到輸出目錄解決方案作爲一個文件(即你可以在資源管理器中看到它)。
如果在應用程序中使用該文件,它必須以指定的絕對路徑或相對路徑出現在磁盤上。否則,你會得到你描述的錯誤。如果我正確理解你,你想創建一個自包含的可執行文件,無論它在哪裏複製都可以運行。這意味着您的應用程序不能依賴於任何外部文件。
要解決此問題,您需要將所有外部文件嵌入到可執行文件中,並更改代碼以使用這些嵌入文件,而不是期望磁盤上的文件。
這裏得到一個方法,你開始:
public static byte[] GetResourceAsByteArray(string filename)
{
var assembly = Assembly.GetCallingAssembly();
using (var resFilestream = assembly.GetManifestResourceStream(filename))
{
if (resFilestream == null) return null;
var ba = new byte[resFilestream.Length];
resFilestream.Read(ba, 0, ba.Length);
return ba;
}
}
要使用它,你需要在你的文件的生成操作設置爲Embedded Resource
,並調用該方法與文件的全名,其中名稱被組裝這樣的:
[RootNameSpaceOfTheProject].[NameOfFolderInTheProject].[FileNameWithExtension]
實施例:
調用方法:
var b = ResourceOperations.GetResourceAsByteArray("Store.Resources.EmbeddedIcons.toolbox.png");
現在可以將字節數組寫入到例如一個臨時文件,並以此作爲圖像源,或者也可以直接建立從字節數組的圖像。至少,你有你的數據...
請看到我更新的問題。 – StepUp 2014-12-03 13:37:33
謝謝,我閱讀您的更新,並更新了我的答案。 – 2014-12-03 13:52:30