ComVisible
regasm /codebase "assembly_path"
MyAssemblyName.dll.config),它们位于程序集的文件夹
ConfigurationManager.AppSettings["SettingName"]
CreateObject("...")
ConfigurationManager.AppSettings["SettingName"]返回null。看起来程序集没有看到配置文件。我该怎么做才能使它行得通?
发布于 2011-12-28 13:43:27
正如Komyg所说,一种可能的方法是直接读取配置文件,而不是使用ConfigurationManager的嵌入式行为。对于那些有同样问题的人来说:而不是
ConfigurationManager.AppSettings["SettingName"]您可以使用:
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的另一个特性(比如appSetting的file属性),如果您要使用XPath或类似的东西,这些特性将不可用。
发布于 2012-06-05 09:40:44
我也有同样的问题。需要一个/codebase文件的资源管理器外壳扩展(Com可见,通过regasm /codebase注册)既找不到也找不到连接字符串,也找不到设置。
我所做的:
string assemblyLoc = GetType().Assembly.Location;
string configName = assemblyLoc + ".config";
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", configName);这假设配置文件存储在与程序集相同的目录中。
https://stackoverflow.com/questions/8656317
复制相似问题