Activation error occured while trying to get instance of type Database

本文解决在虚拟机环境中使用Microsoft.Practices.EnterpriseLibrary.Data和System.Data.SQLite出现的ActivationError问题,通过将相关库复制到项目下并重新引用解决了问题。配置检查确认无误。
在做winform程序时,用Microsoft.Practices.EnterpriseLibrary.Data和System.Data.SQLite在机器上测试没问题,放在虚机中试试,提示Activation error occured while trying to get instance of type Database,key'',把key加上也不对。
<configSections>
        <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
    </configSections>
    <dataConfiguration defaultDatabase="dbconn" /> 
    <connectionStrings>
      <clear/>
        <add name="dbconn" connectionString="data source=|DataDirectory|\system\Fengxin.db;New=True;UTF8Encoding=True;Version=3"
            providerName="System.Data.SQLite" />
    </connectionStrings>

配置是没有问题。

后来才发现把Microsoft.Practices.EnterpriseLibrary.Data复制到项目下,再引用,解决问题。

### 获取类型为 LogWriter 的实例时发生激活错误的原因分析 当尝试通过 `Microsoft.Practices.EnterpriseLibrary` 或类似的依赖注入框架获取 `LogWriter` 实例时,如果遇到 **Activation error while getting instance of LogWriter, key ""** 错误,则通常表明配置文件或运行环境存在问题。以下是可能原因及其解决方案: #### 1. 配置文件缺失或不正确 确保应用程序的配置文件(通常是 `App.config` 或 `Web.config`)中包含了正确的日志记录模块设置。缺少必要的 `<loggingConfiguration>` 节点可能导致无法解析 `LogWriter` 类型。 示例配置如下: ```xml <configuration> <configSections> <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging"/> </configSections> <loggingConfiguration name="" tracingEnabled="true" defaultCategory="General"> <listeners> <add name="Rolling Flat File Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollingFlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging" listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.RollingFlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging" fileName="log.txt" rollSizeKB="1024" maxArchivedFiles="5" traceOutputOptions="None" filter="All"/> </listeners> <categorySources> <add switchValue="All" name="General"> <listeners> <add name="Rolling Flat File Trace Listener"/> </listeners> </add> </categorySources> <specialSources> <allEvents switchValue="All" name="All Events"> <listeners> <add name="Rolling Flat File Trace Listener"/> </listeners> </allEvents> </specialSources> </loggingConfiguration> </configuration> ``` 如果没有定义上述节点或者路径错误,可能会触发激活异常[^1]。 --- #### 2. 缺少必要组件或 DLL 文件 确认目标环境中已安装并加载了所有必需的企业库组件以及其依赖项。例如,在虚拟机或其他部署环境中,可能存在以下情况之一: - 没有复制完整的 Enterprise Library 库到发布目录。 - 特定的日志提供程序(如 SQLite 数据库支持)未正确注册。 可以通过检查项目的 bin 文件夹来验证是否存在以下核心库: - `Microsoft.Practices.EnterpriseLibrary.Common.dll` - `Microsoft.Practices.Unity.dll` - `Microsoft.Practices.ServiceLocation.dll` - 日志功能所需的特定实现库(如 `Microsoft.Practices.EnterpriseLibrary.Logging.Database.dll`) 此外,还需注意 .NET Framework 和第三方驱动版本的一致性问题。例如,SQLite 提供的数据访问层需要匹配对应的 ADO.NET Provider[^2]。 --- #### 3. 运行权限不足 某些情况下,即使配置无误也可能因权限受限而引发此类错误。特别是涉及写入日志文件的操作时,应确保应用有足够的磁盘读/写权限。对于 Windows 平台下的 WinForms 程序而言,默认的安全策略允许大多数操作;但在服务器端(尤其是 IIS 托管场景下),建议显式授予 ASP.NET 用户对目标存储位置的完全控制权。 --- #### 4. Unity 容器初始化失败 Enterprise Library 使用 Unity IoC 容器管理对象生命周期和服务定位。如果容器未能正常启动或将参数映射至预期的服务接口,则会抛出 Activation Error。针对这种情况,请仔细审查代码逻辑部分是否有遗漏之处,比如忘记调用 `EnterpriseLibraryContainer.Current.GetInstance<ILoggingService>()` 方法完成绑定过程[^3]。 --- ### 示例修复方案 假设当前问题是由于配置不当引起,可按照下面方式调整您的 App.Config 设置,并重新编译项目后再试一次: ```csharp using System; using Microsoft.Practices.EnterpriseLibrary.Logging; class Program { static void Main(string[] args){ try{ Logger.Write("Test message", "General"); }catch(Exception ex){ Console.WriteLine($"Logging initialization failed: {ex.Message}"); } } } ``` 同时记得更新 NuGet 包以获得最新稳定版的支持工具集。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值