Pregunta

Tengo una aplicación web con una sección de configuración personalizada.Que sección contiene información que'ld como para cifrar (tenía la esperanza de utilizar ASPNet_RegIIS en lugar de hacerlo yo mismo).

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>

La configuración del controlador funciona muy bien antes de intentar cifrar.Cuando trato de cifrar con:

aspnet_regiis -pef "MyCustomSection" c:\inetpub\wwwroot\MyWebsite -prov DataProtectionConfigurationProvider

Me sale un error:

El cifrado de la sección de configuración...Un error al crear el sección de configuración de controlador para MyCustomSection:No se pudo cargar el archivo o ensamblado 'MyAssembly' o uno de sus las dependencias.El sistema no puede encontrar el archivo especificado.(c:\inetpub\wwwroot\MyWebsite\web.config línea 5)

He probado con/sin que el proveedor configurado.Con/sin de la sección de grupos.Con/Sin haber empezado el sitio web antes de la mano.He intentado temporalmente poner mi ensamblado en la GAC para el registro.Yo también hice log4net sección sólo para probar algo que no era la mía, sin suerte.He ejecute el símbolo del sistema como Administrador.Alguna idea?O puede ASPNet_RegIIS simplemente no se utilizará para las secciones personalizadas?

Un tiro final después de ver MSDN cambiar el controlador de heredar de ConfigurationSection en lugar de implementar IConfigurationSectionHandler desde que era técnicamente obsoleto en 2.0 (la esperanza de que era algo con respecto a aspnet_regiis versión).Sin suerte.

Cualquier idea que me haga saber.Gracias!

¿Fue útil?

Solución

aspnet_regiis debe ser capaz de unir el ensamblaje. Se aplican las normas de obligado cumplimiento .net normales.

Me evitar esto mediante la creación de directorio llamado aspnet_regiis_bin en el mismo directorio que aspnet_regiis.exe y un archivo aspnet_regiis.exe.config con aspnet_regiis_bin como un camino privado como esto:

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

A continuación, copie los montajes que definen las secciones de configuración personalizada en aspnet_regiis_bin modo que aspnet_regiis puede encontrarlos.

Este procedimiento no requiere que los montajes que nombradas fuerte o en el GAC pero requiere jugar un poco en los directorios marco.

Otros consejos

Estoy utilizando una solución mediante el cual me temporarly comente el contenido del elemento configSections:

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

A continuación, puede ejecutar el cifrado usando aspnet_regiis -pef como de costumbre. Después de esto se ha quedado simplemente elimine la sección y su sitio está listo para funcionar.

Este es un truco total, pero no estoy seguro de que hay otra manera de hacerlo sin nombrar fuertemente a la asamblea que define su sección personalizada y GACifying (aunque usted ha mencionado que no funcionó, ya sea, y estoy no estoy seguro de por qué no lo haría). Desde aspnet_regiis carreras en la : \ Windows \ Microsoft.Net \ Framework \ carpeta (en Windows XP), puede copiar el archivo DLL que define su sección de configuración en el marco pertinente \ carpeta y, a continuación, se debería funcionar.

Para el registro, que terminó con una pequeña página de mantenimiento que hacer esto por mí.

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

Advertencias: Su proceso tendrá acceso de escritura a los archivos de configuración está modificando. Usted querrá alguna forma de autorizar que puede ejecutar este. Podrás general reiniciar el sitio web cuando se guarda.

La respuesta que se muestra como correcta es correcta. Quería añadir un comentario, pero no podía a causa esto es demasiado largo de un comentario (entradas de ejemplo de configuración).

El nombre de la sección debe utilizar el nombre completo de las asambleas. Una calificación de montaje en tiempo de ejecución no funciona con aspnet_regiis.exe.

Esto funciona:

<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>

Pero esto no funciona:

<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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top