我正在实例化一个ConfigurationManager.AppSettings COM对象,并希望更新.NET和ConfigurationManager.ConnectionStrings属性。我注意到,即使在程序集配置文件中有设置,例如"ComLib.dll.config",这些设置在运行时是不可用的。
使用以下命令调用从ASP经典网页创建COM对象:
Dim COMObject
Set COMObject = Server.CreateObject("COMAPI.COMObject")
我使用我的VS2010调试器进入.NET COM对象(COMAPI.COMObject)的构造函数。这就是我检查ConfigurationManager以检查所加载的内容的要点。
"Assembly.GetExecutingAssembly"和"Assembly.GetCallingAssembly"都有相同的结果,即到"ComLib.dll"程序集注册位置的完整路径。这正是我所期望的。这个位置也有"ComLib.dll.config"文件,它没有进入ConfigurationManager.
当我试图使用以下命令清除AppSettings时,会出现异常:
ConfigurationManager.AppSettings.Clear();
例外是:“服务器对象: 006~ASP 0177~Server.CreateObject Failed~80131902"
我的想法是,上述例外是ASP经典解释"AppSettings是只读的“,但我不是百分之百肯定。
接下来,我将加载"ComLib.dll.config"文件,然后运行每个AppSettings项,将它们添加到ConfigurationManager.AppSettings集中,但这也会导致异常:"Server object: 006~ASP 0177~Server.CreateObject Failed~80131902"。
我在.NET COM对象中使用的代码如下:
Assembly comApiAssembly = Assembly.GetExecutingAssembly();
string comApiLocation = comApiAssembly.Location;
configuration = null;
configuration = ConfigurationManager.OpenExeConfiguration(comApiLocation);
var toLoadEnumberable = configuration.AppSettings.Settings.GetEnumerator();
while (toLoadEnumberable.MoveNext())
{
var current = (KeyValueConfigurationElement)toLoadEnumberable.Current;
ConfigurationManager.AppSettings.Add(current.Key, current.Value);
}
我需要ConfigurationManager中的配置信息,因为这个.NET COM LIB用于调用其他.NET程序集。其他.NET程序集需要配置。
提前谢谢你。
发布于 2011-11-03 10:40:53
我得到了一些MSDN论坛的帮助。
基本上,我不使用. ConfigurationManager.AppSettings /..Add/..Remove,而是访问一个设置(不管是否存在),并为该键设置一个值:
ConfigurationManager.AppSettings["Key"] = "KeyValue";
这将更新ConfigurationManager.AppSettings。这是很棒的,因为当我访问应用程序的某些部分,这些部分超出了最初的“access”-> "COM“调用的范围时,我仍然能够从ConfigurationManager获得应用程序设置。
尽管如此,我仍然不知道如何编辑ConfigurationManager.ConnectionStrings。
如果我尝试ConnectionStrings上的.Clear / .Add / .Remove,就会出现异常。对这个问题有什么想法吗?
如果我找到更多的信息,我会更新这个答案。
作为一个更新:为了绕过没有我的设置的ConnectionString设置,我实现了Unity框架。我使用静态实例来承载IoC容器,并以这种方式解析我的实例。
通过这样做,我可以在COM API中注册针对类类型的接口,这意味着我可以传递连接字符串设置,通过构造器注入,我想要解析实例,因为连接字符串设置在作用域中。
https://stackoverflow.com/questions/7928797
复制相似问题