您可以指定一个文件在您的项目通过文件的属性会发生什么:
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