.NET 4.0-Anwendung auf Netzwerkfreigabe verursacht SecurityException

Heute trat ein seltsames Problem auf, als ich versuchte, eine für die .NET 4.0-Laufzeit erstellte Anwendung remote zu debuggen.

Die Anwendung befindet sich auf einer Netzwerkfreigabe und wird von einem Remotecomputer ausgeführt. Die Anwendung stürzt jedoch jedes Mal beim Laden aufgrund einer SecurityException ab, die durch eine Berechtigungsanforderung in der System.Configuration.ConfigurationManager.GetSection () -Methode ausgelöst wird. Ich habe nicht geprüft, ob andere Berechtigungsanforderungen in der Basisklassenbibliothek ebenfalls eine Sicherheitsausnahme verursachen, aber in allen Fällen sollte dies mit der neuen CLR nicht passieren.

Die Anwendung wird in voller Vertrauenswürdigkeit ausgeführt (während des Debuggens überprüft, und dies muss wie üblich immer für Intranetanwendungen in CLR 4.0 zutreffen). Daher ist mir nicht klar, wie eine Berechtigungsanforderung in diesem Fall eine Ausnahme verursachen kann. Bei Verwendung der 3.5 SP1-Laufzeitumgebung (die zum ersten Mal die volle Vertrauenswürdigkeit für über das Netzwerk freigegebene Apps eingeführt hat) wird alles wie erwartet ausgeführt.

Ich habe den folgenden Beispielcode eingefügt. Jede Hilfe wird sehr geschätzt.

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

Und die App.config-Datei;

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

Antworten auf die Frage(8)

Ihre Antwort auf die Frage