首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ComVisible .NET程序集与app.config

ComVisible .NET程序集与app.config
EN

Stack Overflow用户
提问于 2011-12-28 13:10:52
回答 2查看 3.8K关注 0票数 5

ComVisible

  • This

  • i有一些类标记为.NET程序集,这些类被注册为regasm /codebase "assembly_path"

  • I with app.config name (实际上- MyAssemblyName.dll.config),它们位于程序集的文件夹

  • i通过ConfigurationManager.AppSettings["SettingName"]

  • I COM文件访问appSettings中,该文件通过创建CreateObject("...")

  • When对象来创建COM对象(从VBScript创建),ConfigurationManager.AppSettings["SettingName"]返回null。看起来程序集没有看到配置文件。

我该怎么做才能使它行得通?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-28 13:43:27

正如Komyg所说,一种可能的方法是直接读取配置文件,而不是使用ConfigurationManager的嵌入式行为。对于那些有同样问题的人来说:而不是

代码语言:javascript
复制
ConfigurationManager.AppSettings["SettingName"]

您可以使用:

代码语言:javascript
复制
var _setting = ConfigurationManager.AppSettings["SettingName"];
// If we didn't find setting, try to load it from current dll's config file
if (string.IsNullOrEmpty(_setting))
{
    var filename = Assembly.GetExecutingAssembly().Location;
    var configuration = ConfigurationManager.OpenExeConfiguration(filename);
    if (configuration != null)
        _setting = configuration.AppSettings.Settings["SettingName"].Value;
}

这样,您将始终使用文件YourAssemblyName.dll.config中的读取设置,该文件位于程序集的文件夹中。它还允许您使用app.config的另一个特性(比如appSettingfile属性),如果您要使用XPath或类似的东西,这些特性将不可用。

票数 5
EN

Stack Overflow用户

发布于 2012-06-05 09:40:44

我也有同样的问题。需要一个/codebase文件的资源管理器外壳扩展(Com可见,通过regasm /codebase注册)既找不到也找不到连接字符串,也找不到设置。

我所做的:

代码语言:javascript
复制
string assemblyLoc          = GetType().Assembly.Location;
string configName           = assemblyLoc + ".config";
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", configName);

这假设配置文件存储在与程序集相同的目录中。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8656317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档