如果我将新文本文件添加到项目regexCheck.txt
,则默认构建操作为资源:
我知道如果我将复制选项设置为输出dicectory =我将能够在workingDirectory\Macros\Header\regexCheck.txt
上找到它
我很好奇我将如何能够检索该文本文件的内容而无需将其输出到工作目录。
例如,relector能够查看我的可执行文件的所有资源:
我知道我可以将文件放在resource.resx
中我只是想知道如何从exe中提取资源
做类似的事情:
var _assembly = Assembly.GetExecutingAssembly();
var resourceName = _assembly.GetManifestResourceNames()[0];
var steam = _assembly.GetManifestResourceStream(resourceName);
var buffer = new byte[2048];
steam.Read(buffer, 0, buffer.Length);
var text = System.Text.ASCIIEncoding.ASCII.GetString(buffer).Replace("\0", "");
我设法看到了我的文本文件的内容:
答案 0 :(得分:1)
我认为您现在不能使用附加到项目的文件的方式。
另一种方法是在项目中添加“资源文件”。 (项目 - >添加新项目... - >资源文件)。然后,您可以在资源文件设计器中添加文本文件(添加资源 - >添加现有文件...)
你最终得到的项目树看起来像这样:
Project
|
+-- Resources
| |
| +-- regexCheck.txt
|
+-- Resource.resx
| |
| +-- Resource.Designer.cs
在您的代码中Resource.regexCheck
是一个包含文件内容的字符串。
答案 1 :(得分:1)
我将构建操作从Resource
更改为Embeded Resource
我能够通过以下方式获取内容:
var fileName = "regexCheck.txt";
var currentNamespace = typeof(this).Namespace; // if static class use name of class
var fullName = currentNamespace + "." + fileName;
Func<string,Stream> getResStream =
x => Assembly.GetExecutingAssembly().GetManifestResourceStream(x);
using (Stream stream = getResStream(fullName))
using (StreamReader reader = new StreamReader(stream))
string result = reader.ReadToEnd(); // <------ Result should be the content of text file
代码字的原因是因为类和文本文件位于同一名称空间(相同的目录和名称空间)