DotNetBar for Windows Forms 11.8.0.8冰河之刃重打包版


                 關於 DotNetBar for Windows Forms 11.8.0.8_冰河之刃重打包版

 

    基於 官方原版的安裝包 + http://www.cnblogs.com/tracky 提供的補丁DLL制作而成。 安裝之后,直接就可以用了。 省心省事。不必再單獨的打一次補丁包了。

     本安裝包和補丁包一樣都刪除了官方自帶的示例程序【我的文檔 中 已經編譯好的exe文件】。因為示例程序引用的是官方原版的DLL。處理過的DLL和原版DLL的強簽名不同,如果再打開示例程序就會報找不到對應強簽名的官方原版DLL的錯。索性刪除,省的大家再手動刪除!可用示例代碼再次編譯生成示例程序。 所以開始菜單中官方的 示例程序查看 鏈接方式打不開。這是正常的。因為沒有示例程序了。【感興趣的可以分析一下安裝目錄下面的RunDotNetBarSampleExplorer.exe文件,就會想明白了。】本安裝包和補丁包都依然保留了這一個鏈接。 在此說明和強調這一點!避免某些 小白用戶 說處理過的DLL或者是本安裝包有問題。

做事要低調!切勿隨意傳播,導致不必要的麻煩! 因使用本安裝包所導致的一切后果由使用者自身承擔,補丁DLL作者和安裝包作者皆不承擔任何責任!!!

本安裝包僅供學習使用,請在下載后24小時之內刪除。

安裝包里面的補丁DLL版權歸tracky所有。

本安裝包版權歸本人所有。

作者:冰河之刃 博客:http://www.cnblogs.com/binghe021 2014年7月25日 13:06:07 於上海

-----------------------------華麗的分隔線-----------------------------------------------------------------------------------------

發現tracky的博客上面並沒有發布出來DotNetBar for Windows Forms 11.8.0.8版本【他說當時好像博客園有故障發布不了】,今天下午靈感一現。

不如索性將處理過的補丁DLL直接打包到官方原版的安裝包里面,一次性安裝后就能直接使用那多方便呀。於是乎就有了這個安裝包。

俺上次做了一個11.8.0.4版本的補丁DLL,不過沒有刪除注冊表里面的殘余信息,所以安裝后工具箱有一點問題。多謝tracky的提示,在此表示感謝。

 

DotNetBar for Windows Forms 11.8.0.8_冰河之刃重打包版 下載地址:

鏈接: http://pan.baidu.com/s/1dD5Xu2t 密碼: n5bh

-----------------------------華麗的分隔線-----------------------------------------------------------------------------------------

做11.8.0.4版本的補丁DLL的時候產生了一個小工具。順帶發一下。

小工具功能:讀取同名但后綴名不同的配置文件 把指定的DLL從GAC中移除或添加到GAC中。靈活方便,更新軟件或做補丁包時可以用上。

配置文件類

/// <summary>
    /// 配置文件類
    /// </summary>
    [Serializable]
   public  class ConfigModel
    {
        public ConfigModel()
        {
        }

        /// <summary>
        /// 配置文件的名字
        /// </summary>
        private string _configFileName;

        /// <summary>
        /// 要刪除的dll集合
        /// </summary>
        private  List<DllModel> _listDllModelsDel;

        /// <summary>
        /// 要添加的dll集合
        /// </summary>
        private  List<DllModel> _listDllModelsAdd;

        /// <summary>
        /// 要刪除的dll集合
        /// </summary>
        public List<DllModel> ListDllModelsDel
        {
            get { return _listDllModelsDel; }
            set { _listDllModelsDel = value; }
        }

        /// <summary>
        /// 要添加的dll集合
        /// </summary>
        public List<DllModel> ListDllModelsAdd
        {
            get { return _listDllModelsAdd; }
            set { _listDllModelsAdd = value; }
        }

        /// <summary>
        /// 配置文件的名字
        /// </summary>
        public string ConfigFileName
        {
            get
            {
                //_configFileName ="AddGAC_MSIL"+ ".config";
                return _configFileName;
            }
            set { _configFileName = value; }
        }
    }
