2012-02-27 111 views
0
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(); 

      } 

作爲輸入流獲得空錯誤?我在項目文件夾下添加了配置文件。無法訪問嵌入式nlog配置文件?

回答

3

如果您將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(); 
} 
+0

但nlog .config名稱是manager.nlog.config – Nisha 2012-02-27 14:08:59

+0

@judithnisha,好了,然後重新命名它,這很明顯。我會更新我的答案。 – 2012-02-27 14:14:07

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); 
    } 
    } 
}