这是微软官方提供的解决方案,支持简体中午,繁体中文,韩语和日语。

需要安装依赖的 Visual Studio International Pack

下载地址:https://www.microsoft.com/zh-CN/download/details.aspx?id=15251

using System;
using System.Data;
using System.Configuration;
using Microsoft.International.Converters.PinYinConverter;

namespace Utility.Convert
{
    /// <summary>
    ///ChineseConvert 的摘要说明
    /// </summary>
    public class ChineseConvert
    {
        public ChineseConvert() { }

        /// <summary>
        /// 汉字转化为拼音
        /// </summary>
        /// <param name="str">汉字</param>
        /// <returns>全拼</returns>
        public static string GetPinyin(string str)
        {
            string r = string.Empty;
            foreach (char obj in str)
            {
                try
                {
                    ChineseChar chineseChar = new ChineseChar(obj);
                    string t = chineseChar.Pinyins[0].ToString();
                    r += t.Substring(0, t.Length - 1);
                }
                catch
                {
                    r += obj.ToString();
                }
            }
            return r;
        }

        /// <summary>
        /// 汉字转化为拼音首字母
        /// </summary>
        /// <param name="str">汉字</param>
        /// <returns>首字母</returns>
        public static string GetFirstPinyin(string str)
        {
            string r = string.Empty;
            foreach (char obj in str)
            {
                try
                {
                    ChineseChar chineseChar = new ChineseChar(obj);
                    string t = chineseChar.Pinyins[0].ToString();
                    r += t.Substring(0, 1);
                }
                catch
                {
                    r += obj.ToString();
                }
            }
            return r;
        }

    }
}

/// <summary>
/// 判断是否是图片
/// </summary>
public static bool IsPicture(Stream stream)
{
	try
	{
		byte[] buffer = new byte[2];
		stream.Read(buffer, 0, 2);
		string fileClass = buffer[0].ToString() + buffer[1].ToString();

		//255216是jpg;7173是gif;6677是BMP,13780是PNG;7790是exe,8297是rar   
		string[] fileType = { "255216", "7173", "13780", "6677" };
		return fileType.Contains(fileClass);
	}
	catch
	{
		return false;
	}
}

public class FileUtil
{
	[DllImport("kernel32.dll")]
	private static extern IntPtr _lopen(string lpPathName, int iReadWrite);

	[DllImport("kernel32.dll")]
	public static extern bool CloseHandle(IntPtr hHandle);


	private const int OF_READWRITE = 2;
	private const int OF_SHARE_DENY_NONE = 0x40;
	private static readonly IntPtr HFILE_ERROR = new IntPtr(-1);
	
	/// <summary>
	/// 查看文件是否被占用
	/// </summary>
	/// <param name="filePath">文件路径</param>
	/// <returns></returns>
	public static bool IsOccupied(string filePath)
	{
		IntPtr vHandle = _lopen(filePath, OF_READWRITE | OF_SHARE_DENY_NONE);
		if(vHandle == HFILE_ERROR)
		{
			return true;
		}
		CloseHandle(vHandle);
		return false;
	}
}

微软官方从.NET Framework 4之后不再支持System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(string password, string passwordFormat)方法。MD5加密需要自行实现。需要注意的是该方法加密结果是小写,而
HashPasswordForStoringInConfigFile加密结果是大写

public static string MD5Encrypt(string input)
{
	StringBuilder builder = new StringBuilder();
        using (MD5CryptoServiceProvider md5Crypto = new MD5CryptoServiceProvider())
        {
            byte[] data = md5Crypto.ComputeHash(Encoding.UTF8.GetBytes(input));
            for (int i = 0; i < data.Length; i++)
            {
                builder.Append(data[i].ToString("x2"));
            }
        }
        return builder.ToString();
}

using System;
using System.Text;
using System.Security.Cryptography;

