Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Powershell脚本中引用的DLL亚音速访问App.Config连接字符串_Powershell_Subsonic - Fatal编程技术网

从Powershell脚本中引用的DLL亚音速访问App.Config连接字符串

从Powershell脚本中引用的DLL亚音速访问App.Config连接字符串,powershell,subsonic,Powershell,Subsonic,我有一个DLL,其中包含亚音速生成和扩充的代码,用于访问数据模型。实际上,它是原始程序集的一个合并DLL,亚音速本身和其他几个被引用的DLL合并成一个程序集,称为“PowershellDataAccess.DLL”。但是,应该注意的是,我也尝试过在脚本中单独引用每个程序集,这也不起作用 然后,我尝试使用该程序集中的对象和方法。在本例中,我正在访问一个类,该类使用亚音速加载一组记录,并从这些记录创建Lucene索引 我遇到的问题是,对从数据库检索数据的亚音速方法的调用表明它找不到连接字符串。我将A

我有一个DLL,其中包含亚音速生成和扩充的代码,用于访问数据模型。实际上,它是原始程序集的一个合并DLL,亚音速本身和其他几个被引用的DLL合并成一个程序集,称为“PowershellDataAccess.DLL”。但是,应该注意的是,我也尝试过在脚本中单独引用每个程序集,这也不起作用

然后,我尝试使用该程序集中的对象和方法。在本例中,我正在访问一个类,该类使用亚音速加载一组记录,并从这些记录创建Lucene索引

我遇到的问题是,对从数据库检索数据的亚音速方法的调用表明它找不到连接字符串。我将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");
我深入研究了亚音速本身,亚音速中的以下行是查找连接字符串并引发异常的内容:

ConfigurationManager.ConnectionStrings[connectionStringName]
因此,出于好奇,我创建了一个具有单个类的程序集,该类只有一个属性,该属性只运行这一行来检索连接字符串名称

我创建了一个ps1,它调用该程序集并命中该属性。该原型可以很好地找到连接字符串


有人知道为什么亚音速部分似乎看不到连接字符串吗?

您是否已将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;
...
PS>gc.\app.config
PS>[appdomain]::CurrentDomain.SetData(“APP\u CONFIG\u FILE”,“$home\APP.CONFIG”)
PS>添加类型-AssemblyName系统配置
PS>[Configuration.ConfigurationManager]::连接字符串['Name']
姓名:姓名
ConnectionString:有效的连接字符串;
...

我尝试过其他原型,其中我的代码通过ConfigurationManager跟踪连接字符串。这些都可以。只有当我将控制权交给亚音速代码,亚音速调用ConfigurationManager时,配置似乎消失了。在调用之前,您是否将System.Configuration.dll程序集加载到PowerShell中亚音速生成的代码?如果是,那么您能否列出错误信息,例如
$error[0]| fl*-force