Как получить доступ к моему app.config из C # Interactive? - PullRequest
0 голосов
/ 18 декабря 2018

Я инициализировал интерактивный элемент с проектом из контекстного меню моего проекта.Я тестирую функцию в C # интерактив, которая должна прочитать мой файл app.config, чтобы получить строку подключения.Я получил следующую ошибку:

Не удалось найти строку подключения с именем 'ccnName' в файле конфигурации приложения.

Когда я использую следующий код, я получаюнулевое значениеЯ предполагаю, что это потому, что он не читает app.config моего проекта.

ConfigurationManager.ConnectionStrings["cnnName"]

Это единственная строка подключения, которая имеет стандартный app.config:

[datasource =. \ SQLEXPRESS; Интегрированная безопасность = SSPI; AttachDBFilename = | DataDirectory | aspnetdb.mdf; Экземпляр пользователя = true]

В этом посте за 2012 год с той же темой,один инженер, участвующий в этом проекте, сказал, что эта опция недоступна.Я надеюсь, что он будет доступен в 2018 году

Итак, в настоящее время, как я могу загрузить app.config, который я хочу?

1 Ответ

0 голосов
/ 19 декабря 2018

«Конструктор» был волшебным словом.Это может не помочь в вашем случае, так как вы нашли решение, но это может быть полезно для других в той же ситуации.

Если вы вводите объект System.Configuration.Configuration в класс, у вас нетполагаться на статические свойства ConfigurationManager.

public class LibraryClass
{
    private Configuration _configuration;

    public LibraryClass(Configuration configuration)
    {
        _configuration = configuration ?? throw new ArgumentNullException(nameof(configuration));
    }

    public void FunctionUnderTest()
    {
        string connectionString = _configuration.ConnectionStrings.ConnectionStrings["cnnName"].ConnectionString;
        // Connect to the database as you normally would.
    }
}

В консольном / графическом приложении и модульных тестах загрузите его так, чтобы использовать {что-нибудь} .config:

Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
// Register 'configuration' as a singleton using the container of your choice.

В веб-приложении загрузите его следующим образом, чтобы использовать web.config:

Configuration configuration = WebConfigurationManager.OpenWebConfiguration("~/Web.config");
// Register 'configuration' as a singleton using the container of your choice.

Чтобы использовать его в C # Interactive, загрузите его с помощью первого метода и предоставьте зависимость классу напрямую:

#r "System.Configuration"

Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(
    new ExeconfigurationFileMap() { ExeConfigFilename = @"path\to\Arbitrary.config" },
    ConfigurationUserLevel.None);
var lib = new LibraryClass(configuration);
lib.FunctionUnderTest();

Обратите внимание, что свойства раздела имеют дополнительный уровень по сравнению с тем, что вы обычно ожидаете.Я думаю, что это как-то связано с тем, как статические свойства ConfigurationManager работают с экземпляром Configuration.

...