我正在实例化.NET COM对象,并希望更新 ConfigurationManager.AppSettings 和 ConfigurationManager.ConnectionStrings 属性。 我注意到即使我在程序集配置文件中有设置,例如“ComLib.dll.config”这些设置在运行时不可用。
我打电话使用以下内容从ASP Classic网页创建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失败~80131902”
我的想法是,上面的例外是ASP Classic对“AppSettings是只读的”的解释,但我不是百分百肯定。
我要移动的是加载“ComLib.dll.config”文件,然后运行每个 AppSettings 项目,将它们添加到 ConfigurationManager .AppSettings 设置但也会导致异常:“服务器对象:006~ASP 0177~Server.CreateObject失败~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程序集需要配置。
提前谢谢。
答案 0 :(得分:2)
我能够得到一些help from the MSDN forums。
基本上不是在ConfigurationManager.AppSettings上使用.Clear / .Add / .Remove而是访问一个设置,如果它存在与否,并为该键设置一个值:
ConfigurationManager.AppSettings["Key"] = "KeyValue";
这会更新ConfigurationManager.AppSettings。这很好,因为当我访问我的应用程序的部分超出了最初的“ASP Classic” - > “COM API”调用我仍然可以从ConfigurationManager获取应用程序设置。
说完这些,我仍然不知道如何编辑ConfigurationManager.ConnectionStrings。
如果我在 ConnectionStrings 上尝试。清除 / 。添加 / 。删除,则会发生异常即可。关于这个问题的任何想法?
如果我找到更多信息,我会更新此答案。
作为更新:为了解决没有设置的ConnectionString设置,我实现了Unity Container IoC框架。我使用静态实例来托管IoC容器并以这种方式解析我的实例。
通过这样做我可以在COM API上注册我的接口类类,这意味着我可以通过构造函数注入传递连接字符串设置,我希望解析实例,因为连接字符串设置在范围内。