最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

.Net Core項(xiàng)目中NLog整合Exceptionless實(shí)例

 更新時(shí)間:2021年09月02日 10:53:43   作者:yi念之間  
這篇文章主要介紹了.Net Core項(xiàng)目中NLog整合Exceptionless實(shí)例,NLog主要是收集程序中的日志,Exceptionless可以統(tǒng)一收集管理并展示出來程序的日志,兩者結(jié)合使用,相得益彰。感興趣的小伙伴可以參考這篇文章

前言

在實(shí)際的.Net Core相關(guān)項(xiàng)目開發(fā)中,很多人都會(huì)把NLog作為日志框架的首選,主要是源于它的強(qiáng)大和它的擴(kuò)展性。同時(shí)很多時(shí)候我們需要集中式的采集日志,這時(shí)候僅僅使用NLog是不夠的,NLog主要是負(fù)責(zé)代碼中日志的落地,也就是收集程序中的日志。類似的使用ELK(Elasticsearch+Logstash+Kibana)或EFK(Elasticsearch+Filebeat+Kibana)的集中式日志管理平臺(tái)負(fù)責(zé)統(tǒng)一采集各個(gè)應(yīng)用端通過日志框架手機(jī)的日志并統(tǒng)一的管理和展示。但是無論是ELK還是EFK,操作都有一定的復(fù)雜度,而且這是重型武器,有時(shí)候可能還不需要這么大的排場(chǎng),這時(shí)候就需要一種輕量級(jí)的解決方案,而Exceptionless正式這種輕量級(jí)的分布式日志管理平臺(tái)。

概念

可能有的同學(xué)對(duì)于Exceptionless或者是NLog還不是很了解,這里咱們就簡(jiǎn)單的介紹一下。

Exceptionless

       簡(jiǎn)單的來說Exceptionless就是一款分布式日志管理框架,它可以統(tǒng)一收集管理并展示出來程序的日志,這樣的話減少了傳統(tǒng)開發(fā)過程中還需要去服務(wù)器查找日志的痛苦,大大提升對(duì)程序的運(yùn)維效率。接下來我們先亮出來自學(xué)三件套

目前支持JavaScript, Node, .NET Core, .NET相關(guān)應(yīng)用程序的異常信息采集。為何僅支持.Net .Net Core和JS相關(guān)的?原因很簡(jiǎn)單,Exceptionless是基于.NET Core開發(fā)的。如果你有別的語(yǔ)言的開發(fā)需求也想使用Exceptionless,這個(gè)時(shí)候不要?dú)怵H,因?yàn)镋xceptionless本質(zhì)是基于http接口的形式上報(bào)數(shù)據(jù)的,這個(gè)可在官方文檔上找到如何使用http上報(bào)日志信息相關(guān)

以上文檔有針對(duì)Exceptionless通過http接口對(duì)接的所有信息,通過它可以封裝自己的sdk。

NLog

       相信很多同學(xué)對(duì)NLog已經(jīng)相當(dāng)熟悉了,它是一款日志框架,完美的支持.Net和.Net Core,它在.Net Core的流行度和使用廣泛度完全不亞于之前的Log4Net,最重要的它功能很強(qiáng)大,而且擴(kuò)展起來非常方便,它支持將日志輸入到多種target形式,比如txt文件、Sql Server、MySQL、Redis、Mq、MongoDb、ElasticSearch等,幾乎能想到的所有存儲(chǔ)相關(guān)的組件,而且還支持過時(shí)日志打包壓縮自動(dòng)刪除等高級(jí)功能,也是我個(gè)人非常推薦的一款日志框架,而且它可以直接對(duì)接到.Net Core Logger組件上,廢話不多說自學(xué)N件套地址

NLog最大的優(yōu)勢(shì)就是強(qiáng)大,強(qiáng)大到你能用到的它幾乎都支持,而且你想不到的它可能也支持了,而且使用起來也是非常的簡(jiǎn)單。作為日志框架,我覺得它是最值得一試的一款。

環(huán)境搭建

