【问题标题】:ActivationException enterprise library on database connection数据库连接上的 ActivationException 企业库
【发布时间】:2014-08-27 14:10:32
【问题描述】:

在我的 64 位机器上,我有 Visual Studio 2012,更新 4 和 oracle 12,包括 ODP.net

当我尝试建立连接时,我遇到了异常。连接字符串是什么并不重要,所以我猜它并没有那么远,这是一个引用/dll问题?

典型通话:

EnterpriseLibraryContainer.Current.GetInstance<Database>(AppSettingsHandler.ConnectionStringName));

我的连接字符串如下,但都失败了(在另一台开发机器上工作正常):

<connectionStrings>
  <add name="DEV64" connectionString="Data Source=dev3;User Id=PISYSTEM;Password=xxx" providerName="Oracle.ManagedDataAccess.Client" />
  <add name="DEV86" connectionString="Data Source=dev3;User Id=PISYSTEM;Password=xxx" providerName="System.Data.OracleClient"/>
</connectionStrings>

数据库很好,项目也很好,因为它在另一台开发机器上工作正常,所以我认为这是企业库的某种配置问题。各种搜索只是随机提示不​​正确的 dll 等,但这都是在 .NET 中使用 nuget 完成的开箱即用的东西。嵌入 'c:\home\chris' 的企业库似乎有点垃圾,但我看到这个文件夹在互联网上搜索,所以它一定是这样的。

Microsoft.Practices.ServiceLocation.ActivationException was unhandled
  HResult=-2146233088
  Message=Activation error occured while trying to get instance of type Database, key "DEV64"
  Source=Microsoft.Practices.ServiceLocation
  StackTrace:
       at Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance(Type serviceType, String key) in c:\Home\Chris\Projects\CommonServiceLocator\main\Microsoft.Practices.ServiceLocation\ServiceLocatorImplBase.cs:line 57
       at Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance[TService](String key) in c:\Home\Chris\Projects\CommonServiceLocator\main\Microsoft.Practices.ServiceLocation\ServiceLocatorImplBase.cs:line 103
       at PI.Data.Services.DataManager.CreateContext() in c:\dev\PositionalImprovement\PI.Data\PI.Data.Services\DataManager.cs:line 20
       at PI.Business.Services.MapDataManager.getBatchList(Int32 statusID, String sortOrder) in c:\dev\PositionalImprovement\PI.Business\PI.Business.Services\MapDataManager.cs:line 44
       at PIClient.MainForm.loadBatchListGrid(Int32 batchStatusID, String sort_Order) in c:\dev\PositionalImprovement\PIClient\PIClient\MainForm.cs:line 855
       at PIClient.MainForm.openToolStripButton_Click(Object sender, EventArgs e) in c:\dev\PositionalImprovement\PIClient\PIClient\MainForm.cs:line 350
       at System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
       at System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
       at System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
       at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       at System.Windows.Forms.Control.WndProc(Message& m)
       at System.Windows.Forms.ToolStrip.WndProc(Message& m)
       at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       at PIClient.Program.Main() in c:\dev\PositionalImprovement\PIClient\PIClient\Program.cs:line 17
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: Microsoft.Practices.Unity.ResolutionFailedException
       HResult=-2146233088
       Message=Resolution of the dependency failed, type = "Microsoft.Practices.EnterpriseLibrary.Data.Database", name = "DEV64".
Exception occurred while: while resolving.
Exception is: InvalidOperationException - The type Database does not have an accessible constructor.
-----------------------------------------------
At the time of the exception, the container was:

  Resolving Microsoft.Practices.EnterpriseLibrary.Data.Database,DEV64

       Source=Microsoft.Practices.Unity
       NameRequested=DEV64
       TypeRequested=Database
       StackTrace:
            at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name, IEnumerable`1 resolverOverrides)
            at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, String name, IEnumerable`1 resolverOverrides)
            at Microsoft.Practices.Unity.UnityContainer.Resolve(Type t, String name, ResolverOverride[] resolverOverrides)
            at Microsoft.Practices.Unity.UnityServiceLocator.DoGetInstance(Type serviceType, String key)
            at Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance(Type serviceType, String key) in c:\Home\Chris\Projects\CommonServiceLocator\main\Microsoft.Practices.ServiceLocation\ServiceLocatorImplBase.cs:line 49
       InnerException: System.InvalidOperationException
            HResult=-2146233079
            Message=The type Database does not have an accessible constructor.
            Source=Microsoft.Practices.Unity
            StackTrace:
                 at Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructorStrategy.ThrowForNullExistingObject(IBuilderContext context)
                 at BuildUp_Microsoft.Practices.EnterpriseLibrary.Data.Database(IBuilderContext )
                 at Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext context)
                 at Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context)
                 at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)
                 at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name, IEnumerable`1 resolverOverrides)
            InnerException:

有什么想法吗?

谢谢。

【问题讨论】:

    标签: c# enterprise-library-5


    【解决方案1】:

    我卸载了 Oracle ODAC 客户端,重新安装了它,就好像变魔术一样。尽管我昨天做了完全相同的步骤。

    【讨论】:

    • 可能Oracle.ManagedDataAccess.Client 的 DbProviderFactory 未在 machine.config 中设置。重新安装将其正确添加到那里。只是猜测。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    相关资源
    最近更新 更多