Hoy tuve un problema extraño al intentar depurar de forma remota una aplicación creada para el tiempo de ejecución de .NET 4.0.. La aplicación .NET 4.0 en el recurso compartido de red causa SecurityException
La aplicación reside en un recurso compartido de red y la ejecuta un equipo remoto. Sin embargo, la aplicación se bloquea cada vez durante la carga debido a una SecurityException generada por una demanda de permisos en el método System.Configuration.ConfigurationManager.GetSection(). No he comprobado si otras demandas de permisos en la biblioteca de la clase base también causan una excepción de seguridad, pero en todos los casos esto no debería estar ocurriendo con el nuevo CLR.
La aplicación se ejecuta con plena confianza (comprobada durante la depuración y, como siempre, debe ser así para las aplicaciones de intranet en CLR 4.0), así que no tengo idea de cómo una solicitud de permiso puede causar una excepción en este caso. Cuando se compila con el motor de tiempo de ejecución 3.5 SP1 (que introdujo por primera vez la confianza total para las aplicaciones compartidas de red de forma predeterminada), todo funciona como se espera.
He pegado el código de muestra a continuación. Cualquier ayuda es muy apreciada.
using System;
using System.Configuration;
namespace ConsoleApplication1
{
public sealed class AssetsSection : ConfigurationSection
{
private static readonly ConfigurationProperty s_propPath;
private static readonly ConfigurationPropertyCollection s_properties;
static AssetsSection()
{
s_propPath = new ConfigurationProperty("path", typeof(String));
s_properties = new ConfigurationPropertyCollection()
{
s_propPath
};
}
public static AssetsSection Get()
{
return (AssetsSection) ConfigurationManager.GetSection("test/assets");
}
protected override ConfigurationPropertyCollection Properties
{
get
{
return s_properties;
}
}
public String Path
{
get
{
return (String) base[s_propPath];
}
set
{
base[s_propPath] = value;
}
}
}
class Program
{
static void Main(String[] args)
{
Console.WriteLine(AssetsSection.Get().Path);
Console.ReadLine();
}
}
}
Y el archivo App.config;
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="test">
<section name="assets" type="ConsoleApplication1.AssetsSection, ConsoleApplication1"/>
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/>
</startup>
<test>
<assets path="..\Assets"/>
</test>
</configuration>
¿Por qué compila para .NET 4.0 pero le obliga a ejecutar una versión anterior de la CLR? –
Lo siento, pegué el archivo de configuración incorrecto de mi código de prueba. Edité la pregunta. Sin embargo, el problema sigue siendo, por supuesto. – David