Дозвуковой доступ к строкам подключения App.Config из ссылочной DLL в скрипте Powershell

У меня есть DLL, которая содержит Subsonic-сгенерированный и дополненный код для доступа к модели данных. На самом деле, это объединенная DLL этой оригинальной сборки, самой Subsonic и нескольких других DLL-библиотек, на которые есть ссылки, в одну сборку под названием "PowershellDataAccess.dll. Однако следует отметить, что я также пробовал ссылаться на каждую сборку отдельно в сценарий, и это тоже не работает.

Затем я пытаюсь использовать объекты и методы в этой сборке. В этом случае я обращаюсь к классу, который использует Subsonic для загрузки группы записей и создает индекс Lucene из этих записей.

Проблема, с которой я сталкиваюсь, заключается в том, что вызов метода Subsonic для извлечения данных из базы данных говорит, что он не может найти строку подключения. Я указываю AppDomain на соответствующий файл конфигурации, который содержит эту строку подключения, по имени.

Вот сценарий.

$ScriptDir = Get-Location
[System.IO.Directory]::SetCurrentDirectory($ScriptDir)
[Reflection.Assembly]::LoadFrom("PowershellDataAccess.dll")
[System.AppDomain]::CurrentDomain.SetData("APP_CONFIG_FILE", "$ScriptDir\App.config")
$indexer = New-Object LuceneIndexingEngine.LuceneIndexGenerator
$indexer.GeneratePageTemplateIndex("PageTemplateIndex");

Я копался в самой Subsonic, и следующая строка в Subsonic - это то, что ищет строку подключения и выдает исключение:

ConfigurationManager.ConnectionStrings[connectionStringName]

Итак, из любопытства я создал сборку с одним классом, который имеет единственное свойство, которое просто запускает эту строку для получения имени строки подключения.

Я создал ps1, который вызвал эту сборку и поразил это свойство. Этот прототип может найти строку подключения просто отлично.

У кого-нибудь есть идеи, почему часть Subsonic не может видеть строки подключения?

1 ответ

Вы добавили сборку System.Configuration в сеанс PowerShell? Следующие работы для меня:

PS> gc .\app.config

<?xml version='1.0' encoding='utf-8'?>
<configuration>
    <connectionStrings>
      <clear />
      <add name="Name"
           providerName="System.Data.ProviderName"
           connectionString="Valid Connection String;" />
    </connectionStrings>
</configuration>

PS> [appdomain]::CurrentDomain.SetData("APP_CONFIG_FILE", "$home\app.config")
PS> Add-Type -AssemblyName System.Configuration
PS> [Configuration.ConfigurationManager]::ConnectionStrings['Name']

Name                    : Name
ConnectionString        : Valid Connection String;
...
Другие вопросы по тегам