Я пытаюсь получить доступ к connectionStrings
из файла конфигурации. Код - это ASP.NET + С#. Я добавил System.Configuration
для ссылки, а также упоминался при использовании. Но все же он не согласился бы на сборку.
Я использую VSTS 2008. Любая идея, что может быть причиной?
Еще одна странная вещь - имя сборки, показанное как "System.configuration", в нижнем регистре c, а не как имена отображаются для других сборок системы.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
namespace Utility
{
public class CommonVariables
{
public static String ConnectionString
{
get { return ConfigurationManager.ConnectionStrings["EmployeeEntities"].ConnectionString; }
}
}
}
Config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="qbankEntities" connectionString="metadata=res://*/qbankModel.csdl|res://*/qbankModel.ssdl|res://*/qbankModel.msl;provider=System.Data.SqlClient;provider connection string="Data Source=localhost;Initial Catalog=qbank;Persist Security Info=True;User ID=**;Password=****;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
Не обязательно использовать пространство имен System.Configuration
. Вы также должны добавить ссылку на сборку System.Configuration.dll
,
System.Configuration
.Это будет работать точно.
Также для NameValueCollection
вам нужно написать:
using System.Collections.Specialized;
В своем проекте щелкните правой кнопкой мыши ссылку "Добавить ссылку..." на вкладке .NET, найдите имя компонента System.Configuration
и нажмите "ОК".
using System.Configuration
сообщает компилятору /IntelliSense искать в этом пространстве имен для любых классов, которые вы используете. В противном случае вам нужно будет использовать полное имя (System.Configuration.ConfigurationManager
) каждый раз. Но если вы не добавите ссылку, это пространство имен/класс не будет найдено нигде.
Обратите внимание, что DLL может иметь любое пространство имен, поэтому файл System.Configuration.dll
может теоретически иметь пространство имен Some.Random.Name
. Для ясности/согласованности они обычно одинаковы, но есть исключения.
Добавление этого ответа, поскольку ни одно из предлагаемых решений не работает для меня.
- Щелкните правой кнопкой мыши по ссылке, чтобы добавить ссылку.
- Перейдите на вкладку Ассемблирование
- Поиск 'System.Configuration'
- Нажмите "ОК".
Я получил лучшее решение для выпуска configurationmanager does not exist in the current context
.
Для прочитанной строки подключения из web.config
нам нужно использовать класс ConfigurationManager
и его метод. Если вы хотите использовать, вам нужно добавить пространство имен, используя System.Configuration
;
Хотя вы использовали это пространство имен, когда вы пытаетесь использовать класс ConfigurationManager
, тогда система показывает ошибку "Configurationmanager не существует в текущем контексте".
Чтобы решить эту проблему:
ConfigurationManager.ConnectionStrings["ConnectionSql"].ConnectionString;
Если вы получаете много предупреждений (в моем случае 64 в решении!), например
CS0618: "ConfigurationSettings.AppSettings" устарел: "Этот метод устарел, он был заменен на System.Configuration! System.Configuration.ConfigurationManager.AppSettings"
потому что вы обновляете старый проект, вы можете сэкономить много времени следующим образом:
System.Configuration
в качестве ссылки на раздел Ссылки.Добавьте следующие два оператора using
в начало каждого файла класса (.cs
):
using System.Configuration;
using ConfigurationSettings = System.Configuration.ConfigurationManager;
В результате этого изменения все события
ConfigurationSettings.AppSettings["mySetting"]
теперь обратится к правильному диспетчеру конфигурации, больше не относится к устаревшему, и все предупреждения CS0618 немедленно исчезнут.
Конечно, имейте в виду, что это быстрый хак. В долгосрочной перспективе вам следует рассмотреть возможность реорганизации кода.
Вы уверены, что добавили ссылку на сборку .NET, а не что-то еще? Я удалю вашу ссылку, а затем попробую повторно добавить ее, убедившись, что вы выбрали вкладку .NET в диалоговом окне диалога Visual Studio - последняя версия должна быть 2.0.0.0 в GAC.
Для проверки работоспособности попробуйте создать новый проект веб-приложений, откройте код для страницы Default.aspx. Добавьте строку в Page_Load для доступа к вашей строке подключения.
Он должен иметь значение System.Configuration, добавленное по умолчанию. Вы также должны увидеть оператор using в верхней части вашего файла кода.
Мой код за файлом теперь выглядит так и компилируется без проблем.
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
namespace WebApplication1
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string connString = ConfigurationManager.ConnectionStrings["MyConnectionStringName"].ConnectionString;
}
}
}
Это предполагает, что у меня есть строка подключения в моем web.config с именем, равным "MyConnectionStringName", например...
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="MyConnectionStringName"
connectionString="Data Source=.;Initial Catalog=MyDatabase;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
Да, это элементарно, я знаю. Но если у вас нет лучших идей, иногда это помогает проверить что-то действительно простое, что вы знаете, должно работать.
Если этот код находится в отдельном проекте, например, в проекте библиотеки. Не используйте forgeet для добавления ссылки на system.configuration.
Чтобы решить эту проблему, перейдите в Обозреватель решений и щелкните правой кнопкой мыши ссылку и нажмите ссылку на ссылку и выберите .net и найдите system.configuration, выберите команду ok
Вы также можете получить эту ошибку, если по ошибке добавить ссылку на другой, несвязанный проект. Проверьте, относится ли это к вам.