2012-02-27 29 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(); 

      } 

入力ストリームとしてnullエラーが発生しますか?私は、プロジェクトフォルダの下に設定ファイルを追加しました。埋め込みnlog設定ファイルにアクセスできませんか?

答えて

3

Manager.NLog.configファイルをプロジェクトのルートフォルダに追加した場合、プロジェクトの名前はFooとなり、ファイルが埋め込まれる正しいキーはFoo.Manager.NLog.configです。

Assembly.GetExecutingAssemblyメソッドを使用しているようですが、このメソッドで返されたアセンブリが実際にManager.NLog.configファイルを含むアセンブリであることを確認しましたか?

var inputStream = assembly.GetManifestResourceStream("System.ReflectionManager.NLog.config"); 

と私は非常に高く、このキーが正しいことを疑う:

assembly.GetType().Namespaceは常にSystem.Reflectionを返しますので、あなたのコードは次のようになりますので注意してください。このコードは、あなたのプロジェクト構造で設定ファイルを置くに関係なく動作します

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名が – Nisha

+0

@judithnishaをmanager.nlog.configされ、[OK]を、その後、名前を変更し、それは明らかです。私は私の答えを更新します。 –

1

だから、の線に沿って何かをしようとします。ビルドアクションを「組み込みリソース」に設定していることを確認してください。

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); 
    } 
    } 
} 
関連する問題