在WPF崩溃应用程序中引用外部DLL

时间:2015-04-05 08:09:50

标签: c# .net wpf dll

我在WPF项目中使用了以下3个SQL Server(版本SQL Server 2008 R2)DLL:

Microsoft.SqlServer.ConnectionInfo
Microsoft.SqlServer.Management.Sdk.Sfc
Microsoft.SqlServer.Smo

项目在开发它的机器上运行良好。但是,如果我尝试将.exe移动到其他某台计算机,则应用程序会崩溃。

我为所有3个DLL设置了Copy Local = True,这样在编译期间它应该复制Debug文件夹中的所有3个DLL。 (这些DLL是查找SQL Server数据根目录所必需的。)

按照我试图在我的应用程序中执行的代码。

try
            {
                MessageBox.Show("trying to open connection");
                string conStr = System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ToString();
                con = new SqlConnection(conStr);
                con.Open();
                MessageBox.Show("connection opened ");
                var serverConnection = new ServerConnection(con);
                var server = new Server(serverConnection);
                var defaultDataPath = string.IsNullOrEmpty(server.Settings.DefaultFile) ? server.MasterDBPath : server.Settings.DefaultFile;
                var defaultLogPath = string.IsNullOrEmpty(server.Settings.DefaultLog) ? server.MasterDBLogPath : server.Settings.DefaultLog;

                string restoreSql = @"RESTORE DATABASE [MyDB]
                                      FROM DISK = '" + this.FilePath + @"'
                                      WITH 
                                      MOVE 'MyDB' TO '" + defaultDataPath + @"\MyDB.mdf',
                                      MOVE 'MyDB_Log' TO '" + defaultLogPath + @"\MyDB_Log.ldf',
                                      RECOVERY, REPLACE, STATS = 10";
                SqlCommand restoreCmd = new SqlCommand(restoreSql, con);
                int status = restoreCmd.ExecuteNonQuery();
                completedFlag = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Database Restore Error: " + ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
            }
            finally
            {
                if (con.State == ConnectionState.Open)
                {
                    con.Close();
                }
            }
            if (completedFlag)
                MessageBox.Show("Database restore successful.", "Information", MessageBoxButton.OK, MessageBoxImage.Information);
            else
                MessageBox.Show("SYSTEM ERROR: Failed restoring database.\nPlease restart SQL Server Service and try again.", "Error", MessageBoxButton.OK, MessageBoxImage.Error);

无法找出我的应用程序崩溃的原因。

1 个答案:

答案 0 :(得分:1)

在分发某些软件包时,只需将dll包含在软件包中可能无济于事。您需要阅读这些库的分发指南。

就SMO而言,这就是MSDN所说的

  

如果您开发使用SQL Server管理对象的应用程序,   您需要确保存在必要的支持文件   带有应用程序的计算机。 SQL Server 2008功能包   包含SQL Server管理的可再发行组件包   对象。

如果您的外部库中安装了这些支持包,则应解决您的问题。