推荐

  • 技术文摘c# 控制智能停车系统出入口道闸模块开关
  • 2021/3/31 11:45:37
  •         不通厂家的模块协议可能不一样,普遍通用,本次分享的是【康耐德】的模块;如果用到其他模块的朋友通过下面的介绍无法控制,那就要自己另寻他法了。协议:ModbusTCP一如既往,首先来张demo截图:        a、按钮上的1,2分别代表两个道闸;       b、接触过开关控制器的都知道,2路组成一个开关,如指令 1,0代表开;0,1代表关,同时发1,0,1,0代表两头都开,反之则都关​开始了,上代码。。。直接上完整代码,需要可运行exe完整源码或程序的联系我无偿提供:using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using ModbusTCP; using System.Collections; using System.Threading; namespace WindowsFormsApplication1 { public partial class Form1 : Form { private ModbusTCP.Master MBmaster; string StartAddress = "200"; //读取开始地址 string DOStartAddress = "100"; //写入接口开始地址 private bool RecvieMode_502 = false; string dataSize = "16";//长度 byte uiSlaveID = 255;// private int Recvie_Count = 0; string redIP = "172.16.1.237"; //红外控制器IP public Form1() { InitializeComponent(); } private void btnConnect_Click(object sender, EventArgs e) { redIP = txtIP.Text; if (RecvieMode_502) { return; } try { // Create new modbus master and add event functions MBmaster = new Master(redIP, 502); MBmaster.OnResponseData += new ModbusTCP.Master.ResponseData(MBmaster_OnResponseData); MBmaster.OnException += new ModbusTCP.Master.ExceptionData(MBmaster_OnException); RecvieMode_502 = true; MBmaster.autoConnectOfBreak = false; MessageBox.Show("连接成功!!"); } catch (SystemException error) { MessageBox.Show(error.Message); } } // ------------------------------------------------------------------------ // Event for response data // ------------------------------------------------------------------------ private void MBmaster_OnResponseData(ushort ID, byte function, byte[] values) { // ------------------------------------------------------------------ // Seperate calling threads if (this.InvokeRequired) { this.BeginInvoke(new ModbusTCP.Master.ResponseData(MBmaster_OnResponseData), new object[] { ID, function, values }); return; } // Ignore watchdog response data if (ID == 0xFF) return; // ------------------------------------------------------------------------ // Identify requested data ushort Func = ID; ++Recvie_Count; if (Recvie_Count > 100000000) { Recvie_Count = 1; } bool[] bits = new bool[1]; if (Func > 0) { // Convert data to selected data type richTextBox1.Clear(); if (null != values) { int i = 1; int dzNo = (i - 1) * 4; BitArray bitArray = new BitArray(values); bool[] bs = new bool[bitArray.Count]; bitArray.CopyTo(bs, 0); if (bs.Count(a => a == false) == 15) { return; } bool[] bitsArr = new bool[bitArray.Count]; for (int k = 0; k < bitArray.Count - dzNo; k++) { bitsArr[k] = bs[k + dzNo]; richTextBox1.AppendText(Convert.ToInt32(bitsArr[k]).ToString()); } bits = bitsArr; } //接收成功 if (richTextBox1.Visible && !richTextBox1.IsDisposed) { richTextBox1.AppendText(string.Format("\r\n红外接收结果:{0} {1} {2} {3}\r\n", bits[0], bits[1], bits[2], bits[3])); } #region //if (null != values) //{ // BitArray bitArray = new BitArray(values); // bits = new bool[bitArray.Count]; // bitArray.CopyTo(bits, 0); // for (int i = 0; i < bits.Length; i++) // { // richTextBox1.AppendText(Convert.ToInt32(bits[i]).ToString()); // } //} #endregion //接收成功 // MessageBox.Show(bits.Length.ToString()); } } #region 通讯常提示事件 // ------------------------------------------------------------------------ // Modbus TCP slave exception // ------------------------------------------------------------------------ private void MBmaster_OnException(ushort id, byte function, byte exception) { // ------------------------------------------------------------------ // Seperate calling threads if (this.InvokeRequired) { this.BeginInvoke(new ModbusTCP.Master.ExceptionData(MBmaster_OnException), new object[] { id, function, exception }); return; } string exc = "Modbus says error: "; switch (exception) { case Master.excIllegalFunction: exc += "Illegal function!"; break; case Master.excIllegalDataAdr: exc += "Illegal data adress!"; break; case Master.excIllegalDataVal: exc += "Illegal data value!"; break; case Master.excSlaveDeviceFailure: exc += "Slave device failure!"; break; case Master.excAck: exc += "Acknoledge!"; break; case Master.excSlaveIsBusy: exc += "Slave is busy!"; break; case Master.excGatePathUnavailable: exc += "Gateway path unavailbale!"; break; case Master.excExceptionTimeout: exc += "Slave timed out!"; break; } // LogHelper.WriteLog(this.GetType(), exc); } #endregion #region 读取点 private void btnReadDisInp_Click(object sender, EventArgs e) { ushort ID = 2; ushort StartAddress = ReadStartAdr(); ushort Length = Convert.ToUInt16(dataSize); MBmaster.ReadDiscreteInputs(ID, StartAddress, Length, uiSlaveID); } private ushort ReadStartAdr() { // Convert hex numbers into decimal if (StartAddress.IndexOf("0x", 0, StartAddress.Length) == 0) { string str = StartAddress.Replace("0x", ""); ushort hex = Convert.ToUInt16(str, 16); return hex; } else { return Convert.ToUInt16(StartAddress); } } #endregion private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { //ushort ID = 6; //ushort StartAddress = ReadStartAdr(); //data = GetData(Convert.ToByte(txtSize.Text)); //MBmaster.WriteMultipleCoils(ID, StartAddress, Convert.ToByte(txtSize.Text), data, GetSlaveID()); ChangDZ(Convert.ToInt32(textBox1.Text), Convert.ToBoolean(Convert.ToInt32(textBox2.Text)), Convert.ToBoolean(Convert.ToInt32(textBox3.Text))); } /// <summary> /// 开关道闸 /// </summary> /// <param name="dzNo"></param> /// <param name="b1"></param> /// <param name="b2"></param> private void ChangDZ(int dzNo, bool b1, bool b2) { ushort ID = 6; int sized = Convert.ToInt32(dataSize); ushort StartAddress = Convert.ToUInt16(DOStartAddress); byte[] data = new byte[sized]; bool[] bits = new bool[sized]; string s = richTextBox1.Text; int st = (dzNo - 1) * 2; bits[st] = b1; bits[st + 1] = b2; int dl = bits.Length / 8 + (bits.Length % 8 == 0 ? 0 : 1); data = new byte[dl]; BitArray ba = new BitArray(bits); ba.CopyTo(data, 0); if (MBmaster != null) { MBmaster.WriteMultipleCoils(ID, StartAddress, (ushort)sized, data, uiSlaveID); } } /// <summary> /// 开关道闸 /// </summary> /// <param name="b1">道闸1开</param> /// <param name="b2"> 1关</param> /// <param name="b3">2开</param> /// <param name="b4">2关</param> private void ChangDZ2(bool b1, bool b2, bool b3, bool b4) { lock (MBmaster) { int i = Convert.ToInt32(1); int dzNo = (i - 1) * 2 + 1; ushort ID = 6; int sized = Convert.ToInt32(dataSize); ushort StartAddress = Convert.ToUInt16(DOStartAddress); byte[] data = new byte[sized]; bool[] bits = new bool[sized]; string s = richTextBox1.Text; int st = (dzNo - 1) * 2; bits[st] = b1; bits[st + 1] = b2; bits[st + 2] = b3; bits[st + 3] = b4; int dl = bits.Length / 8 + (bits.Length % 8 == 0 ? 0 : 1); data = new byte[dl]; BitArray ba = new BitArray(bits); ba.CopyTo(data, 0); if (MBmaster != null) { MBmaster.WriteMultipleCoils(ID, StartAddress, (ushort)sized, data, uiSlaveID); } } } private void button2_Click(object sender, EventArgs e) { //ChangDZ(1,false, false); //ChangDZ(1,Convert.ToBoolean(Convert.ToInt32(textBox4.Text)), Convert.ToBoolean(Convert.ToInt32(textBox5.Text))); //ChangDZ(2, false, false); //ChangDZ(2, Convert.ToBoolean(Convert.ToInt32(textBox6.Text)), Convert.ToBoolean(Convert.ToInt32(textBox7.Text))); ChangDZ2(false, false, false, false); Thread.Sleep(3000); ChangDZ2(Convert.ToBoolean(Convert.ToInt32(textBox4.Text)), Convert.ToBoolean(Convert.ToInt32(textBox5.Text)), Convert.ToBoolean(Convert.ToInt32(textBox6.Text)), Convert.ToBoolean(Convert.ToInt32(textBox7.Text))); //Thread.Sleep(5); } private void btn_kg_Click(object sender, EventArgs e) { ChangDZ2(false, false, false, false); Thread.Sleep(getMiCeccond()); ChangDZ2(true, false, false, true); } /// <summary> /// 默认为两秒 /// </summary> /// <returns></returns> int getMiCeccond() { int a = 0; int.TryParse(textBox8.Text, out a); return a != 0 ? a : 2000; } private void btn_gk_Click(object sender, EventArgs e) { ChangDZ2(false, false, false, false); Thread.Sleep(getMiCeccond()); ChangDZ2(false, true, true, false); } private void btn_kk_Click(object sender, EventArgs e) { ChangDZ2(false, false, false, false); Thread.Sleep(getMiCeccond()); ChangDZ2(true, false, true, false); } private void btn_gg_Click(object sender, EventArgs e) { ChangDZ2(false, false, false, false); Thread.Sleep(getMiCeccond()); ChangDZ2(false, true, false, true); } private void btn_1k_Click(object sender, EventArgs e) { ChangDZ2(false, false, false, false); Thread.Sleep(getMiCeccond()); ChangDZ(1, true, false); } private void btn_1g_Click(object sender, EventArgs e) { ChangDZ2(false, false, false, false); Thread.Sleep(getMiCeccond()); ChangDZ(1, false, true); } private void btn_2k_Click(object sender, EventArgs e) { ChangDZ2(false, false, false, false); Thread.Sleep(getMiCeccond()); ChangDZ(2, true, false); } private void btn_2g_Click(object sender, EventArgs e) { ChangDZ2(false, false, false, false); Thread.Sleep(getMiCeccond()); ChangDZ(2, false, true); } } }
  • 评论:0 / 阅读:1193
  • 技术文摘c# 自定义加密解密工具,避免MD5加密不可逆或者DES对称加密容易被破解问题。
  • 2021/3/31 11:50:41
  • 不多说,直接上代码。。。↓↓↓↓↓↓↓↓↓↓↓↓↓↓1、定义8位的加密秘钥 /// <summary> /// 加密密钥(8位) /// </summary> public static string KEY_64 = "00000000";2、定义8位的初始化向量 /// <summary> /// 加密初始化向量(8位) /// </summary> public static string IV_64 = "88888888";3、通过初始化向量与加密秘钥生成加密内容 /// <summary> /// 加密 /// </summary> /// <param name="data"></param> /// <returns></returns> public static string Encode(string data) { byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64); byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64); DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider(); int i = cryptoProvider.KeySize; MemoryStream ms = new MemoryStream(); CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write); StreamWriter sw = new StreamWriter(cst); sw.Write(data); sw.Flush(); cst.FlushFinalBlock(); sw.Flush(); return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length).Replace("=", "φ"); }4、通过初始化向量与加密秘钥对加密内容进行解密 /// <summary> /// 解密 /// </summary> /// <param name="data"></param> /// <returns></returns> public static string Decode(string data) { try { byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64); byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64); byte[] byEnc; try { byEnc = Convert.FromBase64String(data.Replace("φ", "=")); } catch { return null; } DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider(); MemoryStream ms = new MemoryStream(byEnc); CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read); StreamReader sr = new StreamReader(cst); return sr.ReadToEnd(); } catch { return ""; } }5、到这里就大功告成啦!
  • 评论:0 / 阅读:1581
  • 技术文摘SqlServer,Mysql数据同步系统,适用于企业数据库做数据迁移。
  • 2021/3/31 11:51:15
  • 1、系统主界面​2、数据库连接配置,本地为sqlserver,服务器为mysql,如果是mysql迁移到sqlserver可以适当的修改源码就可以实现。​​3、支持部分表同步,需要同步哪些表自己进行设置​​4、同步日志查看,包括建表,同步了多少条数据,成功多少失败多少,未捕获的错误异常等等详细日志信息。​5、更多功能自行下载后运行查看即可。。。完整下载地址:https://download.csdn.net/download/xukai515786/11117125
  • 评论:0 / 阅读:1202
  • 网站公告关于站点启用HTTPS访问的通知
  • 2021/4/2 11:38:08
  • 各用户:  为进一步加强凯特云安全体系建设,加强对用户个人信息的安全保护,即日起本网站将启用https安全访问协议。请大家注意新的网站访问方式,相关注意事项通知如下:  1.正常情况下,用户在访问网站时无需做任何修改即可正常访问。  2.以主站为例,使用http://www.ktblog.top传统http模式访问时,浏览器会自动跳转到https://www.ktblog.top,建议更新收藏夹相关链接。
  • 评论:1 / 阅读:1687
  • 网站公告非法访问资源ip地址公布
  • 2021/4/7 11:40:27
  • 180.163.220.41.85.2.113
  • 评论:1 / 阅读:1421
  • 技术文摘不用写一句sql的ORM框架,支持多种数据库
  • 2021/4/12 11:59:22
  • 一、文件说明       Xk.Common.dll:框架周边的一些帮助类       Xk.ORM.dll:框架核心二、开始使用    1、简单粗暴的配置模式Cs类中:public static readonly DbSession DbHelper = new DbSession("MySqlConn");Web.config中:<add name="MySqlConn" providerName="Xk.ORM.MySql" connectionString="server=127.0.0.1;database=ormcms;uid=root;pwd=abc123123;oldsyntax=true;charset=utf8;Allow Zero Datetime=True;port=3306;" />    2、定义一个类文件(这个文件可以自己用代码生成器生成,后面会开放下载)//------------------------------------------------------------------------------ // // 此代码由工具生成: // 生成时间:2021/3/17 // 创建人:XuKai // using System; using Xk.ORM; namespace CMS.Models { /// /// *实体类:ktcfriendlink /// [Table("ktcfriendlink")] [Serializable] public partial class Ktcfriendlink : Entity { #region Model private int _Id; /// /// 主键id /// [Field("id")] public int Id { get { return _Id; } set { this.OnPropertyValueChange("id"); this._Id = value; } } private string _Title; /// /// 友链标题 /// [Field("title")] public string Title { get { return _Title; } set { this.OnPropertyValueChange("title"); this._Title = value; } } private string _Desc; /// /// 描述 /// [Field("desc")] public string Desc { get { return _Desc; } set { this.OnPropertyValueChange("desc"); this._Desc = value; } } private string _Url; /// /// 友链地址 /// [Field("url")] public string Url { get { return _Url; } set { this.OnPropertyValueChange("url"); this._Url = value; } } private int _Status; /// /// 1 通过,2 不通过,0 未审核 /// [Field("status")] public int Status { get { return _Status; } set { this.OnPropertyValueChange("status"); this._Status = value; } } private DateTime _Createtime; /// /// 创建时间 /// [Field("createtime")] public DateTime Createtime { get { return _Createtime; } set { this.OnPropertyValueChange("createtime"); this._Createtime = value; } } private DateTime _Authtime; /// /// 审核时间 /// [Field("authtime")] public DateTime Authtime { get { return _Authtime; } set { this.OnPropertyValueChange("authtime"); this._Authtime = value; } } private string _Askdesc; /// /// 申请描述 /// [Field("askdesc")] public string Askdesc { get { return _Askdesc; } set { this.OnPropertyValueChange("askdesc"); this._Askdesc = value; } } private string _Imgurl; /// /// 友链图片封面 /// [Field("imgurl")] public string Imgurl { get { return _Imgurl; } set { this.OnPropertyValueChange("imgurl"); this._Imgurl = value; } } private int _Index; /// /// 排序 /// [Field("index")] public int Index { get { return _Index; } set { this.OnPropertyValueChange("index"); this._Index = value; } } private int _Isimg; /// /// 是否为图片链接,1 是,0 否(文本) /// [Field("isimg")] public int Isimg { get { return _Isimg; } set { this.OnPropertyValueChange("isimg"); this._Isimg = value; } } private string _Email; /// /// 对方的站点url /// [Field("email")] public string Email { get { return _Email; } set { this.OnPropertyValueChange("email"); this._Email = value; } } #endregion #region Method /// /// 获取实体中的主键列 /// public override Field[] GetPrimaryKeyFields() { return new Field[] { _.Id, }; } /// /// 获取列信息 /// public override Field[] GetFields() { return new Field[] { _.Id, _.Title, _.Desc, _.Url, _.Status, _.Createtime, _.Authtime, _.Askdesc, _.Imgurl, _.Index, _.Isimg, _.Email }; } /// /// 获取值信息 /// public override object[] GetValues() { return new object[] { this._Id, this._Title, this._Desc, this._Url, this._Status, this._Createtime, this._Authtime, this._Askdesc, this._Imgurl, this._Index, this._Isimg, this._Email }; } #endregion #region _Field /// /// 字段信息 /// public class _ { /// /// * /// public readonly static Field All = new Field("*", "ktcfriendlink"); /// /// 主键id /// public readonly static Field Id = new Field("id", "ktcfriendlink"); /// /// 友链标题 /// public readonly static Field Title = new Field("title", "ktcfriendlink"); /// /// 描述 /// public readonly static Field Desc = new Field("desc", "ktcfriendlink"); /// /// 友链地址 /// public readonly static Field Url = new Field("url", "ktcfriendlink"); /// /// 1 通过,2 不通过,0 未审核 /// public readonly static Field Status = new Field("status", "ktcfriendlink"); /// /// 创建时间 /// public readonly static Field Createtime = new Field("createtime", "ktcfriendlink"); /// /// 审核时间 /// public readonly static Field Authtime = new Field("authtime", "ktcfriendlink"); /// /// 申请描述 /// public readonly static Field Askdesc = new Field("askdesc", "ktcfriendlink"); /// /// 友链图片封面 /// public readonly static Field Imgurl = new Field("imgurl", "ktcfriendlink"); /// /// 排序 /// public readonly static Field Index = new Field("index", "ktcfriendlink"); /// /// 是否为图片链接,1 是,0 否(文本) /// public readonly static Field Isimg = new Field("isimg", "ktcfriendlink"); /// /// 对方的联系邮箱 /// public readonly static Field Email = new Field("email", "ktcfriendlink"); } #endregion } }     3、cuid操作int i = 0; DbHelper.From<Ktcfriendlink>();//查询表所有数据 DbHelper.From<Ktcfriendlink>().Where(t => t.Id == 1);//条件id为1的数据,参数遵循linq语法。 DbHelper.From<Ktcfriendlink>().Where(new WhereClip("id = 1"));//条件id为1的数据,WhereClip参数也有很多种写法。 Ktcfriendlink model = new Ktcfriendlink(); model.Title = "baidu"; model.Url = "www.baidu.com"; i = DbHelper.Insert(model);//插入一条数据 i = DbHelper.Delete(a => a.Id == 1);//删除id为1的数据 model.Title = "taobao"; i = DbHelper.Update(model); DbHelper.FromProc("procname");//可以执行存储过程 DbTrans trans = DbHelper.BeginTransaction();//执行事务 try { trans.Update(Ktcfriendlink._.Title, "google", a => a.Id == 1); trans.Update(Ktcfriendlink._.Title, "yahoo", a => a.Id == 2); trans.Commit();//提交事务 } catch { trans.Rollback();//回滚事务 } finally { trans.Close(); } Ktcfriendlink model = new Ktcfriendlink(); model.Title = "baidu"; model.Url = "www.baidu.com"; i = DbHelper.Insert(model);//插入一条数据 i = DbHelper.Delete(a => a.Id == 1);//删除id为1的数据 model.Title = "taobao"; i = DbHelper.Update(model); DbHelper.FromProc("procname");//可以执行存储过程 DbTrans trans = DbHelper.BeginTransaction();//执行事务 try { trans.Update(Ktcfriendlink._.Title, "google", a => a.Id == 1); trans.Update(Ktcfriendlink._.Title, "yahoo", a => a.Id == 2); trans.Commit();//提交事务 } catch { trans.Rollback();//回滚事务 } finally { trans.Close(); } DbHelper.From().Where(new WhereClip("id = 1"));//条件id为1的数据,WhereClip参数也有很多种写法。 Ktcfriendlink model = new Ktcfriendlink(); model.Title = "baidu"; model.Url = "www.baidu.com"; i = DbHelper.Insert(model);//插入一条数据 i = DbHelper.Delete(a => a.Id == 1);//删除id为1的数据 model.Title = "taobao"; i = DbHelper.Update(model); DbHelper.FromProc("procname");//可以执行存储过程 DbTrans trans = DbHelper.BeginTransaction();//执行事务 try { trans.Update(Ktcfriendlink._.Title, "google", a => a.Id == 1); trans.Update(Ktcfriendlink._.Title, "yahoo", a => a.Id == 2); trans.Commit();//提交事务 } catch { trans.Rollback();//回滚事务 } finally { trans.Close(); } DbHelper.From().Where(t => t.Id == 1);//条件id为1的数据,参数遵循linq语法。 DbHelper.From().Where(new WhereClip("id = 1"));//条件id为1的数据,WhereClip参数也有很多种写法。 Ktcfriendlink model = new Ktcfriendlink(); model.Title = "baidu"; model.Url = "www.baidu.com"; i = DbHelper.Insert(model);//插入一条数据 i = DbHelper.Delete(a => a.Id == 1);//删除id为1的数据 model.Title = "taobao"; i = DbHelper.Update(model); DbHelper.FromProc("procname");//可以执行存储过程 DbTrans trans = DbHelper.BeginTransaction();//执行事务 try { trans.Update(Ktcfriendlink._.Title, "google", a => a.Id == 1); trans.Update(Ktcfriendlink._.Title, "yahoo", a => a.Id == 2); trans.Commit();//提交事务 } catch { trans.Rollback();//回滚事务 } finally { trans.Close(); }框架后期整理好后开放下载,欢迎广大.net ORM爱好者使用
  • 评论:1 / 阅读:1353
  • 经验分享vs2019 安装时速度0kb,下载不了解决方案
  • 2021/4/14 15:17:03
  • vs2019安装无法进行
  • 问题:今天想装下高版本的vs,于是直接到官网下载了个vs2019 ,结果发现双击安装的时候一直卡住不动,提取文件速度0kb.解决方案:       关掉上面的下载窗口,到电脑网络适配器中,把正在用使的本地连接禁用后数秒重新启用,然后再次双击vs_community__4307803.1618383150.exe,会惊奇的发现居然可以下载了。       以上观点只是本人真实遇到的情况与解决方案,若解决不了您的问题,请另寻他法。
  • 评论:0 / 阅读:1199
  • 经验分享nuget中 Microsoft.NETCore.App/3.1 还原包超时问题
  • 2021/4/15 9:43:01
  • nuget未能还原引用包问题
  • nuget未能还原解决方案:       工具/Nuget包管理器/程序包管理器设置=》将程序包源加上【https://api.nuget.org/v3/index.json】,并设为启用优先保存重新再编译使用自动还原包即可。如下图
  • 评论:0 / 阅读:993
  • 经验分享win7下运行nodejs的npm命令报错Error: ENOENT
  • 2021/4/15 10:16:44
  • Error: ENOENT, stat 'C:\Users\Administrator\AppData\Roaming\npm'
  • 安装好node.js引擎后,命令窗口下尝试输入npm回车,结果报异常【Error: ENOENT, stat 'C:\Users\Administrator\AppData\Roaming\npm'】如下 出现上面错误表示指定的路径不存在,只用在C:\Users\Administrator\AppData\Roaming\下创建npm文件夹即可。创建好文件夹后再次输入npm指令回车。久违的nodejs系统提示出来了,问题解决。
  • 评论:0 / 阅读:1165
  • 经验分享vs 修改css格式化展示方式为一行
  • 2021/4/16 9:59:45
  • visual studio格式化css为一行显示
  • 一般情况下,vs IDE自动格式化css的样式为以下这种展示方式: body, p { font-family: sans-serif,fantasy; overflow: hidden; margin: 0; padding: 0; } .msg-container { margin: 90px; position: relative; }看上去结构比较清晰,但是当样式写多了,滚动条会很长,有时也挺麻烦的,那么怎么修改其格式化展示的方式呢?依次点击:工具=》选项=》文本编辑器=》css=》高级,进行如下设置即可。
  • 评论:0 / 阅读:1103