gpt4 book ai didi

c# - 自定义配置部分 : Could not load file or assembly

转载 作者:IT王子 更新时间:2023-10-29 04:33:05 32 4
gpt4 key购买 nike

我很难尝试访问我的配置文件中的自定义配置部分。

正在从作为插件加载的 .dll 中读取配置文件。我使用 Configuration Section Designer 创建了配置和必要的代码VS 插件。

命名空间是“ImportConfiguration”。 ConfigurationSection 类是“ImportWorkflows”。该程序集是 ImportEPDMAaddin。

xml:

  <configSections>
<section name="importWorkflows" type="ImportConfiguration.ImportWorkflows, ImportEPDMAddin"/>
</configSections>

每当我尝试读取配置时,我都会收到错误:

为 importWorkflows 创建配置部分处理程序时发生错误:无法加载文件或程序集“ImportEPDMAaddin.dll”或其依赖项之一。系统找不到指定的文件。

dll 不会与可执行文件位于同一目录中,因为加载插件的软件会将 dll 及其依赖项放在自己的目录中。 (我无法控制。)

我将单例实例的代码编辑为以下内容:

string path = System.Reflection.Assembly.GetCallingAssembly().CodeBase;
path = path.Replace("file:///", "");
System.Configuration.Configuration configuration = System.Configuration.ConfigurationManager.OpenExeConfiguration(path);
return configuration.GetSection(ImportWorkflowsSectionName) as ImportConfiguration.ImportWorkflows;

我也尝试过使用一个简单的 NameValueFileSectionHandler,但我得到一个异常,说它无法加载文件或程序集“系统”。

我已经阅读了大量的博客文章和文章,听起来好像可以为 dll 读取配置文件,但我就是无法让它工作。有任何想法吗?谢谢。

最佳答案

不幸的是,您需要将 ImportEPDMAaddin 程序集驻留在与您的可执行文件相同的文件夹中,驻留在与您正在使用的 .Net 框架相关的 .Net 框架文件夹中(即 C :\Windows\Microsoft.NET\Framework\v2.0.50727),或者在全局程序集缓存中注册。

唯一的其他选择是,如果您知道包含配置处理程序的定义类的程序集的路径,您可以在没有引用的情况下加载它,如下所示:

//Class global
private Assembly configurationDefiningAssembly;

protected TConfig GetCustomConfig<TConfig>(string configDefiningAssemblyPath,
string configFilePath, string sectionName) where TConfig : ConfigurationSection
{
AppDomain.CurrentDomain.AssemblyResolve += new
ResolveEventHandler(ConfigResolveEventHandler);
configurationDefiningAssembly = Assembly.LoadFrom(configDefiningAssemblyPath);
var exeFileMap = new ExeConfigurationFileMap();
exeFileMap.ExeConfigFilename = configFilePath;
var customConfig = ConfigurationManager.OpenMappedExeConfiguration(exeFileMap,
ConfigurationUserLevel.None);
var returnConfig = customConfig.GetSection(sectionName) as TConfig;
AppDomain.CurrentDomain.AssemblyResolve -= ConfigResolveEventHandler;
return returnConfig;
}

protected Assembly ConfigResolveEventHandler(object sender, ResolveEventArgs args)
{
return configurationDefiningAssembly;
}

确保您处理了 AssemblyResolve 事件,因为没有它会抛出异常。

关于c# - 自定义配置部分 : Could not load file or assembly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1682681/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com