app.config 中的“无法加载类型”

Posted

技术标签:

【中文标题】app.config 中的“无法加载类型”【英文标题】:"Could not load type" from app.config 【发布时间】:2017-04-07 12:30:03 【问题描述】:

我继承了一个功能正常的程序,该程序目前可用作服务。该服务所做的只是调用另一个类中的方法,所以我正在尝试编写一个我可以运行的 winform 项目,以便我可以处理它。我已经复制并粘贴了 app.config 文件,并将项目名称更改为 servicetester,更改为新的非服务项目。我还从服务中复制了其他代码的各种代码,并且全部构建。当我尝试使用该行运行项目时收到以下消息

var connectionManagerDataSection = ConfigurationManager.GetSection("CustomConfigurationSection") as clsCustomConfigurationSection;

消息

An error occurred creating the configuration section handler for CustomConfigurationSection: Could not load type 'servicetester.Configuration.CustomConfigurationSect
ion' from assembly 'servicetester'. (D:\\thepath\\servicetester\\bin\\Debug\\servicetester.vshost.exe.Config line 4)"

内部异常

"System.TypeLoadException: Could not load type 'servicetester.Configuration.CustomConfigurationSection' from assembly 'servicetester'.
   at System.Configuration.TypeUtil.GetTypeWithReflectionPermission(IInternalConfigHost host, String typeString, Boolean throwOnError)
   at System.Configuration.RuntimeConfigurationRecord.RuntimeConfigurationFactory.Init(RuntimeConfigurationRecord configRecord, FactoryRecord factoryRecord)
   at System.Configuration.RuntimeConfigurationRecord.RuntimeConfigurationFactory.InitWithRestrictedPermissions(RuntimeConfigurationRecord configRecord, FactoryRecord factoryRecord)
   at System.Configuration.RuntimeConfigurationRecord.CreateSectionFactory(FactoryRecord factoryRecord)
   at System.Configuration.BaseConfigurationRecord.FindAndEnsureFactoryRecord(String configKey, Boolean& isRootDeclaredHere)

这是app.config,除了项目名称与原服务项目相同

<?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
      <section name="CustomConfigurationSection" type="servicetester.Configuration.CustomConfigurationSection, servicetester" />
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
          <section name="Proj.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        </sectionGroup>
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <CustomConfigurationSection>
    <EwsConfiguration username="a@b.com" password="letmein" version="2" emailStoreLocation="\\serverpath\" url="https://emailplace" subscriptionConnectionLifetime="15" debug="true"/>
  </CustomConfigurationSection>
  <applicationSettings>
    <Proj.Properties.Settings>
      <setting name="Proj_Email_Log" serializeAs="String">
        <value>http://path</value>
      </setting>
    </Proj.Properties.Settings>
  </applicationSettings>
</configuration>

没有通往 C:\Users\MYUSERNAME\AppData\Local\MYCOMPANY\MYAPP.exe_Url_longnastyhash9982749827349879\1.0.0.0\user.config 或我读过的任何其他地方尝试删除

我已经清理并重建了所有东西

在 .NET 框架方面,winform 应用程序与服务的版本相同 这些是谷歌所说的最常见的事情。还有其他想法吗? 谢谢

【问题讨论】:

无论 Configuration.CustomConfigurationSection 在哪里,servicetester 项目都无法访问它。您可能缺少包含,或者您可能需要将该类复制到 servicetester 项目。 我已经复制了一遍并且(希望)复制了所有必要的。 您找到解决方案了吗?我也遇到了同样的问题。 我删除了项目,添加了一个新项目,从头开始构建所有内容,忽略了现有代码。新测试项目中的代码与旧测试项目相同,但可以正常工作。我认为这可能与项目文件/设置/属性有关,我以为我两次都选择了所有相同的选项,但我不知道。我还创建了一个第一次工作的控制台项目。也许试试看。 【参考方案1】:

您需要节组的名称和自定义节。

var confSection = (CustomSection)System.Configuration.ConfigurationManager.GetSection("MCustomConfigurationSection/applicationSettings");

这里有带有示例 customAppSetting 和 sectionGroup 的示例配置

应用程序配置

    <?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionGroup name="CustomConfigurationSection">
      <section name="customAppSettings" type="System.Configuration.AppSettingsSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </sectionGroup>
  </configSections>
  <customAppSettingsGroup>
    <customAppSettings>
      <add key="Key1" value="val1"/>
      <add key="Key2" value="val2"/>
    </customAppSettings>
  </customAppSettingsGroup>
</configuration>

用法:

var section = ConfigurationManager.GetSection("CustomConfigurationSection/customAppSettings") as NameValueCollection;
var val1 = section["Key1"];
var val2 = section["Key2"];

【讨论】:

试一试,但它会返回相同的错误消息 使用我展示的自定义部分,它将起作用。尝试编辑您的 appconfig。

以上是关于app.config 中的“无法加载类型”的主要内容,如果未能解决你的问题,请参考以下文章

Global.asax中的“分析器错误消息:无法加载类型”

运行Fiddler时,提示无法加载类型是啥原因

错误:«无法加载类型 MvcApplication»

无法加载类型 ASP.ViewSwitcher

无法加载类型“AjaxControlToolkit.Sanitizer.AntiXssSanitizerProvider”。

MvvmCross - '无法加载类型 Sequence.Plugins.InfiniteScroll.PluginLoader 的插件程序集'