View Code

Dll的Model信息

 /// <summary>
    ///     Dll的Model信息
    /// </summary>
    [Serializable]
    public class DllModel
    {
        public DllModel()
        {
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="dllName"></param>
        /// <param name="version"></param>
        /// <param name="publicKeyToken"></param>
        public DllModel(string dllName, string version, string publicKeyToken)
        {
            DllName = dllName;
            PublicKeyToken = publicKeyToken;
            Version = version;
        }

        /// <summary>
        ///     dll的文件名【不帶.dll的后綴名】
        /// </summary>
        public string DllName { get; set; }

        /// <summary>
        ///     簽名PublicKeyToken
        /// </summary>
        public string PublicKeyToken { get; set; }

        /// <summary>
        ///     版本號
        /// </summary>
        public string Version { get; set; }

        /// <summary>
        ///     獲取 版本號加上PublicKeyToken
        /// </summary>
        /// <returns></returns>
        public string GetVersionAddPublicKeyToken()
        {
            return Version + "__" + PublicKeyToken;
        }

        /// <summary>
        ///     獲取添加了.dll后綴的文件名
        /// </summary>
        /// <returns></returns>
        public string GetDllNameWithDll()
        {
            return DllName + ".dll";
        }

        /// <summary>
        ///     獲取最終的dll的路徑 如:【DevComponents.DotNetBar2\\11.8.0.4__7eb7c3a35b91de04\\DevComponents.DotNetBar2.dll】
        /// </summary>
        /// <returns></returns>
        public string GetDllPath()
        {
            return DllName + "\\" + GetVersionAddPublicKeyToken() + "\\" + GetDllNameWithDll();
        }

        /// <summary>
        ///     獲取第二級的文件夾名稱=dll的文件名加上版本號和PublicKeyToken 如:【DevComponents.DotNetBar2\\11.8.0.4__7eb7c3a35b91de04】
        /// </summary>
        /// <returns></returns>
        public string GetDirPathTwo()
        {
            return DllName + "\\" + GetVersionAddPublicKeyToken();
        }

        /// <summary>
        ///     獲取第一級文件夾的名稱=dll的文件名 如:【DevComponents.DotNetBar2】
        /// </summary>
        /// <returns></returns>
        public string GetDirPathOne()
        {
            return DllName;
        }
    }
View Code

序列化幫助類

  public class SerializeHelper<T>
    {
        public SerializeHelper()
        {
        }

        public static T Deserialze(byte[] buff)
        {
            T t;
            using (MemoryStream memoryStream = new MemoryStream(buff))
            {
                memoryStream.Position = (long)0;
                t = (T)(new BinaryFormatter()).Deserialize(memoryStream);
            }
            return t;
        }

        public static byte[] Serialze(T t)
        {
            byte[] array;
            using (MemoryStream memoryStream = new MemoryStream())
            {
                (new BinaryFormatter()).Serialize(memoryStream, t);
                array = memoryStream.ToArray();
            }
            return array;
        }

        public static T StringDeserialze(string rs)
        {
            T t;
            try
            {
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
                using (XmlReader xmlReader = XmlReader.Create(new StringReader(rs)))
                {
                    t = (T)xmlSerializer.Deserialize(xmlReader);
                }
            }
            catch
            {
                t = default(T);
            }
            return t;
        }

        public static string StringSerialze(T obj)
        {
            StringBuilder stringBuilder = new StringBuilder();
            try
            {
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
                using (XmlWriter xmlWriter = XmlWriter.Create(stringBuilder))
                {
                    xmlSerializer.Serialize(xmlWriter, obj);
                }
            }
            catch (Exception exception)
            {
                return exception.Message;
            }
            return stringBuilder.ToString();
        }

        public static DataTable ToDataTable(IEnumerable<T> varlist)
        {
            object value;
            DataTable dataTable = new DataTable();
            PropertyInfo[] properties = null;
            if (varlist == null)
            {
                return dataTable;
            }
            foreach (T t in varlist)
            {
                if (properties == null)
                {
                    properties = t.GetType().GetProperties();
                    PropertyInfo[] propertyInfoArray = properties;
                    for (int i = 0; i < (int)propertyInfoArray.Length; i++)
                    {
                        PropertyInfo propertyInfo = propertyInfoArray[i];
                        Type propertyType = propertyInfo.PropertyType;
                        if (propertyType.IsGenericType && propertyType.GetGenericTypeDefinition() == typeof(Nullable<>))
                        {
                            propertyType = propertyType.GetGenericArguments()[0];
                        }
                        dataTable.Columns.Add(new DataColumn(propertyInfo.Name, propertyType));
                    }
                }
                DataRow dataRow = dataTable.NewRow();
                PropertyInfo[] propertyInfoArray1 = properties;
                for (int j = 0; j < (int)propertyInfoArray1.Length; j++)
                {
                    PropertyInfo propertyInfo1 = propertyInfoArray1[j];
                    DataRow dataRow1 = dataRow;
                    string name = propertyInfo1.Name;
                    if (propertyInfo1.GetValue(t, null) == null)
                    {
                        value = DBNull.Value;
                    }
                    else
                    {
                        value = propertyInfo1.GetValue(t, null);
                    }
                    dataRow1[name] = value;
                }
                dataTable.Rows.Add(dataRow);
            }
            return dataTable;
        }

        public static DataTable ToDataTable(T obj)
        {
            object value;
            DataTable dataTable = new DataTable();
            if (obj == null)
            {
                return dataTable;
            }
            PropertyInfo[] properties = typeof(T).GetProperties();
            PropertyInfo[] propertyInfoArray = properties;
            for (int i = 0; i < (int)propertyInfoArray.Length; i++)
            {
                PropertyInfo propertyInfo = propertyInfoArray[i];
                Type propertyType = propertyInfo.PropertyType;
                if (propertyType.IsGenericType && propertyType.GetGenericTypeDefinition() == typeof(Nullable<>))
                {
                    propertyType = propertyType.GetGenericArguments()[0];
                }
                dataTable.Columns.Add(new DataColumn(propertyInfo.Name, propertyType));
            }
            DataRow dataRow = dataTable.NewRow();
            PropertyInfo[] propertyInfoArray1 = properties;
            for (int j = 0; j < (int)propertyInfoArray1.Length; j++)
            {
                PropertyInfo propertyInfo1 = propertyInfoArray1[j];
                DataRow dataRow1 = dataRow;
                string name = propertyInfo1.Name;
                if (propertyInfo1.GetValue(obj, null) == null)
                {
                    value = DBNull.Value;
                }
                else
                {
                    value = propertyInfo1.GetValue(obj, null);
                }
                dataRow1[name] = value;
            }
            dataTable.Rows.Add(dataRow);
            return dataTable;
        }

        public static T XMLDeserialze(string filePath)
        {
            T t;
            try
            {
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
                using (XmlReader xmlReader = XmlReader.Create(filePath))
                {
                    t = (T)xmlSerializer.Deserialize(xmlReader);
                }
            }
            catch
            {
                t = default(T);
            }
            return t;
        }

        public static void XMLSerialze(T obj, string filePath)
        {
            try
            {
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
                using (XmlWriter xmlWriter = XmlWriter.Create(filePath))
                {
                    xmlSerializer.Serialize(xmlWriter, obj);
                }
            }
            catch
            {
            }
        }
    }
View Code

Main方法所在類

 public class Program
    {
        /// <summary>
        ///     要刪除的dll集合
        /// </summary>
        private static readonly List<DllModel> listDllModelsDel = new List<DllModel>();

        /// <summary>
        ///     要添加的dll集合
        /// </summary>
        private static readonly List<DllModel> listDllModelsAdd = new List<DllModel>();

        private static ConfigModel configModel = new ConfigModel();


        private static readonly string path = AppDomain.CurrentDomain.BaseDirectory + "\\" +
                                              "AddGAC_MSIL_Log.log";

        private static readonly FileStream fileStream = new FileStream(path, FileMode.Create, FileAccess.Write,
            FileShare.Read);

        private static readonly StreamWriter streamWriter = new StreamWriter(fileStream);


        public static void Main(string[] args)
        {
            streamWriter.WriteLine("--------------------------------------------------------------------------");
            streamWriter.WriteLine("本工具可以讀取配置文件,靈活的刪除和添加GAC文件。" +
                                   "\r\n使用之前務必關掉Visual Studio工具,並且使用管理員權限運行。");
            streamWriter.WriteLine("方便為程序打補丁,方便制做安裝包等等");
            streamWriter.WriteLine("本工具由冰河之刃開發");
            streamWriter.WriteLine("本人博客:http://www.cnblogs.com/binghe021");
            streamWriter.WriteLine("--------------------------------------------------------------------------");
            LoadConfig();
            //InitDllModels();
            GAC_MSIL_Del();
            GAC_MSIL_Add();

            streamWriter.Close();
            fileStream.Close();

            Console.WriteLine("文件注冊到GAC中完成");
            Console.WriteLine("注冊日志在:"+path);
            Console.WriteLine("准備打開注冊日志");
            Process.Start(path);
            Console.WriteLine("日志若顯示注冊到GAC中成功,則說明補丁應用成功");
            Console.WriteLine("本補丁不會備份原文件【官方有限制版】,請注意。");
            Console.ReadLine();
        }

        /// <summary>
        ///     添加
        /// </summary>
        private static void GAC_MSIL_Add()
        {
            streamWriter.WriteLine("開始添加 配置文件中 要添加到GAC中 的文件");
            if (configModel.ListDllModelsAdd!=null && configModel.ListDllModelsAdd.Count>0)
            {
                foreach (DllModel dllModel in configModel.ListDllModelsAdd)
                {
                    streamWriter.WriteLine(AddGacFile(dllModel));
                }
            }
            streamWriter.WriteLine("添加完畢");
        }

        /// <summary>
        ///     刪除
        /// </summary>
        private static void GAC_MSIL_Del()
        {
            streamWriter.WriteLine("開始刪除 配置文件中 要刪除的 GAC中文件");
            if (configModel.ListDllModelsDel != null && configModel.ListDllModelsDel.Count > 0)
            {
                foreach (DllModel dllModel in configModel.ListDllModelsDel)
                {
                    streamWriter.WriteLine(DelGacFile(dllModel.GetDllPath()));
                    streamWriter.WriteLine(DelGacDir(dllModel.GetDirPathTwo()));
                    streamWriter.WriteLine(DelGacDir(dllModel.GetDirPathOne()));
                }
            }
            streamWriter.WriteLine("刪除完畢");
            ////刪除本次要添加到GAC里面的DLL,不想覆蓋拷貝,避免產生不可預知的問題
            ////不需要執行。因為在刪除的時候第一級的大文件夾的名字是相同的,所以會將一個dll的所有版本都刪除的。
            //if (configModel.ListDllModelsAdd != null && configModel.ListDllModelsAdd.Count > 0)
            //{
            //    foreach (DllModel dllModel in configModel.ListDllModelsAdd)
            //    {
            //        streamWriter.WriteLine(DelGacFile(dllModel.GetDllPath()));
            //        streamWriter.WriteLine(DelGacDir(dllModel.GetDirPathTwo()));
            //        streamWriter.WriteLine(DelGacDir(dllModel.GetDirPathOne()));
            //    }
            //}


        }

        /// <summary>
        ///     加載
        /// </summary>
        private static void InitDllModels()
        {
            //del
            listDllModelsDel.Add(new DllModel("DevComponents.DotNetBar.Design", "11.8.0.4", "90f470f34c89ccaf"));
            listDllModelsDel.Add(new DllModel("DevComponents.DotNetBar.Keyboard", "11.8.0.4", "7eb7c3a35b91de04"));
            listDllModelsDel.Add(new DllModel("DevComponents.DotNetBar.Layout", "11.8.0.4", "7eb7c3a35b91de04"));
            listDllModelsDel.Add(new DllModel("DevComponents.DotNetBar.Layout.Design", "11.8.0.4", "7eb7c3a35b91de04"));
            listDllModelsDel.Add(new DllModel("DevComponents.DotNetBar.Schedule", "11.8.0.4", "7eb7c3a35b91de04"));
            listDllModelsDel.Add(new DllModel("DevComponents.DotNetBar.SuperGrid", "11.8.0.4", "7eb7c3a35b91de04"));
            listDllModelsDel.Add(new DllModel("DevComponents.DotNetBar2", "11.8.0.4", "7eb7c3a35b91de04"));
            listDllModelsDel.Add(new DllModel("DevComponents.Instrumentation", "11.8.0.4", "f90dc37c26666a67"));
            listDllModelsDel.Add(new DllModel("DevComponents.Instrumentation.Design", "11.8.0.4", "76cb4c6eb576bca5"));
            listDllModelsDel.Add(new DllModel("DevComponents.SuperGrid.Design", "11.8.0.4", "26d81176cfa2b486"));
            listDllModelsDel.Add(new DllModel("DevComponents.TreeGX", "11.8.0.4", "055db68f670cfeab"));


            //add
            listDllModelsAdd.Add(new DllModel("DevComponents.DotNetBar.Design", "11.8.0.4", "86742bc79fd2768a"));
            listDllModelsAdd.Add(new DllModel("DevComponents.DotNetBar.Keyboard", "11.8.0.4", "86742bc79fd2768a"));
            listDllModelsAdd.Add(new DllModel("DevComponents.DotNetBar.Layout", "11.8.0.4", "86742bc79fd2768a"));
            listDllModelsAdd.Add(new DllModel("DevComponents.DotNetBar.Layout.Design", "11.8.0.4", "86742bc79fd2768a"));
            listDllModelsAdd.Add(new DllModel("DevComponents.DotNetBar.Schedule", "11.8.0.4", "86742bc79fd2768a"));
            listDllModelsAdd.Add(new DllModel("DevComponents.DotNetBar.SuperGrid", "11.8.0.4", "86742bc79fd2768a"));
            listDllModelsAdd.Add(new DllModel("DevComponents.DotNetBar2", "11.8.0.4", "86742bc79fd2768a"));
            listDllModelsAdd.Add(new DllModel("DevComponents.Instrumentation", "11.8.0.4", "86742bc79fd2768a"));
            listDllModelsAdd.Add(new DllModel("DevComponents.Instrumentation.Design", "11.8.0.4", "86742bc79fd2768a"));
            listDllModelsAdd.Add(new DllModel("DevComponents.SuperGrid.Design", "11.8.0.4", "86742bc79fd2768a"));
            listDllModelsAdd.Add(new DllModel("DevComponents.TreeGX", "11.8.0.4", "86742bc79fd2768a"));


            configModel.ListDllModelsDel = listDllModelsDel;
            configModel.ListDllModelsAdd = listDllModelsAdd;


            configModel.ConfigFileName = Process.GetCurrentProcess().MainModule.FileName + ".gfl";

            SerializeHelper<ConfigModel>.XMLSerialze(configModel, configModel.ConfigFileName);
        }

        public bool SaveConfig()
        {
            bool isSaveOk = true;
            try
            {
                if (configModel != null)
                {
                    configModel.ConfigFileName = Process.GetCurrentProcess().MainModule.FileName + ".gfl";

                    SerializeHelper<ConfigModel>.XMLSerialze(configModel, configModel.ConfigFileName);
                }
            }
            catch (Exception)
            {
                isSaveOk = false;
            }


            return isSaveOk;
        }


        public static bool LoadConfig()
        {
            configModel.ConfigFileName = Process.GetCurrentProcess().MainModule.FileName + ".gfl";
            streamWriter.WriteLine("配置文件是"+configModel.ConfigFileName);
            bool isLoadOk = true;
            try
            {
                if (File.Exists(configModel.ConfigFileName))
                {
                    configModel = SerializeHelper<ConfigModel>.XMLDeserialze(configModel.ConfigFileName);
                    streamWriter.WriteLine("讀取配置文件成功");
                }
                else
                {
                    streamWriter.WriteLine("沒有發現配置文件");
                }
            }
            catch (Exception)
            {
                streamWriter.WriteLine("讀取配置文件失敗");
                isLoadOk = false;
            }

            return isLoadOk;
        }

        #region GAC

        /// <summary>
        ///     刪除GAC中文件夾
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static string DelGacDir(string str)
        {
            string environmentVariable = Environment.GetEnvironmentVariable("WINDIR");
            environmentVariable = string.Concat(environmentVariable, "\\assembly\\GAC_MSIL\\", str);

            if (Directory.Exists(environmentVariable))
            {
                Directory.Delete(environmentVariable, true);
                return str + " 文件夾從GAC中刪除成功";
            }
            return str + " 文件夾在GAC未發現,不處理,已跳過";
        }

        /// <summary>
        ///     刪除GAC中文件
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public static string DelGacFile(string fileName)
        {
            string environmentVariable = Environment.GetEnvironmentVariable("WINDIR");
            environmentVariable = string.Concat(environmentVariable, "\\assembly\\GAC_MSIL\\", fileName);
            if (File.Exists(environmentVariable))
            {
                File.Delete(environmentVariable);
                return fileName + " 從GAC中刪除成功";
            }
            return fileName + " 文件未加入GAC,不處理,已跳過";
        }

        /// <summary>
        /// 添加文件到GAC中
        /// </summary>
        /// <param name="dllModel"></param>
        /// <returns></returns>
        public static string AddGacFile(DllModel dllModel)
        {
            try
            {
                string environmentVariable = Environment.GetEnvironmentVariable("WINDIR");
                environmentVariable = string.Concat(environmentVariable, "\\assembly\\GAC_MSIL\\", Path.GetFileNameWithoutExtension(dllModel.GetDllNameWithDll()));
                Directory.CreateDirectory(environmentVariable);
                string str1 = environmentVariable;
                string[] strArrays = new string[] { str1, "\\", GetFileVersion(dllModel.GetDllNameWithDll()), "_", GetFileCultureInfo(dllModel.GetDllNameWithDll()), "_", dllModel.PublicKeyToken };
                environmentVariable = string.Concat(strArrays);
                Directory.CreateDirectory(environmentVariable);
                File.Copy(dllModel.GetDllNameWithDll(), string.Concat(environmentVariable, "\\", Path.GetFileName(dllModel.GetDllNameWithDll())), true);
            }
            catch (Exception exception)
            {
                return dllModel.GetDllNameWithDll() + " 加入GAC失敗" + exception.Message;
            }
            return dllModel.GetDllNameWithDll()+" 加入GAC成功";
        }

        public static string GetFileVersion(string str)
        {
            //Path.GetFileName(str);
            return AssemblyName.GetAssemblyName(str).Version.ToString();
        }

        public static string GetFileCultureInfo(string str)
        {
            //Path.GetFileName(str);
            return AssemblyName.GetAssemblyName(str).CultureInfo.Name;
        }
        #endregion GAC
    }
View Code


小工具【AddGAC_MSIL】下載地址

 

感覺本文對你有用,請點個贊哦^_^,推薦一下下。

建議關注tracky的博客和本人博客,獲取最新的DotNetBar補丁及安裝包。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM