Сегодня у меня возникла странная проблема при попытке удаленной отладки приложения, созданного для среды выполнения .NET 4.0.
Приложение находится на общем сетевом ресурсе и выполняется на удаленной машине. Однако приложение каждый раз во время загрузки аварийно завершает работу из-за исключительной ситуации SecurityException, вызванной требованием разрешения в методе System.Configuration.ConfigurationManager.GetSection (). Я не проверял, вызывают ли другие требования разрешения в библиотеке базовых классов также исключение безопасности, но во всех случаях это не должно происходить с новым CLR.
Приложение работает с полным доверием (проверил его во время отладки, и, как обычно, это должно быть всегда верно для приложений интрасети в CLR 4.0), поэтому я не знаю, как требование разрешения может вызвать исключение в этом случае. При построении в среде выполнения 3.5 с пакетом обновления 1 (по умолчанию впервые введено полное доверие к сетевым общим приложениям) все работает как положено.
Я вставил пример кода ниже. Любая помощь с благодарностью.
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>