.NET 4,0 приложения на сетевом ресурсе вызывает SecurityException

Сегодня я испытал странную проблему при попытке удаленно отладить приложение, созданное для.NET 4,0 времени выполнения.

Приложение находится на сетевом ресурсе и выполняемый удаленной машиной. Однако сбои приложения каждый раз во время загрузки из-за SecurityException, повышенного разрешением, требуют в Системе. Конфигурация. ConfigurationManager. GetSection () метод. Я не проверил, вызывают ли другие требования разрешения в библиотеке базовых классов также исключение безопасности, но во всех случаях этого не должно происходить с новым CLR.

Приложение работает в полном доверии (проверил его при отладке, и как обычно это должно быть всегда верно для приложений интранет в CLR 4.0), таким образом, я невежествен, как спрос на разрешение может вызвать исключение в этом случае. При создании против 3,5 времен выполнения SP1 (который сначала представил полное доверие для сетевых общих приложений по умолчанию), выполнения everythings как ожидалось.

Я вставил пример кода ниже. Любая справка значительно ценится.

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

И файл 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>
10
задан George Stocker 5 May 2010 в 16:42
поделиться

2 ответа

Попробуйте сначала загрузить конфигурацию и открыть свой раздел на этом:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
AssetsSection configSection = (AssetsSection)config.GetSection("test/assets");

Я столкнулся с той же проблемой с .NET 4, и это работает для меня.

17
ответ дан 3 December 2019 в 18:32
поделиться

Я предполагаю здесь, но подозреваю это ваш файл конфигурации, которому не доверяют.

В вашем случае ваш файл конфигурации ссылается на тип ConsoleApplication1.AssetsSection , у которого нет строгого имени, которое можно было бы использовать в качестве доказательства.

Не могли бы вы предоставить более подробную информацию и точное сообщение об ошибке.

-1
ответ дан 3 December 2019 в 18:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: