net core 2.0 读取文件添加为资源
Posted
技术标签:
【中文标题】net core 2.0 读取文件添加为资源【英文标题】:net core 2.0 read file added as resources 【发布时间】:2018-07-25 11:00:39 【问题描述】:我正在做一个 C# Net Core 2.0 应用程序...
我有一个.sln
,其中包含多个名为 PrjA、PrjB、PrjC 的控制台项目,它们将在不同的端口(端口 5000、端口 5010、端口 5020)中运行。它们通过控制台并行运行
C:>dotnet PrjA.dll
C:>dotnet PrjB.dll
C:>dotnet PrjC.dll
我有另一个名为PrjCommon
的库项目,它被所有三个项目引用。在这个项目中,我希望有一个所有三个项目共有的配置文件。
此文件是一个名为 portsettings.json
的 json
文件。
当我在Debug
模式下运行任何这些项目或生成Publish folder
时,不会保存portsettings.json
文件。
在PrjCommon
项目中,我尝试将portsettings.json
作为文件嵌入Resources.resx
。
从这三个项目中的任何一个中,我在 PrjCommon 中调用了一个方法,该方法应该读取 portsettings.json
文件。
我尝试通过两种方式从 Resources.resx 中读取此文件。
先这样
var assembly = Assembly.GetEntryAssembly();
string[] names = assembly.GetManifestResourceNames();
但names
为空。
第二个
var byteArray = Resources.portsettings;
返回一个字节数组,但我无法将这些字节数组转换为 json。
我的问题是如何让它工作。在我编译这些项目时保存 json 文件,或者将其保存为资源文件并能够读取它。
谢谢
【问题讨论】:
【参考方案1】:您可以使用以下内容读取嵌入的资源。
public static class EmbeddedResource
public static string[] GetApiRequestFile(string namespaceAndFileName)
try
using (var stream = typeof(EmbeddedResource).GetTypeInfo().Assembly.GetManifestResourceStream(namespaceAndFileName))
using (var reader = new StreamReader(stream, Encoding.UTF8))
return reader.ReadToEnd().Split(';');
catch(Exception exception)
ApplicationProvider.WriteToLog<EmbeddedResource>().Error(exception.Message);
throw new Exception($"Failed to read Embedded Resource namespaceAndFileName");
因此,就我而言,我想读取包含我格式化的 URL 的嵌入文本文件,它们主要充当模板。但您正在寻求的逻辑将是第一条流线。
Solution - Opti
Folder - Resource
File - RequestUrl.txt
如果我有一个文本文件所在的类,则具有指定文件的命名空间将是 Opti.Resource.RequestUrl.txt
。
【讨论】:
流为空。我用另一种方式解决了...谢谢 @Diego 你是怎么解决的,你确定你将这些文件嵌入到属性中? Greg.. 我添加了一个 resources.resx 并添加了一个名为 portsettings.json 的文件。我的命名空间是“INOM.Support.Comm”。当您说“namespaceAndFileName”时,也许我写错了,我输入了“INOM.Support.Comm.portsettings”.. 我的资源文件称为 Resource.. 所以我的行是 var stream = typeof(Resource).GetTypeInfo().Assembly .GetManifestResourceStream("INOM.Support.Comm.portsettings")) 也许我写错了..但它是空的....谢谢 @Diego 在我的情况下,我会通过ServiceLayer.Resources.Request.GetRainRequest.txt
。您必须使用扩展名获取整个命名空间、路径和名称。
谢谢....在您的情况下,“ServiceLayer”是命名空间。“Resources”是 Resources.resx 的名称。“GetRainRequest.txt”是文本......而“Request”是什么它?谢谢....【参考方案2】:
我解决了将json
文件保存在Debug
和Publish
目录中的问题,方法是将.json 文件属性Copy to Output Directory
设置为Always
,如here 所说。
我还在this教程之后添加了资源文件
我不认为它是最好的方法,但它是最简单的。
【讨论】:
以上是关于net core 2.0 读取文件添加为资源的主要内容,如果未能解决你的问题,请参考以下文章