.net WinForm程序中调用Visual Studio IDE 中数据连接配置界面 (一个DLL搞定)
玩过直接调 数据库配置界面的一定对如下三个东西不陌生Microsoft.Data.ConnectionUI.Dialog.dll -- 微软自带的数据连接配置界面库
Microsoft.Data.ConnectionUI.dll --微软自带的数据连接配置界面库
Microsoft.Data.ConnectionUI.Dialog.resources.dll 微软自带的数据连接配置界面库语言包
现在的问题是,这三个东西原生态的使用会造成发布exe 时候生成如下结构
App
---App.exe
---Microsoft.Data.ConnectionUI.Dialog.dll
---Microsoft.Data.ConnectionUI.dll
---zh-CN
---Microsoft.Data.ConnectionUI.Dialog.resources.dll
由于原生的DLL与语言包之间是使用.net 资源DLL(Microsoft.Data.ConnectionUI.Dialog.resources.dll)“Zh-CN” 对应关系,所有在应用程序的物理存储上面看上去不是太美观。介于此本人想整合三个DLL为一个DLL,直接在程序中使用,发布程序如下图所示的存储分布。
App
---App.exe
---DBConnectSetting.dll
一个 DBConnectSetting.dll 包含上述三个关键的DLL,也就是这次整合的核心关键。
解决思路
1、整合
Microsoft.Data.ConnectionUI.Dialog.dll
Microsoft.Data.ConnectionUI.dll
这两个是核心代码,所有的逻辑都在这个两个里面。
2、本地化整合后的
DBConnectSetting.dll 使其自生包含中文,不再外挂资源 Microsoft.Data.ConnectionUI.Dialog.resources.dll
实施过程:
1、整合两个 DLL 使用 ILMergeGui,注意是需要先安装ILMerge
ILMerge 下载地址:http://research.microsoft.com/en-us/people/mbarnett/ilmerge.aspx
ILMergeGui 下载地址:https://ilmergegui.codeplex.com/
选择两个文件后后,合并输出即可。主要合并配置如下
2、本地化
使用DotNetHelper反编译 Microsoft.Data.ConnectionUI.Dialog.resources.dll ,提取所包含的资源文件,并使用带有Zh-CN 的资源文件替换不带有Zh-CN的资源文件,复制一份处理好的资源文件准备一下步的操作。
3、反编译合并后的文件DBConnectSetting.dll 同样输出上图中的资源文件,将刚才准备好的资源文件全部替换覆盖,再次使用DotNetHelper 重新编译。
最终生成的DBConnectSetting.dll 就是汉化好了的文件了。注:在这次整合的重新编译时候出现报错,重新编译不过去,后面注意观察是翻译后的资源文件字符串过长导致,个别资源文件报错,就使用 Resourcer for .NET 矫正一下即可。
4、完工!
程序中调用展示:
点击 更改数据源 可支持多数据源类型,这些都是微软这个组建自生支持的。
点击高级,可详细的配置连接字符串,也是这个微软原生 所支持的。
C# 中代码如下:
[csharp]
Microsoft.Data.ConnectionUI.DataConnectionDialog dlg = new Microsoft.Data.ConnectionUI.DataConnectionDialog();
//添加界面所支持的数据源类型
dlg.DataSources.Add(Microsoft.Data.ConnectionUI.DataSource.SqlDataSource);
dlg.DataSources.Add(Microsoft.Data.ConnectionUI.DataSource.AccessDataSource);
dlg.DataSources.Add(Microsoft.Data.ConnectionUI.DataSource.OdbcDataSource);
dlg.DataSources.Add(Microsoft.Data.ConnectionUI.DataSource.OracleDataSource);
dlg.DataSources.Add(Microsoft.Data.ConnectionUI.DataSource.SqlFileDataSource);
dlg.SelectedDataSource = Microsoft.Data.ConnectionUI.DataSource.SqlDataSource;
dlg.SelectedDataProvider = Microsoft.Data.ConnectionUI.DataProvider.SqlDataProvider;
//赋值一个已存在的连接字符串给界面控件
dlg.ConnectionString = this.ConnectString;
Microsoft.Data.ConnectionUI.DataConnectionDialog.Show(dlg,owner);
if (!String.IsNullOrEmpty(dlg.ConnectionString))
{
//保存修改过的界面配置连接到文本
this.ConnectString = dlg.ConnectionString;
}
补充:Web开发 , ASP.Net ,