0

app.configファイルにすべての構成を含むlog4netを使用するWCFスタンドアロンサービスがあり、サービスの最初の実行時に構成ファイルを暗号化しています。現在、これをコンソールアプリとして実行するように設定していますが、起動すると、暗号化された構成ファイルが保存された直後に、サービスが出力されます。

log4net:ERROR XmlHierarchyConfigurator:[log4net.Repository.Hierarchy.Hierarchy]にオブジェクトを設定するためのプロパティ[EncryptedData]が見つかりません

新しく暗号化された構成ファイルのlog4netセクションにEncryptedDataセクションがあるため、混乱します。

私は以下を使用して設定ファイルセクションを暗号化しています:

section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");

私のlog4net構成ファイルセクションは次のようになります(前):

<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" restartOnExternalChanges="false" />
  </configSections>

  <log4net>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
    <root>
      <appender-ref ref="ConsoleAppender" />
    </root>
  </log4net>

以降:

  <log4net configProtectionProvider="DataProtectionConfigurationProvider">
    <EncryptedData>
      <CipherData>
        <CipherValue>AQAAANCMnd8BFdERjHoAw <etc> </CipherValue>
      </CipherData>
    </EncryptedData>
  </log4net>

Log4netは引き続き暗号化された構成で動作します(編集:デバッグ中です。サービスとしてリリースで実行すると(ただし、アクセス許可は開かれます)、ログに記録されません)

だから、誰かがこのエラーが何であるか、そしてそれがスローされないように私のコードを修正する方法を教えてもらえますか?

4

1 に答える 1

2

私自身に答えるために:

秘訣は、AssemblyInfo.csのエントリを使用してlog4netをロードせず、代わりにこのコードをmainメソッドに配置することです。

XmlConfigurator.Configure();

これにより、.NETが処理を実行し、構成ファイルを復号化した後に、log4net構成がロードされます。この行をassemblyinfoに配置するより一般的な方法を使用すると、log4netは明らかに、これが発生する前にその構成をロードして読み取ろうとします。

于 2012-12-14T16:17:17.483 に答える