【问题标题】:Dll problem after moving project to other harddrive将项目移动到另一个硬盘后的 DLL 问题
【发布时间】:2011-05-14 08:14:25
【问题描述】:

我刚刚将硬盘和操作系统从 XP 更改为 Win7。 之前我的源代码位于 D: 驱动器上,现在它们位于 F: 上,在相同的文件夹结构下。

问题在于 FluentNhibernate 配置。我得到以下 InvalidOperationException StackTrace:

   at FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory() in d:\Builds\FluentNH-v1.x-nh3\src\FluentNHibernate\Cfg\FluentConfiguration.cs:line 115
   at TSI_Manager.FNH_Manager.CreateSessionFactory() in F:\.....

如您所见,它试图访问 D:.. 我不知道究竟是什么试图访问什么。但是在我的项目引用中,所有引用(除了 System...)都指向 F:,并设置为 Copy Local = True

那么仍然指的是 D: 吗?我错过了哪些步骤?

干杯!


编辑: 异常详情:

System.InvalidOperationException was unhandled
  Message=An error occurred creating the form. See Exception.InnerException for details.  The error is: An invalid or incomplete configuration was used while creating a SessionFactory. Check PotentialReasons collection, and InnerException for more detail.
  Source=TSI Manager
  StackTrace:
       at TSI_Manager.My.MyProject.MyForms.Create__Instance__[T](T Instance) in 17d14f5c-a337-4978-8281-53493378c1071.vb:line 190
       at TSI_Manager.My.MyProject.MyForms.get_MainForm()
       at TSI_Manager.My.MyApplication.OnCreateMainForm() in F:\My Jotta\VB\Projects VS2010\IB API Projects\9.64.16\ClientManager\v0004 Changing ActiveUser\TSI Manager\My Project\Application.Designer.vb:line 35
       at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
       at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
       at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
       at TSI_Manager.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:line 81
       at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: FluentNHibernate.Cfg.FluentConfigurationException
       Message=An invalid or incomplete configuration was used while creating a SessionFactory. Check PotentialReasons collection, and InnerException for more detail.
       Source=FluentNHibernate
       StackTrace:
            at FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory() in d:\Builds\FluentNH-v1.x-nh3\src\FluentNHibernate\Cfg\FluentConfiguration.cs:line 115
            at TSI_Manager.FNH_Manager.CreateSessionFactory() in F:\My Jotta\VB\Projects VS2010\IB API Projects\9.64.16\ClientManager\v0004 Changing ActiveUser\TSI Manager\DAL\FnhManager.vb:line 43
            at TSI_Manager.FNH_Manager.ConfigureSessionFactory(String connectionStr) in F:\My Jotta\VB\Projects VS2010\IB API Projects\9.64.16\ClientManager\v0004 Changing ActiveUser\TSI Manager\DAL\FnhManager.vb:line 18
            at TSI_Manager.MainBL.InitializeDatabase() in F:\My Jotta\VB\Projects VS2010\IB API Projects\9.64.16\ClientManager\v0004 Changing ActiveUser\TSI Manager\Generic\MainBL.vb:line 174
            at TSI_Manager.MainBL..ctor() in F:\My Jotta\VB\Projects VS2010\IB API Projects\9.64.16\ClientManager\v0004 Changing ActiveUser\TSI Manager\Generic\MainBL.vb:line 92
            at TSI_Manager.MainForm..ctor() in F:\My Jotta\VB\Projects VS2010\IB API Projects\9.64.16\ClientManager\v0004 Changing ActiveUser\TSI Manager\GUI\Forms\MainForm.vb:line 6
       InnerException: NHibernate.HibernateException
            Message=Could not create the driver from NHibernate.Driver.SQLite20Driver, NHibernate, Version=3.0.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4.
            Source=NHibernate
            StackTrace:
                 at NHibernate.Connection.ConnectionProvider.ConfigureDriver(IDictionary`2 settings) in d:\CSharp\NH\nhibernate\src\NHibernate\Connection\ConnectionProvider.cs:line 116
                 at NHibernate.Connection.ConnectionProvider.Configure(IDictionary`2 settings) in d:\CSharp\NH\nhibernate\src\NHibernate\Connection\ConnectionProvider.cs:line 64
                 at NHibernate.Connection.ConnectionProviderFactory.NewConnectionProvider(IDictionary`2 settings) in d:\CSharp\NH\nhibernate\src\NHibernate\Connection\ConnectionProviderFactory.cs:line 50
                 at NHibernate.Cfg.SettingsFactory.BuildSettings(IDictionary`2 properties) in d:\CSharp\NH\nhibernate\src\NHibernate\Cfg\SettingsFactory.cs:line 83
                 at NHibernate.Cfg.Configuration.BuildSettings() in d:\CSharp\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:line 1687
                 at NHibernate.Cfg.Configuration.BuildSessionFactory() in d:\CSharp\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:line 1239
                 at FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory() in d:\Builds\FluentNH-v1.x-nh3\src\FluentNHibernate\Cfg\FluentConfiguration.cs:line 108
            InnerException: System.Reflection.TargetInvocationException
                 Message=Exception has been thrown by the target of an invocation.
                 Source=mscorlib
                 StackTrace:
                      at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandle& ctor, Boolean& bNeedSecurityCheck)
                      at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean fillCache)
                      at System.RuntimeType.CreateInstanceImpl(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean fillCache)
                      at System.Activator.CreateInstance(Type type, Boolean nonPublic)
                      at NHibernate.Bytecode.ActivatorObjectsFactory.CreateInstance(Type type) in d:\CSharp\NH\nhibernate\src\NHibernate\Bytecode\ActivatorObjectsFactory.cs:line 9
                      at NHibernate.Connection.ConnectionProvider.ConfigureDriver(IDictionary`2 settings) in d:\CSharp\NH\nhibernate\src\NHibernate\Connection\ConnectionProvider.cs:line 107
                 InnerException: System.ArgumentException
                      Message=Unable to find the requested .Net Framework Data Provider.  It may not be installed.
                      Source=System.Data
                      StackTrace:
                           at System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName)
                           at NHibernate.Driver.ReflectionBasedDriver..ctor(String providerInvariantName, String driverAssemblyName, String connectionTypeName, String commandTypeName) in d:\CSharp\NH\nhibernate\src\NHibernate\Driver\ReflectionBasedDriver.cs:line 49
                           at NHibernate.Driver.SQLite20Driver..ctor() in d:\CSharp\NH\nhibernate\src\NHibernate\Driver\SQLite20Driver.cs:line 28
                      InnerException: 

【问题讨论】:

    标签: c# .net dll fluent-nhibernate reference


    【解决方案1】:

    它实际上并没有尝试访问 D:(据我们所见)——它只是认为这是 BuildSessionFactory 的来源。如果你想解决这个问题,你可以自己重建 FluentNHibernate,但我认为这不是问题的根源。

    看看异常的消息是什么 - 这可能会提供更多信息。

    【讨论】:

    • 我希望它告诉我更多信息,但它只给出了我收到的几乎所有类型的流利配置错误的标准消息:消息是:创建表单时发生错误。有关详细信息,请参阅 Exception.InnerException。错误是:创建 SessionFactory 时使用了无效或不完整的配置。查看PotentialReasons 集合和InnerException 了解更多详情。
    • @bretddog:这比你之前展示的要多得多。按照建议,下一步显然是查看 InnerException 和 PotentialReasons 集合。你这样做了吗?
    • 好的,我必须说我不太擅长阅读异常细节。我在上面发布了剪贴板副本。所以,如果它给你一些提示,我也许可以学习? PotentialReasons 说 Count=0,不知道是什么意思?
    • @bretddog:这看起来像相关位:“Message=Could not create the driver from NHibernate.Driver.SQLite20Driver”——听起来你缺少一个程序集。
    • 对,一定是我忘记安装SQLIte了,会安装的。
    【解决方案2】:

    我认为关键问题是带有消息的 InnerException:

    找不到请求的 .Net Framework 数据提供程序。可能没有安装。

    看来您需要在新机器上安装 GAC 的相关数据提供程序,或确保在您的项目中正确引用它。

    似乎可以从以下位置获得最新版本的 SQLite 提供程序:

    http://sqlite.phxsoftware.com/

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-15
    • 2012-12-11
    • 2019-02-19
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    相关资源
    最近更新 更多