上面我們已經(jīng)分別介紹了Exceptionless和NLog知道了他們的概念。Exceptionless支持直接采集日志信息上報(bào)到Exceptionless,也就是原始的方式,這個(gè)官方文檔上都有相關(guān)的介紹,這里咱們就不過多介紹這種方式了,使用原始方式的的時(shí)候可能會(huì)存在許多的問題,比如上報(bào)形式單一采集格式的問題等。許多時(shí)候我們是使用日志框架記錄程序日志相關(guān)的,它的優(yōu)勢(shì)在于target豐富,而且支持自定義日志格式等等,恰恰NLog足夠強(qiáng)大,支持直接將Log數(shù)據(jù)上報(bào)到Exceptionless,接下來我們就來看一下它們之間的整合方式。

Exceptionless搭建

官網(wǎng)提供了兩種使用的方式

  • 一種是在官方網(wǎng)站注冊(cè)賬號(hào)然后獲取apiKey,這樣的話不用自己搭建Exceptionless,而是將日志直接收集上報(bào)到Exceptionless服務(wù)器上。但是,一般基于安全和性能考慮,這種方式并不常用。
  • 另一種則是自建Exceptionless服務(wù),也是本篇我們要使用的方式。之前的低版本支持在window服務(wù)器上自建服務(wù),但是高版本已經(jīng)是基于docker的方式構(gòu)建了。而使用docker的方式也是我個(gè)人日常學(xué)習(xí)中比較喜歡的方式。

官方也是提供了兩種方式去基于docker構(gòu)建Exceptionless,一種是基于源碼自行構(gòu)建,另一種則是通過官方docker鏡像直接運(yùn)行容器。因?yàn)镋xceptionless依賴Elasticsearch存儲(chǔ)所以官方也是也是直接提供了docker-compose的方式去運(yùn)行容器。
如果使用基于源碼的方式構(gòu)建,首先是找到Exceptionless的官方GitHub地址https://github.com/exceptionless/Exceptionless去clone源代碼,或者直接下載源碼的Release包https://github.com/exceptionless/Exceptionless/releases。下載完成之后進(jìn)入項(xiàng)目根目錄找到docker-compose.dev.yml文件,文件內(nèi)容如下

version: '3.7'

services:
  #通過源碼自行構(gòu)建鏡像
  app:
    #依賴elasticsearch和redis
    depends_on:
      - elasticsearch
      - redis
    build:
      context: .
      target: app
    image: exceptionless/app:latest
    environment:
      EX_AppMode: Production
      EX_ConnectionStrings__Cache: provider=redis
      EX_ConnectionStrings__Elasticsearch: server=http://elasticsearch:9200
      #redis的作用是消息總線、消息隊(duì)列和緩存
      EX_ConnectionStrings__MessageBus: provider=redis
      EX_ConnectionStrings__Queue: provider=redis
      EX_ConnectionStrings__Redis: server=redis,abortConnect=false
      EX_RunJobsInProcess: 'false'
    #暴露訪問端口
    ports:
      - 5000:80
      - 5001:443
    volumes:
      - appdata:/app/storage
      - ssldata:/https

  jobs:
    depends_on:
      - app
    image: exceptionless/job:latest
    build:
      context: .
      target: job
    environment:
      EX_AppMode: Production
      EX_BaseURL: http://localhost:5000
      EX_ConnectionStrings__Cache: provider=redis
      EX_ConnectionStrings__Elasticsearch: server=http://elasticsearch:9200
      EX_ConnectionStrings__MessageBus: provider=redis
      EX_ConnectionStrings__Queue: provider=redis
      EX_ConnectionStrings__Redis: server=redis,abortConnect=false
      EX_ConnectionStrings__Storage: provider=folder;path=/app/storage
    volumes:
      - appdata:/app/storage

  elasticsearch:
    image: exceptionless/elasticsearch:7.10.0
    environment:
      discovery.type: single-node
      xpack.security.enabled: 'false'
      ES_JAVA_OPTS: -Xms1g -Xmx1g
    ports:
      - 9200:9200
      - 9300:9300
    volumes:
      - esdata7:/usr/share/elasticsearch/data

  kibana:
    depends_on:
      - elasticsearch
    image: docker.elastic.co/kibana/kibana:7.10.0
    ports:
      - 5601:5601

  redis:
    image: redis:6.0-alpine
    ports:
      - 6379:6379

