如何在.NET程序集中嵌入一个文本文件?
如何在.NET程序集中嵌入一个文本文件?
在项目文件上右键点击,选择属性。
在打开的窗口中,转到资源选项卡,如果选项卡中间只有一个蓝色的链接,点击它以创建一个新资源。
然后从选项卡上方的工具栏中选择添加一个新的文本文件,给它一个名称,它将被添加到你的项目并打开。
如果你完成了上述步骤,你可以在代码中输入Resources.你给文本文件取的名称,然后你就可以访问它的内容了。注意,在类中首次使用资源类时,你需要添加一个using指令(在输入Resources后按下Ctrl+.来获取菜单,让VS为你完成)。
如果对上述描述有任何不清楚的地方,请留下评论,我会进行编辑,直到完整或有意义为止 🙂
using指令的代码应该是什么样的?我在尝试做这个操作时遇到了困难。我已经将solutions.txt添加为资源,但它找不到Resources.solutions - 我觉得我漏掉了using指示符。
啊哈,我只需在前面加上My.(即My.Resources.solutions)就可以了。很简单!
添加资源将会生成并包含Properties\Resources.Designer.cs
,其中有namespace YourProjectRootNamespace.Properties
,因此你需要使用YourProjectRootNamespace.Properties
。在VisualStudio中,ProjectRootNamespace
在项目属性中定义。
如果我以这种方式添加一个文本文件,并且将该文件作为我的解决方案的一部分...如果该文件被更新并重新构建程序集,那么嵌入的资源也会被更新吗?还是我需要手动删除/重新添加文件,如果我要更改它?
文件在编译时被打包为资源,而不是在添加它们时。你可以自由地在任何工具中更改文件并重新构建,这些更改将成为你程序集的一部分。
问题的出现原因是,开发人员想要在.NET程序集中嵌入一个文本文件,以便在运行时可以访问该文件。
解决方法是,在Visual Studio中将文本文件包含在项目中,并在“属性”面板中将其操作设置为“嵌入的资源”。然后,可以使用Assembly.GetManifestResourceStream(string)
方法将该文件作为流来访问。
值得注意的是,这种方法也适用于嵌入其他类型的文件,如图像、图标、声音等。
需要注意的是,在调用GetManifestResourceStream()方法时,需要使用命名空间+文件名作为参数,例如"MyNamespace.MyTextfile.txt"。还可以调用GetManifestResourceNames()方法来获取所有名称的列表。
问题:如何将文本文件嵌入到.NET程序集中?
在.NET程序集中嵌入文本文件有以下好处:1.如果资源被移除,编译器会报错;2.消除了拼写错误。下面的代码展示了如何在代码中使用嵌入的文本文件:
global::packageName.Properties.Resources.ThatFileName
如果想要在C# DLL级别将嵌入的文本文件写回到文件中,可以使用以下代码:
using System.IO; using System.Reflection; string resourceName = "packageName.Properties.Resources.ThatFileName"; string filePath = "C:\\path\\to\\file.txt"; Assembly assembly = Assembly.GetExecutingAssembly(); using (Stream stream = assembly.GetManifestResourceStream(resourceName)) { using (StreamReader reader = new StreamReader(stream)) { string fileContent = reader.ReadToEnd(); File.WriteAllText(filePath, fileContent); } }
如果想要从变量中指定ThatFileName
,可以使用以下代码:
string fileName = "ThatFileName"; string resourceName = $"packageName.Properties.Resources.{fileName}";
以上就是如何将文本文件嵌入到.NET程序集中以及解决相关问题的方法。