Visual Studio 2005的那些事儿
创始人
2024-06-27 11:01:15
0次

【51CTO独家特稿】2010年4月12日是微软Visual Studio 2010正式版发布的日子。作为Visual Studio的用户,您是否还记得自己使用的第一个Visual Studio版本?是否还记得CODE出第一段代码时的兴奋?是否还记得那无数个寻找Bug的日日夜夜?51CTO开发频道带您一起走进Visual Studio历史,今天我们要介绍的是——Visual Studio 2008。

前言:4月份就要发布Visual Studio2010了,它的Beta2版我已经从网上下载下来尝鲜了,对于普通开发人员来说,VS2010与时俱进地增加了很多新的特性以适应新的开发要求,比如增加了多定向支持、并行计算和云计算等,并且在VS2010中也针对VC++做了很大的支持。

作为一个.NET开发人员,我经历了支持.NET开发的VS的各个版本。下面一个开发人员的角度来谈谈我对Visual Studio 2005的感受。

记得最早我练习ASP.NET是用Dreamweaver来练习的,C#代码和HTML都在一个ASPX页面中,很不方便管理。后来别人向我介绍了VS2002,这是第一个支持.NET开发VS开发工具,它所支持的.NET版本是.NET 1.0。它采用了网页与代码分离的模式,是开发人员可以将主要注意力放在业务逻辑处理上,大大提高了开发速度。

Visual Studio 2002推出没多久微软就推出了Visual Studio 2003,Visual Studio 2003支持的.NET版本是.NET 1.1,普通的开发人员可能都不知道Visual Studio 2002与Visual Studio 2003及.NET 1.0与.NET 1.1之间有哪些区别。

Visual Studio 2005的当年的推出让大家马上感觉到有很大的变化,有点耳目一新的感觉。

在编程语法特性上增加了泛型、可空类型等。

泛型

在Visual Studio 2005以前即使遇到特定集合类型,也只能使用通用的集合类型来存储,这样一来在集合中存取值类型数据时存在着装箱和拆箱过程,而且由于在.NET1.1中集合类型被设计成用来存储object对象,所以无法对存入的数据的类型进行保证,在Visual Studio 2005中这个得到了解决,那就是泛型集合。

例如,在Visual Studio 2003中的实现:

  1. ///  
  2. /// 使用ArrayList的例子  
  3. /// summary> 
  4. public void ArrayListDemo()  
  5. {  
  6.     //声明一个集合,只存储int类型数据  
  7.     ArrayList integerList = new ArrayList();  
  8.     integerList.Add(1);//没有问题  
  9.     integerList.Add("one");//可以添加  
  10.  
  11.     for (int i = 0; i < integerList.Count; i++)  
  12.     {  
  13.         int value = (int)integerList[i];//对第二个数操作时会抛出异常  
  14.     }  
  15. }  
  16. 在Visual Studio 2005中的实现:  
  17. ///  
  18. /// 使用泛型集合的例子  
  19. /// summary> 
  20. public void ListDemo()  
  21. {  
  22.     //声明一个只存储int类型数据的泛型集合  
  23.     List integerList = new List();  
  24.     integerList.Add(1);//没有问题  
  25.     //integerList.Add("one");//此句不能编译通过  
  26.  
  27.     for (int i = 0; i < integerList.Count; i++)  
  28.     {  
  29.         int value = integerList[i];//此处无需做类型转换  
  30.     }  
  31. } 

 

using关键字

using关键是用引入命名空间之外,在Visual Studio 2005中还可以用来释放一些实现了IDisposable接口的类,using 语句按照正确的方式调用对象上的 Dispose 方法,并(在您按照前面所示方式使用它时)会导致在调用 Dispose 时对象自身处于范围之外。在 using 块中,对象是只读的并且无法进行修改或重新分配。using 语句确保调用 Dispose,即使在调用对象上的方法时发生异常也是如此。通过将对象放入 try 块中,并在调用 finally 块中的 Dispose,可以获得相同的结果;实际上,这就是编译器转换 using 语句的方式。