volumes:
  esdata7:
    driver: local
  appdata:
    driver: local
  ssldata:
    driver: local

通過上面的docker-compose文件我們可以看出目前Exceptionless依賴elasticsearch和redis,大致可以看出Exceptionless存儲(chǔ)是依賴elasticsearch,而提升性能的則是redis,比如消息總線防止并發(fā)的緩沖隊(duì)列都是依賴redis的,具體實(shí)現(xiàn)細(xì)節(jié)我們這里就不做過多套路了。因?yàn)槭褂胐ev的方式構(gòu)建鏡像的方式依賴Exceptionless源碼,所以不建議移動(dòng)該docker-compose文件位置,使用docker-compose的指令直接運(yùn)行該文件

docker-compose -f docker-compose.dev.yml up

上面的方式雖然可以直接依靠源碼去構(gòu)建,但是其實(shí)大可不必這么復(fù)雜比如kibana這種完全就是多余的,而且他的這種方式是依賴源碼的,生產(chǎn)環(huán)境我們不可能把代碼直接copy過去,所以我們需要精簡(jiǎn)一下,如下所示

version: '3.7'

services:
  app:
    depends_on:
      - elasticsearch
      - redis
    image: exceptionless/exceptionless:latest
    environment:
      EX_AppMode: Production
      EX_ConnectionStrings__Cache: provider=redis
      EX_ConnectionStrings__Elasticsearch: server=http://elasticsearch:9200
      EX_ConnectionStrings__MessageBus: provider=redis
      EX_ConnectionStrings__Queue: provider=redis
      EX_ConnectionStrings__Redis: server=redis:6379,abortConnect=false
      EX_RunJobsInProcess: 'false'
    ports:
      - 5000:80
    volumes:
      - appdata:/app/storage

  jobs:
    depends_on:
      - app
    image: exceptionless/job:latest
    environment:
      EX_AppMode: Production
      EX_BaseURL: http://localhost:5000
      EX_ConnectionStrings__Cache: provider=redis
      EX_ConnectionStrings__Elasticsearch: server=http://elasticsearch:9200
      EX_ConnectionStrings__MessageBus: provider=redis
      EX_ConnectionStrings__Queue: provider=redis
      EX_ConnectionStrings__Redis: server=redis:6379,abortConnect=false
      EX_ConnectionStrings__Storage: provider=folder;path=/app/storage
    volumes:
      - appdata:/app/storage

  elasticsearch:
    image: exceptionless/elasticsearch:7.10.0
    environment:
      discovery.type: single-node
      xpack.security.enabled: 'false'
      xpack.ml.enabled: 'false'
      ES_JAVA_OPTS: -Xms1g -Xmx1g
    ports:
      - 9200:9200
      - 9300:9300
    volumes:
      - esdata7:/usr/share/elasticsearch/data

  redis:
    image: redis:6.0-alpine
    ports:
      - 6379:6379

volumes:
  esdata7:
    driver: local
  appdata:
    driver: local

將上面的yml內(nèi)容直接復(fù)制到一個(gè)新建的docker-compose.yml的空文件中就可以直運(yùn)行了,無任何額外的依賴,在yml文件所在路徑直接運(yùn)行以下命令

docker-compose up -d

如果你的服務(wù)器已經(jīng)擁有了elasticsearch和redis服務(wù),也就是不需要使用以上docker-compose的方式進(jìn)行構(gòu)建,那么可以直接使用官方docker鏡像的方式直接啟動(dòng)Exceptionless容器,可以使用docker原生的方式直接運(yùn)行

sudo docker run -d -e EX_AppMode=Production -e EX_ConnectionStrings__Cache="provider=redis" -e EX_ConnectionStrings__Elasticsearch="server=http://10.255.198.168:9200" -e EX_ConnectionStrings__MessageBus="provider=redis" -e EX_ConnectionStrings__Queue="provider=redis" -e EX_ConnectionStrings__Redis="server=10.255.198.168:6379,abortConnect=false" -e EX_RunJobsInProcess=false -e EX_Html5Mode=true -p 5000:80 exceptionless/exceptionless:latest

這里注意修改下相關(guān)服務(wù)的ip地址,因?yàn)槲艺迟N的是我本機(jī)的地址,而且注意elasticsearch的版本必須是7.x版本的,否則的話會(huì)報(bào)錯(cuò)。程序啟動(dòng)完成后再瀏覽器輸輸入http://ip:5000后會(huì)自動(dòng)跳轉(zhuǎn)到登錄界面

如果沒有登錄賬戶需要注冊(cè)一個(gè)新的用戶后,登錄到首頁(yè)如圖所示

因?yàn)镋xceptionless每個(gè)項(xiàng)目的日志信息是根據(jù)apiKey去區(qū)分的,所以要在Exceptionless中添加你需要采集日志的項(xiàng)目,具體操作如以下步驟

  • 首先,點(diǎn)擊所有項(xiàng)目--->創(chuàng)建項(xiàng)目

  • 然后,輸入組織名稱和項(xiàng)目名稱

  • 然后,選擇項(xiàng)目類型,這里以Asp.Net Core程序?yàn)槔?/li>

  • 完成之后,點(diǎn)擊項(xiàng)目管理,這里的API秘鑰正是我們上傳到Exceptionless服務(wù)所需要的憑證

到了這一步Exceptionless搭建基本上就完成了。

集成NLog

新建一個(gè)名叫ProductApi的Asp.Net Core的項(xiàng)目,項(xiàng)目名稱任意。然后添加Exceptionless.NLog包,這個(gè)包就是將NLog數(shù)據(jù)上報(bào)到Exceptionless的包

<PackageReference Include="Exceptionless.NLog" Version="4.6.2" />
<PackageReference Include="NLog.Web.AspNetCore" Version="4.10.0" />

Exceptionless.NLog的Github項(xiàng)目地址位于https://github.com/exceptionless/Exceptionless.Net/tree/master/src/Platforms/Exceptionless.NLog這個(gè)地址相當(dāng)隱蔽不太容易被發(fā)現(xiàn),而且說明文檔也是很低調(diào)幾乎沒啥內(nèi)容,可能是覺得NLog的文檔寫的太完善了,不用多說大家就能知道怎么用。添加完nuget包引用之后,修改Program.cs程序添加NLog的Logging擴(kuò)展。僅僅添加UseNLog即可,因?yàn)槲覀兪褂昧薔Log.Web.AspNetCore擴(kuò)展包,所以NLog會(huì)集成到Asp.Net Core自帶的Microsoft.Extensions.Logging中去,不得不說.Net Core的整體擴(kuò)展性還是非常強(qiáng)的,這樣的話我們可以設(shè)置默認(rèn)的Logging的配置即可,幾乎感知不到NLog的存在

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                }).UseNLog();

接下來需要在項(xiàng)目根目錄中新建nlog.config用來配置nlog相關(guān)信息,新建完成之后添加以下配置

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      throwExceptions="true" internalLogFile="internal-nlog.log" internalLogLevel="Debug" >
  <extensions>
    <!--添加擴(kuò)展Exceptionless​程序集-->
    <add assembly="Exceptionless.NLog"/>
  </extensions>
  <targets async="true">
    <!--寫入本地文件-->
    <target name="File" xsi:type="File" fileName="${basedir}/logs/${shortdate}.log"
            layout=" ${longdate}|${event-properties:item=EventId_Id:whenEmpty=0}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}| ${newline}" >
    </target>
    <!--上報(bào)Exceptionless-->
    <!--xsi:type:固定是Exceptionless-->
    <!--apiKey:即我們?cè)贓xceptionless中添加完項(xiàng)目后得到的apiKey-->
    <!--serverUrl:Exceptionless的地址-->
    <target xsi:type="Exceptionless" name="Exceptionless" apiKey="d66B6fXD6sz3kAuqdc5Fe04td7iIygunkDa5GoUt"
            serverUrl="http://10.255.52.93:5000/">
      <!--堆棧信息-->
      <field name="StackTrace" layout="${stacktrace}"/>
      <!--Message信息-->
      <field name="Message" layout="${message}"/>
      <field name="LogLevel" layout="${level}"/>
      <field name="CreateDate" layout="${date}"/>
      <!--物理名稱-->
      <field name="MachineName" layout="${machinename}" />
      <!--線程ID-->
      <field name="ThreadId" layout="${threadid}"/>
      <!--發(fā)生源-->
      <field name="CallSite" layout="${callsite}"/>
      <field name="AppdomainVersion" layout="${assembly-version}"/>
      <field name="Appdomain" layout="${appdomain}"/> 
    </target>
  </targets>
  <rules>
    <!--本地文件-->
    <logger name="*" writeTo="File"/>
    <!--上報(bào)Exceptionless-->
    <logger name='*' writeTo='Exceptionless'/>
  </rules>
</nlog>

新建完nlog.config之后不要忘了將右擊該文件 屬性--->復(fù)制到輸出路徑--->始終復(fù)制,或修改該項(xiàng)目的csproj文件添加

<ItemGroup>
    <Content Update="nlog.config">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
</ItemGroup>

到這里為止關(guān)于NLog整合Exceptionless的環(huán)境搭建就已經(jīng)完成了,是不是非常的簡(jiǎn)單,拋開環(huán)境搭建工作量其實(shí)并不大,這一切都是源于.Net Core的強(qiáng)大和它那靈活的可擴(kuò)展性。

簡(jiǎn)單測(cè)試一下

通過上面的操作我們已經(jīng)把NLog整合Exceptionless的環(huán)境搭建起來了,接下來我們隨便寫點(diǎn)代碼測(cè)試一波隨便建個(gè)類,就是為了演示異常,代碼無任何實(shí)質(zhì)意義,不喜勿噴。。。,這里我是模擬了一個(gè)ApiController拋出異常,然后用Logger記錄了信息

[Route("productapi/[controller]")]
public class ProductController : ControllerBase
{
    private readonly ILogger _logger;
    public ProductController(ILogger<ProductController> logger)
    {
        _logger = logger;
    }

    [HttpGet("exceptiontest")]
    public string ExceptionTest()
    {
        try
        {
            throw new Exception("發(fā)生了未知的異常");
        }
        catch (Exception ex)
        {
            _logger.LogError(ex,$"{HttpContext.Connection.RemoteIpAddress}調(diào)用了productapi/product/exceptiontest接口返回了失敗");
        }
        return "調(diào)用失敗";
    }
}

運(yùn)行起來項(xiàng)目調(diào)用一下這段代碼之后,查看Exceptionless,如果環(huán)境配置啥的都是正確的話,會(huì)展示出一下效果,點(diǎn)擊All菜單展示出來的信息會(huì)比較全

可以點(diǎn)擊查看詳情,詳情信息記錄的非常詳細(xì),不得不說Exceptionless還是非常強(qiáng)大非常人性非常實(shí)用的

還能查看更詳細(xì)的信息

到這里為止,關(guān)于NLog整合Exceptionless的操作就全部完成了,感嘆一句就是不僅簡(jiǎn)單而且強(qiáng)大。

總結(jié)

通過本次整合NLog和Exceptionless,我們既感受到Exceptionless的簡(jiǎn)單和強(qiáng)大,也感受到了NLog的擴(kuò)展性之強(qiáng),希望更多地人能夠嘗試一下NLog。這一切還是得益于.Net Core自身的擴(kuò)展性,特別是它內(nèi)置的一些抽象,完全成為了構(gòu)建.Net Core程序的核心,而且基于這些內(nèi)置的核心抽象操作可以很輕松的擴(kuò)展許多操作,使得模塊之間的耦合性變得非常低,而這種設(shè)計(jì)的思想才是我們真正在編程中應(yīng)該學(xué)習(xí)的。

