system.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
System.IO.Stream inputStream = assembly.GetManifestResourceStream(assembly.GetType().Namespace + "Manager.NLog.config");
using (StreamReader reader = new StreamReader(inputStream))
{
string result = reader.ReadToEnd();
}
将null错误作为输入流?我在项目文件夹下添加了配置文件。
答案 0 :(得分:4)
如果您将Manager.NLog.config
文件添加到项目根文件夹中,并且您的项目名为Foo
,则嵌入文件的正确密钥为:Foo.Manager.NLog.config
。
在您的示例中,您似乎使用了Assembly.GetExecutingAssembly
方法,但是您是否确认此方法返回的程序集实际上是包含Manager.NLog.config
文件的程序集?
另请注意,assembly.GetType().Namespace
将始终返回System.Reflection
,因此您的代码如下所示:
var inputStream = assembly.GetManifestResourceStream("System.ReflectionManager.NLog.config");
我非常怀疑这个关键是正确的。
所以你可以尝试一下:
var assembly = Assembly.GetExecutingAssembly();
var key = assembly.GetName().Name + ".Manager.NLog.config";
using (var inputStream = assembly.GetManifestResourceStream(key))
using (var reader = new StreamReader(inputStream))
{
var result = reader.ReadToEnd();
}
答案 1 :(得分:1)
无论您将配置文件放在项目结构中的哪个位置,此代码都将起作用。确保将Build Action设置为" Embedded Resource"因为我相信你已经完成了。
using System;
using System.IO;
using System.Linq;
using System.Reflection;
var exe = Assembly.GetExecutingAssembly();
string resourceName = exe.GetManifestResourceNames()
.FirstOrDefault(s => s.IndexOf("NLog.config", StringComparison.OrdinalIgnoreCase) > -1);
if (!string.IsNullOrEmpty(resourceName))
{
using (var xml = new StreamReader(exe.GetManifestResourceStream(resourceName)))
{
string xmlConfig = xml.ReadToEnd();
if (!File.Exists("NLog.config"))
{
// Do something with the log file, like write it out to the root directory.
File.WriteAllText("NLog.config", xmlConfig);
}
}
}