比如执行对数据库的增删改查操作,在Visual Studio 2005以前我们可能会这么写:

  1. ///  
  2. /// 执行Update/Delete/Insert类型的SQL语句,并返回受影响的行数  
  3. /// summary> 
  4. /// 要执行的Update/Delete/Insert类型的SQL语句param> 
  5. /// 执行SQL语句的类型,如是文本型还是存储过程param> 
  6. /// 执行存储过程时所需要的参数param> 
  7. /// returns> 
  8. public int ExecuteNonQuery(string sql, CommandType commandType, SqlParameter[] parameters)  
  9. {  
  10. //定义SqlConnection对象  
  11. SqlConnection connection = null;  
  12. //定义SqlCommand对象  
  13. SqlCommand command = null;  
  14. //定义执行语句之后受影响的行数  
  15. int affectedRows = 0;  
  16. try  
  17. {  
  18.     connection = new SqlConnection(connectionString);  
  19.     command = new SqlCommand(sql, connection);  
  20.     foreach (SqlParameter parameter in parameters)  
  21.     {  
  22.         command.Parameters.Add(parameter);  
  23.     }  
  24. command.CommandType = commandType;  
  25.     connection.Open();//打开连接  
  26.     //执行对数据库的操作  
  27.     affectedRows = command.ExecuteNonQuery();  
  28. }  
  29. finally//在finally中执行关闭和释放SqlConnection及SqlCommand的操作  
  30. {  
  31.     if (connection != null && connection.State == ConnectionState.Open)  
  32.     {  
  33.         connection.Close();  
  34.     }  
  35.     if (command != null)  
  36.     {  
  37.         command.Dispose();  
  38.     }  
  39. }  
  40. return affectedRows;  
  41. }  
  42. 在Visual Studio 2005中我们完全可以这么写:  
  43. ///  
  44. /// 执行Update/Delete/Insert类型的SQL语句,并返回受影响的行数  
  45. /// summary> 
  46. /// 要执行的Update/Delete/Insert类型的SQL语句param> 
  47. /// 执行SQL语句的类型,如是文本型还是存储过程param> 
  48. /// 执行存储过程时所需要的参数param> 
  49. /// returns> 
  50. public int ExecuteNonQuery(string sql, CommandType commandType, SqlParameter[] parameters)  
  51. {  
  52. //定义执行语句之后受影响的行数  
  53. int affectedRows = 0;  
  54. using (SqlConnection connection = new SqlConnection(connectionString))  
  55. {  
  56.     using (SqlCommand command = new SqlCommand(sql, connection))  
  57.     {  
  58.         command.CommandType = commandType;  
  59.         foreach (SqlParameter parameter in parameters)  
  60.         {  
  61.             command.Parameters.Add(parameter);  
  62.         }  
  63.         connection.Open();//打开连接  
  64.         //执行对数据库的操作  
  65.         affectedRows = command.ExecuteNonQuery();  
  66.     }  
  67. }  
  68. return affectedRows;  
  69. } 

 

通过是用using语句大家可以明显看出代码更简洁了,并且是用using语句之后的效果和使用try{}finally{}的效果是一样的。

安全的类型转换

在开发中经常存在一些转换,比如从字符串类型转换成数值类型及从一种引用类型转换成另一种引用类型,在早期的版本中一旦出现不能转换的情况就会抛出异常,实际上系统处理异常的开销比较大,因而没有必要在所有情况下都抛出异常,在Visual Studio 2005中针对这种情况进行了改进。

如下:

  1. ///  
  2. /// VS2003中的写法  
  3. /// summary> 
  4. public void VS2003()  
  5. {  
  6.     int version1 = 0;  
  7.     //下面的转换如果不成功就会抛出异常  
  8.     version1 = int.Parse("zhoufoxcn");//这句会抛出异常  
  9.  
  10.     object str = "Hello Visual Studio 2005";  
  11.     //下面转换如果失败就会抛出异常  
  12.     Button btn = (Button)str;//因为string类型与Button类型之间不能转换,所以会抛出异常  
  13.       
  14. }  
  15. ///  
  16. /// Visual Studio 2005及更高版本的做法  
  17. /// summary> 
  18. public void Visual Studio 2005()  
  19. {  
  20.     int version2;  
  21.     //如果转换成功parseSuccess为true,version2为对应字符串转换成的数值  
  22.     //如果转换不成功则parseSuccess为false,version2的值不可用  
  23.     bool parseSuccess = int.TryParse("zhoufoxcn", out version2);//这句永远不会抛出异常  
  24.     if (parseSuccess)  
  25.     {  
  26.         //这里使用转换后的数值  
  27.     }  
  28.  
  29.     object str = "Hello Visual Studio 2005";  
  30.     //下面转换如果成功则btn不为null  
  31.     //如果不成功则btn为null,但是不会抛出异常  
  32.     Button btn = str as Button;//因为string类型与Button类型之间不能转换,所以btn为null  
  33.     if (btn != null)  
  34.     {  
  35.         //这里处理能转换的情况  
  36.     }  
  37. } 

 

局部类

在Visual Studio 2005中还引入了局部类的概念,这样对一个类的定义可以放在多个物理文件中,在编译的时候编译器会自动将属于统一个类的代码编译成一个完整的类定义。

如下面的代码:

  1. ///   
  2. /// Person类的部分定义1,物理文件名为Person1.cs  
  3. ///   
  4. public partial class Person  
  5. {  
  6.     public int Age { get; set; }  
  7. }  
  8. ///   
  9. /// Person类的部分定义2,物理文件名为Person2.cs  
  10. ///   
  11. public partial class Person  
  12. {  
  13.     public string Name { get; set; }  
  14. } 

 

编译的时候会将这两部分编译到一个完整的类定义中,最终编译的Person类总会有Age和Name两个属性。这种情况应用在WinForm开发和ASP.NET开发中都有体现,在WinForm中假如有一个窗体名为Form1,那么就有Form1.cs和Form1.designer.cs两个物理文件都是Form1类的局部类。在ASP.NET中一个ASPX页面对应的aspx.cs也是一个局部类。使用局部类的好处是可以将展示代码和逻辑代码分开,最终编译时会生成一个完整的类的定义。

在ASP.NET开发中也增加了很多亮点,比如增强了可视化编程,在VS2003中用户控件在被使用的页面处于设计视图下不是可视化的,只能在运行后才能看到用户控件最终的样子,这个在开发时多少有些不方便。除此之外还增加了如下功能:增加了ASP.NET Development Server组件、内置文件夹、母版页及主题等。

ASP.NET Development Server

 

图 ASP.NET Development Server

在VS2002及VS2003中开发ASP.NET应用程序只能使用IIS,每个ASP.NET应用都会作为IIS的一个网站或者虚拟目录,因为开发者的机器上必须安装IIS,而且最好按照先安装IIS再安装VS的步骤进行,否则就需要向IIS注册.NET Framework(早年我曾经为这个问题抓狂过,所以我在《ASP.NET夜话》第一章中特地说了这个注意事项)。而且使用这种开发,部署和调试都不是太方便,因为默认的ASP.NET应用会在IIS根目录下创建虚拟目录,如果没有更改的话一点系统出现问题不能启动恐怕你的代码也不好找回来了(这种情况我也遇见过)。

在Visual Studio 2005中内置了ASP.NET Development Server这个组件,这样开发者的机器上就不必再安装IIS了,而且我们可以基于文件系统开发,这样我们可以任意指定ASP.NET应用程序的存放位置,这样调试和部署起来就相当方便了,源代码管理也很方便。自从出现了ASP.NET Development Server这个组件之后很多ASP.NET开发人员甚至干脆不在开发的机器上安装IIS这个组件了,取而代之的就是ASP.NET Development Server这个组件(如果部署ASP.NET应用仍需要专业的Web服务器)。

母版页

在我们做Web应用的时候,经常会遇到一些页面之间有很多相同的显示部分和行为,如果每个页面都去重复编写这些代码,那就是一件非常麻烦的事情。因此在ASP.NET2.0中提出了母板页的概念,我们可以把多个页面之间相同的行为和显示部分放到母板页中,只需要为每个页面编写不同的部分即可,这样如果我们对公共部分需要变化仅仅更改母板页就能达到目的。母板页的文件后缀名为.master,一个网站中允许定义多个母板页。

母板页不能单独呈现,也就是我们不能在浏览器中直接输入母板页的url地址进行访问,必须依赖于内容页才能呈现。

