Subsonic Access To App.Config Connection Strings From Referenced DLL in Powershell Script

纵然是瞬间 提交于 2019-12-02 00:45:29

问题


I've got a DLL that contains Subsonic-generated and augmented code to access a data model. Actually, it is a merged DLL of that original assembly, Subsonic itself and a few other referenced DLL's into a single assembly, called "PowershellDataAccess.dll. However, it should be noted that I've also tried this referencing each assembly individually in the script as well and that doesn't work either.

I am then attempting to use the objects and methods in that assembly. In this case, I'm accessing a class that uses Subsonic to load a bunch of records and creates a Lucene index from those records.

The problem I'm running into is that the call into the Subsonic method to retrieve data from the database says it can't find the connection string. I'm pointing the AppDomain at the appropriate config file which does contain that connection string, by name.

Here's the script.

$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");

I went digging into Subsonic itself and the following line in Subsonic is what's looking for the connection string and throwing the exception:

ConfigurationManager.ConnectionStrings[connectionStringName]

So, out of curiosity, I created an assembly with a single class that has a single property that just runs that one line to retrieve the connection string name.

I created a ps1 that called that assembly and hit that property. That prototype can find the connection string just fine.

Anyone have any idea why Subsonic's portion can't seem to see the connection strings?


回答1:


Did you add the System.Configuration assembly to your PowerShell session? The following works for me:

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;
...


来源:https://stackoverflow.com/questions/2789920/subsonic-access-to-app-config-connection-strings-from-referenced-dll-in-powershe

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!