Дозвуковой доступ к строкам подключения 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;
...