【问题标题】:DataConnectionDialog crashes in Visual Studio 2017DataConnectionDialog 在 Visual Studio 2017 中崩溃
【发布时间】:2018-06-05 09:55:52
【问题描述】:

我正在转换为 VS2017 一个遗留项目,它使用数据库连接对话框来收集数据以格式化连接字符串。

下面这行触发了错误:

var dialog = new DataConnectionDialog();

无法加载文件或程序集“Microsoft.Data.ConnectionUI, 版本=0.0.0.0,文化=中性,PublicKeyToken=f4ca07f51760da93' 或 它的依赖项之一。该系统找不到指定的文件。: System.IO.FileNotFoundException:无法加载文件或程序集 'Microsoft.Data.ConnectionUI,版本=0.0.0.0,文化=中性, PublicKeyToken=f4ca07f51760da93' 或其依赖项之一。这 系统找不到指定的文件。文件名: 'Microsoft.Data.ConnectionUI,版本=0.0.0.0,文化=中性, PublicKeyToken=f4ca07f51760da93' 在 Microsoft.Data.ConnectionUI.DataConnectionDialog..ctor() 在 Wings4CloudPackage.Forms.frmNewSolution.btnDatabase_Click(对象 发件人,EventArgs e)

=== 预绑定状态信息 === LOG: DisplayName = Microsoft.Data.ConnectionUI, Version=0.0.0.0, Culture=neutral, PublicKeyToken=f4ca07f51760da93(完全指定)日志:Appbase = file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/Common7/IDE/ LOG:初始 PrivatePath = NULL 调用程序集:Microsoft.Data.ConnectionUI.Dialog, 版本=0.0.0.0,文化=中性,PublicKeyToken=f4ca07f51760da93。 === LOG:此绑定在 LoadFrom 加载上下文中开始。警告:将不会在 LoadFrom 上下文中探测本机图像。本机图像只会 在默认加载上下文中进行探测,例如使用 Assembly.Load()。

我已经检查了这条路径:C:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/Common7/IDE/ 并且引用的 Microsoft.Data.ConnectionUI.dll 在那里。

此项目使用以下 nuget 包来显示对话框:DataConnectionDialog (https://www.nuget.org/packages/DataConnectionDialog/1.1.0)

此代码适用于 VS2013,但不适用于 VS2017

【问题讨论】:

  • 你能在 Dependency Walker 中运行吗(使用它而不是调试器)。 www.dependencywalker.com 如果Microsoft.Data.ConnectionUI.dll 需要的文件之一丢失,这应该有助于识别它。
  • 尝试启动 Fuslogvw - DLL binding debugger - 并检查 VS 尝试从何处加载 DLL。

标签: c# .net visual-studio-2013 visual-studio-2017 dllimport


【解决方案1】:

对我来说,在 WPF 应用程序中的 VS 2017 中可以这样工作:

        DataConnectionDialog dcd = new DataConnectionDialog();

        DataProvider dataProviderSql = DataProvider.SqlDataProvider;
        DataSource dataSourceSql = new DataSource(dataProviderSql.Name, dataProviderSql.DisplayName);
        dataSourceSql.Providers.Add(dataProviderSql);

        DataProvider dataProviderOracle = DataProvider.OracleDataProvider;
        DataSource dataSourceOracle = new DataSource(dataProviderOracle.Name, dataProviderOracle.DisplayName);
        dataSourceOracle.Providers.Add(dataProviderOracle);

        DataProvider dataProviderOle = DataProvider.OleDBDataProvider;
        DataSource dataSourceOle = new DataSource(dataProviderOle.Name, dataProviderOle.DisplayName);
        dataSourceOle.Providers.Add(dataProviderOle);

        DataProvider dataProviderOdbc = DataProvider.OdbcDataProvider;
        DataSource dataSourceOdbc = new DataSource(dataProviderOdbc.Name, dataProviderOdbc.DisplayName);
        dataSourceOdbc.Providers.Add(dataProviderOdbc);


        dcd.DataSources.Add(dataSourceSql);
        dcd.DataSources.Add(dataSourceOracle);
        dcd.DataSources.Add(dataSourceOle);
        dcd.DataSources.Add(dataSourceOdbc);

        dcd.SelectedDataSource = dataSourceSql;
        dcd.SelectedDataProvider = dataProviderSql;

        if (DataConnectionDialog.Show(dcd) == System.Windows.Forms.DialogResult.OK)
        {
            System.Windows.MessageBox.Show("YES");
        }

【讨论】:

  • 这并没有解决原来的问题,程序集绑定有问题。
  • 我的错,我把代码放在错误的问题下。这是我的第二个问题。如果您真的在问题中引用了路径上的 dll(C:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/Common7/IDE/),请尝试查看。当我添加 nuget 时,我看到了同样的错误,我在 Visual Studio 文件夹中将引用从 nuget dll 更改为 dll 并绑定开始工作,之后我遇到了解决代码的问题。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多