Frage

Ich habe eine Web-Anwendung mit einem benutzerdefinierten Konfigurationsabschnitt. Dieser Abschnitt enthält Informationen I'ld verschlüsseln mag (hatte gehofft, aspnet_regiis zu verwenden, anstatt es selbst zu tun).

Web.Config:

<?xml version="1.0"?>

    <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
      <configSections>
          <section name="MyCustomSection" 
                   type="MyNamespace.MyCustomSectionHandler, MyAssembly"/>
    </configSections>
<configProtectedData>
    <providers>
      <clear />
      <add name="DataProtectionConfigurationProvider"
           type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0,
                   Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a,
                   processorArchitecture=MSIL"
           keyContainerName="MyKeyContainer"
           useMachineContainer="true" />
    </providers>
  </configProtectedData>
    <MyCustomSection>
       <blah name="blah1">
          <blahChild name="blah1Child1" />
       </blah>
    </MyCustomSection>

Die Konfiguration Handler funktioniert gut, bevor Sie versuchen, es zu verschlüsseln. Wenn ich versuche, es zu verschlüsseln mit:

  

aspnet_regiis -pef "MyCustomSection"   c: \ inetpub \ wwwroot \ MyWebSite -PROV   DataProtectionConfigurationProvider

Ich erhalte eine Fehlermeldung:

  

Encrypting Konfigurationsabschnitt ... Ein   Fehler aufgetreten ist die Schaffung   Konfigurationsabschnitt Handler für   MyCustomSection: Datei konnte nicht geladen werden   oder Assembly ‚MyAssembly‘ oder einem ihrer   Abhängigkeiten. Das System kann nicht finden   die Datei angegeben.   (C: \ inetpub \ wwwroot \ MyWebSite \ web.config   Zeile 5)

Ich habe versucht, mit / ohne den Provider konfiguriert. Mit / ohne Abschnittsgruppen. Mit / Ohne die Website vor der Hand zu haben begonnen. Ich habe versucht, meine Assembly im GAC für die Registrierung vorübergehend setzen. Ich meine log4net Abschnitt auch nur versucht, etwas zu versuchen, die nicht von mir, ohne Glück war. Ich habe die Eingabeaufforderung als Administrator ausführen. Irgendwelche Ideen? Oder kann aspnet_regiis einfach nicht für benutzerdefinierte Abschnitte verwendet werden?

Ein letzter Schuss nach der Anzeige MSDN veränderten mein Handler von Configuration eher zu erben als IConfigurationSectionHandler Implementierung, da es technisch in 2.0 veraltet wurde (in der Hoffnung es etwas in Bezug auf aspnet_regiis Version war). Kein Glück gibt es auch nicht.

Alle Ideen, lassen Sie mich wissen. Dank!

War es hilfreich?

Lösung

aspnet_regiis muss in der Lage sein, um die Montage zu binden. Die normalen .net verbindliche Regeln gelten.

ich dies umgehen, indem Verzeichnis namens aspnet_regiis_bin im selben Verzeichnis wie aspnet_regiis.exe und eine aspnet_regiis.exe.config Datei mit aspnet_regiis_bin als privatem Pfad so zu erstellen:

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <probing privatePath="aspnet_regiis_bin"/>
      </assemblyBinding>
   </runtime>
</configuration>

ich kopieren Sie die Baugruppen, die die benutzerdefinierten Konfigurationsabschnitte in aspnet_regiis_bin definieren, so dass aspnet_regiis kann sie finden.

Dieses Verfahren erfordert nicht die Baugruppen stark namentlich genannt zu werden oder im GAC erfordert aber um in dem Rahmen Verzeichnissen durcheinander.

Andere Tipps

Ich bin mit einem Problem zu umgehen, wodurch ich temporarly den Inhalt des configSections Elements Kommentar aus:

<configSection>
    <!--
    <section name="CustomSection" type="" />
    -->
</configSection>

Sie können dann die Verschlüsselung laufen aspnet_regiis -pef wie gewohnt verwenden. Danach den Abschnitt nur Kommentar- gelaufen ist und Ihre Website ist bereit zu laufen.

Dies ist ein Gesamt Hack, aber ich bin mir nicht sicher, dass eine andere Art und Weise gibt, es zu tun, ohne die Montage stark zu benennen, die Ihre benutzerdefinierten Abschnitt definiert und GACifying es (obwohl Sie erwähnt, dass nicht funktioniert, entweder, und ich m nicht sicher, warum es würde nicht). Da aspnet_regiis läuft im : \ Windows \ Microsoft.Net \ Framework \ Ordner (in WinXP), können Sie die DLL kopieren, die Config-Abschnitt in das entsprechende Framework definiert \ Ordner, und dann funktionieren soll.

Für die Aufzeichnung beenden ich mit einer wenig Wartung der Seite für mich zu tun.

var currentConfig = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~/");
// Unprotect
ConfigurationSection section = currentConfig.GetSection("MyCustomSection");
if (section.SectionInformation.IsProtected)
{
   section.SectionInformation.UnprotectSection();
   currentConfig.Save();
}

// Protect
if (!section.SectionInformation.IsProtected)
{
     section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
     currentConfig.Save();
}

Caveats: Ihr Prozess wird Schreibzugriff auf die Konfigurationsdateien müssen geändert werden. Sie werden einen Weg autorisieren möchten, die diese ausführen können. Sie werden im Allgemeinen neu starten, wenn Sie speichern.

Die Antwort, die als richtig dargestellt wird, ist korrekt. Ich wollte einen Kommentar hinzufügen, aber konnte nicht, weil das ist zu lang ein Kommentar (Beispielconfig Einträge).

Der Abschnitt Name den vollständigen Namen der Baugruppen verwenden sollten. Eine Runtime-Assembly Qualifikation nicht mit aspnet_regiis.exe arbeiten.

Das funktioniert:

<configSections>
  <section name="securityConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Security.Configuration.SecuritySettings, Microsoft.Practices.EnterpriseLibrary.Security, Version=5.0.414.0, Culture=neutral, PublicKeyToken=9c844884b2afcb9e" />
</configSections>

Aber das funktioniert nicht:

<configSections>
  <section name="securityConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Security.Configuration.SecuritySettings, Microsoft.Practices.EnterpriseLibrary.Security" />
</configSections>

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
     <qualifyAssembly partialName="Microsoft.Practices.EnterpriseLibrary.Security" fullName="Microsoft.Practices.EnterpriseLibrary.Security, Version=5.0.414.0, Culture=neutral, PublicKeyToken=9c844884b2afcb9e" />
    </assemblyBinding>
</runtime>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top