到此這篇關(guān)于.Net Core項(xiàng)目中NLog整合Exceptionless實(shí)例的文章就介紹到這了,更多相關(guān)NLog整合Exceptionless內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • DataTable多列合并問題輕松搞定

    DataTable多列合并問題輕松搞定

    由于題庫(kù)的表結(jié)構(gòu)不相同,導(dǎo)致同樣的Gridview在顯示時(shí)不能同時(shí)兩種不同結(jié)構(gòu)的數(shù)據(jù),這時(shí)如何在這個(gè)固定的GridView中顯示不同的數(shù)據(jù)呢,感興趣的朋友可以看下本文的解決方法
    2013-04-04
  • .NET中讀取Excel文件的數(shù)據(jù)及excelReader應(yīng)用

    .NET中讀取Excel文件的數(shù)據(jù)及excelReader應(yīng)用

    輕量,快速的C#編寫的庫(kù)讀取Microsoft Excel文件,這對(duì)讀取大量excel文件的朋友們很有幫助而且可以學(xué)習(xí)下ExcelDataReader的應(yīng)用,感興趣的朋友可以了解下,或許對(duì)你有所幫助
    2013-02-02
  • asp.net開發(fā)中怎樣去突破文件依賴緩存

    asp.net開發(fā)中怎樣去突破文件依賴緩存

    緩存大家用的太多了,簡(jiǎn)單至一個(gè)用static修飾的變量都可以視作緩存,復(fù)雜至Memcached等大數(shù)據(jù)量的緩存。
    2011-07-07
  • MVC 5 第二章 MVC5應(yīng)用程序項(xiàng)目結(jié)構(gòu)

    MVC 5 第二章 MVC5應(yīng)用程序項(xiàng)目結(jié)構(gòu)

    通過本章學(xué)習(xí),你將了解到一個(gè)MVC 5應(yīng)用程序的項(xiàng)目組成以及項(xiàng)目文件的相關(guān)信息,從而更好地架構(gòu)設(shè)計(jì)出自己的項(xiàng)目結(jié)構(gòu)。
    2014-06-06
  • .net jquery繪制自定義表單源碼分享

    .net jquery繪制自定義表單源碼分享

    這篇文章主要為大家分享了.net jquery繪制自定義表單源碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • .NET反向代理組件YARP介紹

    .NET反向代理組件YARP介紹

    Yarp是微軟團(tuán)隊(duì)開發(fā)的一個(gè)反向代理組件,除了常規(guī)的http和https轉(zhuǎn)換通訊,它最大的特點(diǎn)是可定制化,很容易根據(jù)特定場(chǎng)景開發(fā)出需要的定制代理通道。這篇文章介紹了.NET的反向代理組件YARP,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考價(jià)值,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-09-09
  • ASP.NET MVC小結(jié)之基礎(chǔ)篇(一)

    ASP.NET MVC小結(jié)之基礎(chǔ)篇(一)

    本文是ASP.NET MVC系列的第一篇文章,跟其他學(xué)習(xí)系列一樣,咱們先來點(diǎn)基礎(chǔ)知識(shí),之后再循序漸進(jìn)。我們先從asp.net mvc的概念開始吧。
    2014-11-11
  • 使用ASP.NET.4.5.1+MVC5.0 搭建一個(gè)包含 Ninject框架 項(xiàng)目

    使用ASP.NET.4.5.1+MVC5.0 搭建一個(gè)包含 Ninject框架 項(xiàng)目

    這篇文章主要介紹了使用ASP.NET.4.5.1+MVC5.0 搭建一個(gè)包含 Ninject框架 項(xiàng)目的方法,需要的朋友可以參考下
    2015-01-01
  • .NET?Core實(shí)現(xiàn)簡(jiǎn)單的Redis?Client框架

    .NET?Core實(shí)現(xiàn)簡(jiǎn)單的Redis?Client框架

    本文詳細(xì)講解了.NET?Core實(shí)現(xiàn)簡(jiǎn)單的Redis?Client框架,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • 將.aspx轉(zhuǎn)換為.htm的兩種方法

    將.aspx轉(zhuǎn)換為.htm的兩種方法

    這篇文章介紹了將.aspx轉(zhuǎn)換為.htm的兩種方法,有需要的朋友可以參考一下,希望對(duì)你有所幫助
    2013-07-07

最新評(píng)論

华宁县| 昌黎县| 凉城县| 云南省| 江口县| 阿合奇县| 政和县| 龙泉市| 鄄城县| 岳西县| 抚松县| 那曲县| 邻水| 蒙山县| 江都市| 崇信县| 高要市| 榆社县| 平武县| 青州市| 大安市| 从化市| 互助| 蕉岭县| 定襄县| 临澧县| 凤城市| 九龙县| 九龙城区| 东源县| 永寿县| 济南市| 保定市| 湖口县| 赤水市| 张掖市| 临泉县| 许昌市| 理塘县| 鹤庆县| 朔州市|