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エラーを取得していますか? プロジェクトフォルダーの下に構成ファイルを追加しました。

4

2 に答える 2

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();
}
于 2012-02-27T14:07:14.470 に答える
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);
    }
  }
}
于 2012-04-05T03:14:16.803 に答える