下面是新建一个母板页的源代码:

  1. <%@ Master Language="C#" AutoEventWireup="true" CodeFile="FrontPage.master.cs" Inherits="FrontPage" %> 
  2.  
  3. > 
  4.  
  5.  
  6.  
  7.     无标题页title> </li><li>head> </li><li class="alt"><body> </li><li>    <form id="form1" runat="server"> </li><li class="alt">    <div> </li><li>        <asp:contentplaceholder id="ContentPlaceHolder1" runat="server"> </li><li class="alt">        asp:contentplaceholder> </li><li>    div> </li><li class="alt">    form> </li><li>body> </li><li class="alt">html> </li></ol></pre> <p> </p> <p>在母板页中有一个“</asp:contentplaceholder>”标记,这相当于一个占位标记,将来使用了这个母板页的内容页中的内容将在这个标记中显示。因为母板页已经包含了 <form runat="”server”">   </form> 标记,所以内容页中不允许再出现这些标记。</p> <p>而一个内容页的代码如下:</p> <pre><ol class="dp-xml"><li class="alt"><%@ Page Language="C#" MasterPageFile="~/FrontPage.master" AutoEventWireup="true" </li><li class="alt">CodeFile="MyPage.aspx.cs" Inherits="MyPage" Title="Untitled Page" %> </li><li><asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> </li><li class="alt">asp:Content> </li></ol></pre> <p> </p> <p>在内容页中有一个</asp:content>标记,内容页的代码只有放在这个标记之间的代码将来运行时才会可见。</p> <p>通过母版页使我们在一组页面间共享结构和内容更加方便。</p> <p><strong>内置文件夹</strong></p> <p>如果我们使用Visual Studio 2005及更高版本,我们可能会注意到以下情况:</p> <p align="center"><img height="237" alt="文件目录" width="239" border="0" src="https://files.pic99.top/shayuweb/202406/4c47b3ff4e24d02.jpg" /></p> <p>  </p> <p>可以看到同样是文件夹,App_Data目录和js目录的图标在Visual Studio 2005中就是不一样,像App_Data这类文件夹的就是内置文件夹,在运行的时候Web服务器会对这类文件夹有特殊的措施,比如像App_Data这类文件夹是不能直接在浏览器地址栏里输入URL进行访问的。这样如果我们采用的是文件型数据库的话(如Access),我们就可以将mdb文件放到这个文件夹下,这样即使别人知道URL地址正确的URL地址也没有办法通过URL来下载,而在Visual Studio 2005及以前版本中,我们只能通过其它办法保护自己的敏感数据了。</p> <p><strong>更方便的ASP.NET应用程序发布方式</strong></p> <p>在VS2002和VS2003中没有提供脱离源代码发布ASP.NET应用的方式,这样一来开发的ASP.NET就需要将源代码连同项目一起提供给使用者(个人客户或者公司客户),这样一来整个项目的细节全部暴露给了使用者,而现在软件公司的开发模式基本上都是不提供源代码给使用者,所以在早期很多开发人员都在想办法让ASP.NET应用程序中的cs文件编译进dll中发布,早期笔者也曾经这么做过,配置和操作过程比较复杂,而在Visual Studio 2005中这个就不再是问题了,在Visual Studio 2005中可以一键解决这个问题。</p> <p>在Visual Studio 2005中鼠标右键点击ASP.NET应用项目,在弹出的菜单中选择“发布网站”就会弹出发布网站的对话框,选择一个目录之后就可以发布了。发布网站成功之后就可以将发布成功后的文件夹(包含了整个ASP.NET应用正确运行的全部资源,如css、javascript、html和ASPX及dll)部署到Web服务器上,更改开发中的环境配置为运行时的环境配置即可正常运行和浏览了。比起以前的版本,这个过程极其方便。</p> <p>除此之外,还增加了GridView、TreeView等控件使我们的开发效率大大提高了。而AccessDataSource、SqlDataSource、ObjectDataSource数据源控件的引入使得新手更加容易上手了。</p> <p><strong>总结</strong></p> <p>Visual Studio 2005是一款非常成功的产品,起着很重要的承上启下的作用。它是对VS2003等以前版本的质的提高,有很多功能比如类型转换、代码段管理、母版页、网站发布、using语句等语法和编译器功能是笔者从Visual Studio 2005后一直都在使用,这些特性确实方便了代码编写和调试,有些还能提高程序的健壮性和性能,从而也提高了开发人员的开发效率。</p> <p><strong>Visual Studio 2005历史回放</strong></p> <p align="center"><img height="459" alt="" width="400" border="0" src="https://files.pic99.top/shayuweb/202406/d1a0ebc711f056d.jpg" /></p> <p align="center"><strong><font face="宋体" size="2">Visual Studio 2005专业版外包装盒</font></strong></p> <p>旧金山当地时间2005年11月7日。在Cheap Trick乐队的音乐助威声中,微软终于正式发布了Visual Studio 2005和SQL Server 2005。微软公司CEO Steve Ballmer出席了发布仪式。</p> <p>SQL Server的上次升级已经是五年前的事情了,而这次二者新版本的发布加上刚刚发布的.NET Framework 2.0,都是为2006年Windows Vista而作的一种准备。Ballmer承认它们来得有些晚了,不过他重点强调了新版本的一些重大改进。</p> <p>Visual Studio 2005极大地改进了性能表现和安全性,以满足微软所谓的“企业级(enterprise-grade)”应用。同时微软还发布了高端版本的Visual Studio 2005 Team System,主要针对程序员、测试员以及软件架构师,可以在一个团队之间建立有效的协作,其售价也是不菲,高达$10939。</p> <p align="center">[[9878]]</p> <strong><font size="2">Visual Studio 2005安装光盘</font></strong> <p><strong>作者简介</strong></p> <p>周金桥,网名周公,微软2008年7月MVP,51CTO专家堂成员。微软山西.NET俱乐部技术负责人。超过6年的Web开发经验,擅长ASP.NET、程序性能和安全优化。</p> <p>[[9879]]</p> <p>【编辑推荐】</p> <ol> <li><font color="#0000ff">Visual Studio 2005 IDE的使用技巧和窍门</font><font color="#0000ff"> </font></li> <li><font color="#0000ff">在VS 2005和ASP.NET 2.0中处理CSS样式表</font></li> <li><font color="#0000ff">用VS2005.NET进行三层结构应用程序的开发</font><font color="#0000ff"> </font></li> <li><font color="#0000ff">在Visual Studio 2005中实现VB重构</font><font color="#0000ff"> </font></li> <li><font color="#0000ff">详细概述VS2005配置环境的具体配置</font></li> </ol> <p> </p> <p> </p> <!--end::Text--> </div> <!--end::Description--> <div class="mt-5"> <!--关键词搜索--> </div> <div class="mt-5"> <p class="fc-show-prev-next"> <strong>上一篇:</strong><a href="/chengxu/44236.html">Oracle存储过程的代码的介绍</a><br> </p> <p class="fc-show-prev-next"> <strong>下一篇:</strong><a href="/chengxu/44238.html">春天的复苏——无线WiMax技术</a> </p> </div> <!--begin::Block--> <div class="d-flex flex-stack mb-2 mt-10"> <!--begin::Title--> <h3 class="text-dark fs-5 fw-bold text-gray-800">相关内容</h3> <!--end::Title--> </div> <div class="separator separator-dashed mb-9"></div> <!--end::Block--> <div class="row g-10"> </div> </div> <!--end::Table widget 14--> </div> <!--end::Col--> <!--begin::Col--> <div class="col-xl-4 mt-0"> <!--begin::Chart Widget 35--> <div class="card card-flush h-md-100"> <!--begin::Header--> <div class="card-header pt-5 "> <!--begin::Title--> <h3 class="card-title align-items-start flex-column"> <!--begin::Statistics--> <div class="d-flex align-items-center mb-2"> <!--begin::Currency--> <span class="fs-5 fw-bold text-gray-800 ">热门资讯</span> <!--end::Currency--> </div> <!--end::Statistics--> </h3> <!--end::Title--> </div> <!--end::Header--> <!--begin::Body--> <div class="card-body pt-3"> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('/static/assets/images/nopic.gif')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/chengxu/87372.html" class="text-dark fw-bold text-hover-primary fs-6">PHP新手之PHP入门</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('/static/assets/images/nopic.gif')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/chengxu/201127.html" class="text-dark fw-bold text-hover-primary fs-6">网络中立的未来 网络中立性是什...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('/static/assets/images/nopic.gif')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/chengxu/39209.html" class="text-dark fw-bold text-hover-primary fs-6">各种千兆交换机的数据接口类型详...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('https://files.pic99.top/shayuweb/202408/99fac255846c390.jpg')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/chengxu/110958.html" class="text-dark fw-bold text-hover-primary fs-6">粉嫩如何诠释霸道 东芝M805...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">“霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('/static/assets/images/nopic.gif')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/chengxu/61017.html" class="text-dark fw-bold text-hover-primary fs-6">如何利用交换机和端口设置来管理...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('/static/assets/images/nopic.gif')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/chengxu/163521.html" class="text-dark fw-bold text-hover-primary fs-6">什么是大数据安全 什么是大数据...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('/static/assets/images/nopic.gif')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/chengxu/28353.html" class="text-dark fw-bold text-hover-primary fs-6">只需三步,让你掌握阿尔法路由器...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">请参照以下阿尔法路由器设置方法,通过浏览器进入及设置宽带路由器。经过这三个步骤的设置,基本上能够熟悉...</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('https://files.pic99.top/shayuweb/202408/64cf95e77db8784.jpg')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/chengxu/85804.html" class="text-dark fw-bold text-hover-primary fs-6">如何更省钱? 近期特价热门硒鼓...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">如今激光打印设备已经成为商务或企业的绝对主力办公设备,但采购者往往忽视了激光打印设备所用的耗材,相对...</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('/static/assets/images/nopic.gif')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/chengxu/45708.html" class="text-dark fw-bold text-hover-primary fs-6">全面诠释网络负载均衡</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('/static/assets/images/nopic.gif')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/chengxu/241137.html" class="text-dark fw-bold text-hover-primary fs-6">如何允许远程连接到MySQL数...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">[[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...</span> </div> <!--end::Title--> </div> </div> <!--end::Body--> </div> <!--end::Chart Widget 35--> </div> <!--end::Col--> </div> </div> <!--end::Content container--> </div> <!--end::Content--> </div> <!--end::Content wrapper--> <!--begin::Footer--> <div id="kt_app_footer" class="app-footer"> <!--begin::Footer container--> <div class="app-container container-xxl d-flex flex-column flex-md-row flex-center flex-md-stack py-3"> <!--begin::Copyright--> <div class="text-dark order-2 order-md-1"> <span class="text-muted fw-semibold me-1">2026 ©</span> <a href="/" target="_blank" class="text-gray-800 text-hover-primary">鲨鱼网</a> <a href="https://beian.miit.gov.cn/" target="_blank" class="text-gray-800 text-hover-primary"></a> <a href="http://spbjmm.com.shayuweb.com">上品网</a><a href="http://www.zzszq.net/">深知网</a><a href="http://ypkjmy.com.shayuweb.com/">一品科技</a><a href="http://www.yuansudz.com/news/">元素网</a><a href="http://code.shayuweb.com/">鲨鱼编程</a><a href="http://xldmm.com.shayuweb.com/">星链岛</a> </div> <!--end::Copyright--> <!--begin::Menu--> <ul class="menu menu-gray-600 menu-hover-primary fw-semibold order-1"> <li class="menu-item"> <a href="/news/" target="_blank" class="menu-link px-2">科技资讯</a> </li> <li class="menu-item"> <a href="/chengxu/" target="_blank" class="menu-link px-2">程序开发</a> </li> <li class="menu-item"> <a href="/sitemap.xml" target="_blank" class="menu-link px-2">sitemap</a> </li> </ul> <!--end::Menu--> </div> <!--end::Footer container--> </div> <!--end::Footer--> </div> <!--end:::Main--> </div> <!--end::Wrapper--> </div> <!--end::Page--> </div> <!--end::App--> <div id="kt_scrolltop" class="scrolltop" data-kt-scrolltop="true"> <!--begin::Svg Icon | path: icons/duotune/arrows/arr066.svg--> <span class="svg-icon"> <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <rect opacity="0.5" x="13" y="6" width="13" height="2" rx="1" transform="rotate(90 13 6)" fill="currentColor"></rect> <path d="M12.5657 8.56569L16.75 12.75C17.1642 13.1642 17.8358 13.1642 18.25 12.75C18.6642 12.3358 18.6642 11.6642 18.25 11.25L12.7071 5.70711C12.3166 5.31658 11.6834 5.31658 11.2929 5.70711L5.75 11.25C5.33579 11.6642 5.33579 12.3358 5.75 12.75C6.16421 13.1642 6.83579 13.1642 7.25 12.75L11.4343 8.56569C11.7467 8.25327 12.2533 8.25327 12.5657 8.56569Z" fill="currentColor"></path> </svg> </span> <!--end::Svg Icon--> </div> <!--begin::Javascript--> <script>var hostUrl = "/static/default/pc/";</script> <!--begin::Global Javascript Bundle(mandatory for all pages)--> <script src="/static/default/pc/plugins/global/plugins.bundle.js"></script> <script src="/static/default/pc/js/scripts.bundle.js"></script> <!--end::Global Javascript Bundle--> <!--end::Javascript--> </body> <!--end::Body--> </html>