La aplicación .NET 4.0 en el recurso compartido de red provoca SecurityException

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 reside en una red compartida y es ejecutada por una máquina remota. 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 verificado si otras demandas de permisos en la biblioteca de clases base también causan una excepción de seguridad, pero en todos los casos esto no debería estar sucediendo con el nuevo CLR.

La aplicación se ejecuta con plena confianza (lo comprobó durante la depuración y, como de costumbre, esto siempre debe ser cierto para las aplicaciones de intranet en CLR 4.0), por lo que no tengo idea de cómo una demanda de permisos puede causar una excepción en este caso. Cuando se compila contra el tiempo de ejecución de 3.5 SP1 (que introdujo por primera vez la plena confianza para las aplicaciones compartidas de red de forma predeterminada) todo funciona como se esperaba.

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

Respuestas a la pregunta(4)

Su respuesta a la pregunta