2010-03-28 5 views
2

Я пытаюсь получить данные из app.config, и я всегда получаю нуль. App.config здесь:Не удается прочитать app.config, почему?

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <connectionStrings> 
    <add name="ExplorerContext" connectionString="metadata=res://*/ExplorerData.csdl|res://*/ExplorerData.ssdl|res://*/ExplorerData.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=MYT\SQLEXPRESS;Initial Catalog=Explorer;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 
</configuration> 

Может кто-нибудь объяснить, что случилось, почему я не могу получить значения, System.Configuration.ConfigurationManager.AppSettings.Count всегда 0

Я FOGOT, чтобы указать, что я использую библиотеку классов, что я m пытается проверить с помощью проекта NUnit. И эта библиотека классов вызывает еще один проект (библиотека классов), который использует ADO.NET Entity Project.

+0

Я знаю, что это старый, если ни один из ответов здесь не поможет: http://stackoverflow.com/questions/4280970/configurationmanager-appsettings-getting-null –

ответ

7

Вы не используете AppSettings! Проверьте вместо этого ConfigurationManager.ConnectionStrings.

1

У вас нет AppSettings, объявленных в вашем файле конфигурации. Если вы пытаетесь получить строки подключения, то вы должны использовать:

var connectionString = ConfigurationManager.ConnectionStrings["ExplorerContext"].ConnectionString; 

EDIT Если вы используете NUnit, вы можете поставить конфигурационный файл до тех пор, как он назван в честь DLL. Например, если DLL называется Foo.dll, тогда файл конфигурации должен иметь имя Foo.dll.config. Visual Studio не сделает этого для вас для DLL. Вы должны создать файл вручную, и вы должны убедиться, что он попал в соответствующую папку bin.

См. NUnit Configuration Files для получения дополнительной информации.

+0

О, мой! Когда я использую эту конструкцию я вижу какую-то странную строку соединения, я не имею в моем app.config: System.Configuration.ConfigurationManager.ConnectionStrings [0] {источник данных = \ SQLEXPRESS Интегрированное ... . Имя: "LocalSqlServer" ProviderName: "System.Data.SqlClient" Я не могу себе представить, где он? – mimic

+1

Я не указал ConnectionStrings [0], я потянул его по имени, используя имя в вашем OP (т. Е. ConnectionStrings ["ExplorerContext"]. По умолчанию ASP.NET добавляет строку подключения в файл machine.config для LocalSqlServer которые вы можете игнорировать. – Thomas

+0

@ user46503: эта строка подключения к локальному SQL-серверу находится на вашем компьютере.config в глубине вашей системы ..... –

1

Я забыл указать, что я использую класс библиотеку, что я пытаюсь проверить используя проект NUnit. И эта библиотека классов вызывает еще один проект (класс ), который использует ADO.NET Entity Project.

Вы должны поместить информацию о конфигурации в основного приложения - приложение с помощью/позвонив класс проект библиотеки с моделью EF. Конфигурация .NET не обеспечивает поддержку уровня библиотеки классов app.config.

Итак, в тестовой среде главный тестовый жгут должен иметь эти записи в своем app.config.

Если вы настаиваете, что ваш класс библиотеки сборка имеет свой собственный конфиг - проверить Jon Рист-х Cracking the Mysteries of .NET 2.0 Configuration, где он объясняет в деталях, как использовать ConfigurationManager.OpenExeConfiguration вызов, чтобы открыть произвольный * .config файл и использовать его в .NET 2.0 системы конфигурации. Он работает, но это больше работает, и я бы не рекомендовал его.

+0

Этот помог мне. Спасибо за хорошую ссылку. –

Смежные вопросы