我在昨天发布的问题上取得了一些进展,因此我正在重写该帖子。由于组件中缺少类型导致的例外(修订)
我的问题似乎与我使用泛型有关。下面是App.config中的相关部分(带有空格的可读性格式):
<configSections>
<section
name="NA5300ResolverSynchroDevices"
type="InfrastructureModule.DeviceConfiguration.DeviceConfigurationSection
<NA5300ResolverSynchroModule.NA5300ResolverSynchroConfigurationElement>,
NA5300ResolverSynchroModule">
</section>
</configSections>
<NA5300ResolverSynchroDevices>
<Device deviceName="AzResolverSynchro" busAddress="7"/>
<Device deviceName="ElResolverSynchro" busAddress="8"/>
</NA5300ResolverSynchroDevices>
以下是我正在试图映射到配置节的类:
namespace InfrastructureModule.DeviceConfiguration
{
public class DeviceConfigurationSection<T> : ConfigurationSection
where T : DeviceConfigurationElement, new()
{
[ConfigurationProperty("", IsDefaultCollection = true, IsKey = false)]
public DeviceConfigurationElementCollection<T> Devices
{
get { return (DeviceConfigurationElementCollection<T>) base[""]; }
set { base[""] = value; }
}
}
}
下面是尝试的C#代码访问配置文件:
DeviceConfigurationSection<NA5300ResolverSynchroConfigurationElement> devices =
ConfigurationManager.GetSection("NA5300ResolverSynchroDevices") as
DeviceConfigurationSection<NA5300ResolverSynchroConfigurationElement>;
这里的异常文本我越来越:
出错创建NA5300ResolverSynchroDevices配置节处理程序:无法从程序集“NA5300ResolverSynchroModule”加载类型“InfrastructureModule.DeviceConfiguration.DeviceConfigurationSection <NA5300ResolverSynchroModule.NA5300ResolverSynchroConfigurationElement>”。
我知道,在C#泛型是在运行时,而不是在编译时(不像C++)实例化。我还不太了解泛型,以了解当泛型类型和实例化类型存在于不同的程序集中时,运行时生成的类型被认为存在于哪个程序集中。上面,我告诉运行时在汇编NA5300ResolverSynchroModule中查找它。我也试着告诉它在AssemblyModule程序集中寻找它。两者都不起作用。
我正在尝试使用genric类型,因为我将有许多配置部分的相应ConfigurationSection派生类型都将具有上面显示的形式。我想避免代码重复。
任何人都可以看到为什么我的方法失败,我该如何解决它?
这是由于它的创建配置处理的方式。配置部分是什么样的? – 2009-08-17 23:53:08
如果类型不在程序集中,则会导致此异常。 .NET不是在发明这个,或是对你说谎。它确实需要这种类型,它确实不在该组件中。你需要调查以了解这可能是真实的。 – 2009-08-17 23:56:11