namespace Utility.Security
{
    /// <summary>
    /// DES加密/解密类。
    /// </summary>
    public class DESEncrypt
    {
        /// <summary> 
        /// 加密数据 
        /// </summary> 
        public static string Encrypt(string Text, string sKey)
        {
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            byte[] inputByteArray;
            inputByteArray = Encoding.Default.GetBytes(Text);
            des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
            des.IV = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            StringBuilder ret = new StringBuilder();
            foreach (byte b in ms.ToArray())
            {
                ret.AppendFormat("{0:X2}", b);
            }
            return ret.ToString();
        }

        /// <summary> 
        /// 解密数据 
        /// </summary> 
        public static string Decrypt(string Text, string sKey)
        {
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            int len;
            len = Text.Length / 2;
            byte[] inputByteArray = new byte[len];
            int x, i;
            for (x = 0; x < len; x++)
            {
                i = Convert.ToInt32(Text.Substring(x * 2, 2), 16);
                inputByteArray[x] = (byte)i;
            }
            des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
            des.IV = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            return Encoding.Default.GetString(ms.ToArray());
        }
    }
}

关于内核版本的定义:

版本性质:主分支ml(mainline),稳定版(stable),长期维护版lt(longterm)

版本命名格式为 “A.B.C”:

数字 A 是内核版本号:版本号只有在代码和内核的概念有重大改变的时候才会改变,历史上有两次变化:
数字 B 是内核主版本号:主版本号根据传统的奇-偶系统版本编号来分配:奇数为开发版,偶数为稳定版
数字 C 是内核次版本号:次版本号是无论在内核增加安全补丁、修复bug、实现新的特性或者驱动时都会改变

1、查看当前系统内核版本

uname -r

3.10.0-514.el7.x86_64

2、升级内核

升级内核需要先导入elrepo的key,然后安装elrepo的yum源:

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
yum install -y https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm

如果要安装ml内核,使用如下命令:

yum --enablerepo=elrepo-kernel -y install kernel-ml-devel kernel-ml

如果要安装lt内核,使用如下命令:

yum --enablerepo=elrepo-kernel -y install kernel-lt-devel kernel-lt

3、设置为默认内核

grub2-set-default 0
grub2-mkconfig -o /boot/grub2/grub.cfg 

4、删除旧的内核

查看已安装的内核

rpm -qa | grep kernel

删除旧内核

yum remove 内核名称

5、安装新版本工具包(可选操作)

移除旧版本

yum remove kernel-tools-libs kernel-tools -y

安装新版本

如果安装ml版本执行:

yum --disablerepo=* --enablerepo=elrepo-kernel install kernel-ml-tools

如果安装lt版本执行:

yum --disablerepo=* --enablerepo=elrepo-kernel install kernel-lt-tools

6、reboot重启机器,然后查看内核版本

uname -r

5.3.8-1.el7.elrepo.x86_64

由于IE 家族jscript不支持find,需要而外代码实现Array属性find的扩展

if (!Array.prototype.find) {
     Array.prototype.find = function (callback) {
         for(var i in this){
             if (callback(this[i], i, this)) {
                 return this[i];
             }
         }
         return null;
     }
 }

function downloadBase64(base64, fileName) {
	base64 = base64.replace(/.+;base64,/, '');
	var byteCharacters = atob(base64);
	var byteNumbers = new Array(byteCharacters.length);
	for (var i = 0; i < byteCharacters.length; i++) {
		byteNumbers[i] = byteCharacters.charCodeAt(i);
	}
	var byteArray = new Uint8Array(byteNumbers);
	var blob = new Blob([byteArray], { type: 'application/octet-stream' });
	if (navigator.msSaveOrOpenBlob) {// if IE
		navigator.msSaveBlob(blob, fileName);
	} else { //if not IE
		var link = document.createElement('a');
		link.href = window.URL.createObjectURL(blob);
		link.download = fileName;
		link.click();
		window.URL.revokeObjectURL(link.href);
	}
}