整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          一鍵發(fā)布圖文視頻音樂Miami朋友圈程序全開源版源碼

          一鍵發(fā)布圖文視頻音樂Miami朋友圈程序全開源版源碼

          iami朋友圈程序全開源版源碼,前臺(tái)一鍵發(fā)布圖文,視頻,音樂。發(fā)布內(nèi)容支持定位或自定義位置信息。支持將發(fā)布內(nèi)容設(shè)為廣告模式消息站內(nèi)通知或郵件通知。支持其他用戶注冊(cè),支持其他用戶發(fā)布文章,管理自己的文章。擁有豐富的后臺(tái)管理功能,一鍵操作。

          安裝環(huán)境:Nginx ≥1.22/PHP=7.4/MySQL ≥5.6安裝前首先配置運(yùn)行環(huán)境,運(yùn)行需要在PHP中安裝exif擴(kuò)展。

          總結(jié):這邊測(cè)試了一下沒有發(fā)現(xiàn)問題,此源碼為開源版,安裝后即可使用。

          版權(quán)申請(qǐng):本文A5資源網(wǎng)原創(chuàng),經(jīng)原創(chuàng)作者允許轉(zhuǎn)載許可聲明。原文地址http://a5.org.cn/a5_ziyuan/38963.html

          者:Matt Trilby-Bassett;Min Huang

          排版:Rani Sun



          開發(fā)人員在閱讀 API 參考文檔時(shí),有時(shí)會(huì)需要或希望查看相應(yīng)的源代碼。直到不久之前,.NET API 參考文檔還沒有提供指向源代碼的鏈接,這引起社區(qū)添加這一功能的呼聲。針對(duì)這一反饋,我們很高興地宣布,現(xiàn)在大多數(shù)流行的 .NET API 上都提供了連接文檔和源代碼的鏈接。


          在這篇博文中,我們將分享將鏈接添加到文檔以及利用現(xiàn)有 API 來(lái)實(shí)現(xiàn)這一改進(jìn)的詳細(xì)信息。



          鏈接的實(shí)例

          在介紹實(shí)施細(xì)節(jié)之前,我們想展示一下文檔的改動(dòng)。對(duì)于符合我們標(biāo)準(zhǔn)(啟用了源代碼鏈接、具有可訪問的 PDB 并托管在公共存儲(chǔ)庫(kù)中)的 .NET API,其鏈接包含在 Definition 元數(shù)據(jù)中。以下來(lái)自 String 類的截圖演示了這個(gè)新鏈接的位置:


          如果存在重載,鏈接將包含在重載標(biāo)題的下面。下面的 String.IndexOf 方法截圖演示了這種情況:

          參考文檔

          https://learn.microsoft.com/en-us/dotnet/api/

          String.IndexOf 方法

          https://learn.microsoft.com/en-us/dotnet/api/system.string.indexof?view=net-8.0#system-string-indexof(system-string-system-int32-system-int32)



          我們?nèi)绾谓㈡溄樱?/strong>

          .NET 參考文檔管道對(duì)一組 DLL 文件和 NuGet 包進(jìn)行操作。這些文件由各種工具處理,以將其內(nèi)容轉(zhuǎn)換為顯示在 Microsoft Learn 上的 HTML 頁(yè)面。正確構(gòu)建源代碼的鏈接需要了解源代碼、二進(jìn)制文件和 GitHub 之間的關(guān)系,以及它們?nèi)绾闻c一些現(xiàn)有的 .NET API 配合在一起。在與 .NET 和 Roslyn 團(tuán)隊(duì)的開發(fā)人員討論我們公開源代碼鏈接的目標(biāo)時(shí),很明顯我們的要求與 Visual Studio 的Go to definition功能緊密相關(guān)。


          憑借這種理解以及 @davidwengier 在 Roslyn 中針對(duì)外部源的Go to definition改進(jìn)中提供的有關(guān)Go to definition的大量細(xì)節(jié),我們能夠采用類似的方法來(lái)構(gòu)建指向文檔源代碼的鏈接。

          Go to definition

          https://github.com/dotnet/roslyn/issues/55834

          @davidwengier

          https://github.com/davidwengier



          源代碼鏈接

          源代碼鏈接是一種技術(shù),它使 .NET 開發(fā)人員能夠調(diào)試其應(yīng)用程序引用的程序集的源代碼。盡管源代碼鏈接最初旨在用于源代碼調(diào)試,但它完全適用于我們的場(chǎng)景。每個(gè)啟用源代碼鏈接的 .NET 項(xiàng)目都會(huì)在 PDB(程序數(shù)據(jù)庫(kù))中生成從相對(duì)文件夾路徑到 絕對(duì)存儲(chǔ)庫(kù) URL 的映射。這與 @davidwengierRoslyn 中針對(duì)外部源的 Go to definition 改進(jìn)中所述一致。


          若要查看源鏈接條目,可以使用 dotPeek 或 ILSpy 打開 DLL。以下屏幕截圖顯示了使用 dotPeek 訪問 System.Private.CoreLib 的源鏈接條目的示例,方法是導(dǎo)航到 Portable PDB Metadata,然后導(dǎo)航到 CustomDebugInformation 表:

          [!NOTE] 若要了解有關(guān)源代碼鏈接的元數(shù)據(jù)定義,請(qǐng)轉(zhuǎn)到:PortablePdb-Metadata

          源代碼鏈接

          https://github.com/dotnet/sourcelink

          @davidwengier

          https://github.com/davidwengier

          Roslyn 中針對(duì)外部源的 Go to definition 改進(jìn)

          https://devblogs.microsoft.com/dotnet/go-to-definition-improvements-for-external-source-in-roslyn/#source-link

          ILSpy

          https://github.com/icsharpcode/ILSpy

          PortablePdb-Metadata

          https://github.com/dotnet/runtime/blob/main/docs/design/specs/PortablePdb-Metadata.md#source-link-c-and-vb-compilers



          建立鏈接

          現(xiàn)在我們知道在源代碼鏈接條目中存儲(chǔ)了一個(gè)總體映射,下一個(gè)問題是如何為這個(gè) DLL 中的每個(gè)類型/成員構(gòu)建唯一的鏈接?


          例如,我們?yōu)?String.Clone 方法構(gòu)建的鏈接是:

          https://github.com/dotnet/runtime/blob/5535e31a712343a63f5d7d796cd874e563e5ac14/src/libraries/System.Private.CoreLib/src/System/String.cs#L388C13-L388C25


          此鏈接可分為 3 個(gè)部分:

          1. 第一部分 https://github.com/dotnet/runtime/blob/5535e31a712343a63f5d7d796cd874e563e5ac14 是從源代碼鏈接映射 json 解析出來(lái)的,并且與特定的存儲(chǔ)庫(kù)提交綁定。

          2. 第二部分 src/libraries/System.Private.CoreLib/src/System/String.cs 可以在 PDB 的文檔表中找到。

          3. 最后一部分 #L388C13-L388C25 是基于 MethodDebugInformation 表的 SequencePoints 列構(gòu)建的。SequencePoints blob 會(huì)將此方法塊中的一系列 IL 指令映射回其原始源代碼行號(hào),如下面的屏幕截圖所示。有關(guān)更多詳細(xì)信息,請(qǐng)轉(zhuǎn)到 SequencePoints 元數(shù)據(jù)定義

          我們使用 System.Reflection.Metadata 庫(kù)來(lái)遍歷此 DLL 中的所有類型/成員,然后匹配 MethodDebugInformation 表中的記錄以構(gòu)建最終的鏈接。

          • var mdReader=peReader.GetMetadataReader();foreach(var typeDefHandle in mdReader.TypeDefinitions){ var typeDef=mdReader.GetTypeDefinition(typeDefHandle);
            string typeName=mdReader.GetString(typeDef.Name); string ns=mdReader.GetString(typeDef.Namespace);
            string fullName=String.IsOrEmpty(ns) ? typeName : $"{ns}.{typeName}"; Console.WriteLine(fullName);
            foreach (var document in debugReader.FindSourceDocuments(typeDefHandle)) { Console.WriteLine($" {document.SourceLinkUrl}"); }}

            該實(shí)現(xiàn)也可以在 Roslyn DocumentDebugInfoReader.csSymbolSourceDocumentFinder.cs 中找到。

            SequencePoints 元數(shù)據(jù)定義

            https://github.com/dotnet/runtime/blob/main/docs/design/specs/PortablePdb-Metadata.md#sequence-points-blob

            System.Reflection.Metadata

            https://learn.microsoft.com/en-us/dotnet/api/system.reflection.metadata?view=net-8.0

            DocumentDebugInfoReader.cs

            https://github.com/dotnet/roslyn/blob/bbcac94e166e0cd87d36b41a387278e7d00d1728/src/Features/Core/Portable/PdbSourceDocument/DocumentDebugInfoReader.cs

            SymbolSourceDocumentFinder.cs

            https://github.com/dotnet/roslyn/blob/4262648cadff59cc703b6be8c00b9814a6b13c5a/src/Features/Core/Portable/PdbSourceDocument/SymbolSourceDocumentFinder.cs



            查找 PDB 文件

            因?yàn)槲覀冎梨溄拥男畔⒖梢栽?PDB 中找到,所以下一步就是找到這些 PDB 以供我們使用。


            目前,指定某一個(gè) DLL,我們會(huì)在三個(gè)地方查找相應(yīng)的 PDB:

            1. 嵌入式 PDB。如果您的 csproj 中指定了<DebugType>embedded</DebugType>,則 PDB 文件將嵌入到此 DLL 中。

            2. 磁盤上的 PDB。您可以將 PDB 放在 DLL 旁邊。

            3. Microsoft Symbol Server。有一個(gè)公共符號(hào)服務(wù)器,我們可以從中下載 DLL 的 PDB。


            請(qǐng)參閱 Roslyn PdbFileLocatorService.cs 中的實(shí)現(xiàn)。

            PdbFileLocatorService.cs

            https://github.com/dotnet/roslyn/blob/b3d9ff7c9dc9e330b24d6087419dffe611a9dd77/src/Features/Core/Portable/PdbSourceDocument/PdbFileLocatorService.cs



            查找正確的 PDB 版本

            我們想進(jìn)一步討論如何從 Microsoft Symbol Server 下載指定 DLL 的正確版本的 PDB。


            下面是一個(gè)PDB 下載 URL的示例 ,其格式在 portable-pdb-signature 中定義。

            http://msdl.microsoft.com/download/symbols/System.Private.CoreLib.pdb/8402667829752b9d0b00ebbc1d5a66d9FFFFFFFF/System.Private.CoreLib.pdb


            從 URL 模式中我們可以觀察到,我們需要提供 PDB 文件名 System.Private.CoreLib.pdb 和 GUID 8402667829752b9d0b00ebbc1d5a66d9FFFFFFFF。那么問題是我們可以在哪里找到這些信息?

            之前我們使用 dotPeek 打開 DLL 來(lái)查找源代碼鏈接條目?,F(xiàn)在我們可以再次打開它并檢查元數(shù)據(jù)部分。

            在上面的截圖中,我們可以在 Debug Directory 中找到這個(gè) GUID,并且該條目必須是一個(gè)可移植代碼視圖條目。該條目的 Path 屬性代表 PDB 文件的路徑,我們可以從中獲取文件名。

            • foreach (var entry in peReader.ReadDebugDirectory()){ if (entry.Type==DebugDirectoryEntryType.CodeView && entry.IsPortableCodeView) { var codeViewEntry=peReader.ReadCodeViewDebugDirectoryData(entry); var pdbName=Path.GetFileName(codeViewEntry.Path); var codeViewEntryGuid=$"{codeViewEntry.Guid.ToString("N").ToUpper()}FFFFFFFF"; return $"{MsftSymbolServerUrl}/{pdbName}/{codeViewEntryGuid}/{pdbName}"; }}



              查找 DLL 文件

              如前所述,我們的 .NET 參考文檔管道對(duì) DLL 文件或 NuGet 包的集合進(jìn)行操作。但對(duì)于某些程序集,我們需要發(fā)揮創(chuàng)造力來(lái)生成指向源代碼的鏈接。以下是我們需要開發(fā)解決方案的兩種情況:

              1. 參考程序集。例如, Microsoft.NETCore.App.Ref 包中的 DLL。參考程序集沒有將 PDB 上傳到符號(hào)服務(wù)器,這阻止我們生成源代碼鏈接。我們當(dāng)前的解決方案是下載Runtime 包并使用其中的程序集下載匹配的 PDB。

              2. 源代碼嵌入在 PDB 中。例如,System.Threading.AccessControl 包在構(gòu)建時(shí)會(huì)將源代碼生成到 obj 文件夾中。

              這并不能幫助我們鏈接到源代碼,因此我們不會(huì)使用 lib 文件夾中的 DLL,而是會(huì)在runtimes文件夾中查找同名的 DLL。

              Microsoft.NETCore.App.Ref

              https://www.nuget.org/packages/Microsoft.NETCore.App.Ref/8.0.0

              Runtime 包

              https://www.nuget.org/packages/Microsoft.NETCore.App.Runtime.linux-x64/8.0.0

              System.Threading.AccessControl

              https://www.nuget.org/packages/System.Threading.AccessControl/8.0.0



              使用文檔管道中的鏈接

              一旦我們找到正確的 DLL/PDB 文件并成功建立源代碼的鏈接,我們就會(huì)將此信息以 JSON 文件形式保存在目標(biāo)文檔 GitHub 存儲(chǔ)庫(kù)中。

              為了了解我們將如何使用這些信息,我們需要重新審視 .NET 參考文檔管道。管道為每種唯一類型創(chuàng)建一個(gè) XML 文件,我們的構(gòu)建系統(tǒng)稍后會(huì)將其轉(zhuǎn)換為顯示在 Microsoft Learn 上的 HTML 頁(yè)面。為了將 XML 中的 API 映射到 JSON 文件中找到的相應(yīng)源代碼鏈接,我們使用唯一標(biāo)識(shí)符 DocId。此值存在于 XML(DocId)和 JSON(DocsId)中。

              例如,System.String 的 DocId 為 T:System.String。此 DocId 值將用于定位 System.Private.CoreLib.json 文件(其對(duì)應(yīng)版本)中的源代碼鏈接。

            "DocsId": "T:System.String","SourceLink": "https://github.com/dotnet/runtime/blob/5535e31a712343a63f5d7d796cd874e563e5ac14/src/libraries/System.Private.CoreLib/src/System/String.cs"

            若要了解如何生成 DocId,請(qǐng)參閱 DocCommentId.csDocumentationCommentId.cs。

            DocId

            https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/documentation-comments#d42-id-string-format

            T:System.String

            https://github.com/dotnet/dotnet-api-docs/blob/main/xml/System/String.xml#L4

            System.Private.CoreLib.json

            https://github.com/dotnet/dotnet-api-docs/blob/main/xml/SourceLinkInformation/net-8.0/System.Private.CoreLib.json

            DocCommentId.cs

            https://github.com/jbevain/cecil/blob/56d4409b8a0165830565c6e3f96f41bead2c418b/rocks/Mono.Cecil.Rocks/DocCommentId.cs#L303C2-L303C66

            DocumentationCommentId.cs

            https://github.com/dotnet/roslyn/blob/fd9a371c76d7b3440d0bf61ba2d8fe534d4a99ac/src/Compilers/Core/Portable/DocumentationCommentId.cs#L50



            已知限制

            在當(dāng)前的實(shí)施中,我們意識(shí)到一些限制:

            1. 對(duì)于 PDB 中沒有記錄文檔信息的類型(例如枚舉或接口),在 CustomDebugInformation 表中引入了新的 GUID TypeDefinitionDocuments 來(lái)解決此問題。但是,對(duì)于某些 DLL,這些信息有時(shí)會(huì)被修剪,導(dǎo)致我們無(wú)法生成鏈接。

              請(qǐng)參閱此處的錯(cuò)誤詳細(xì)信息 https://github.com/dotnet/runtime/issues/100051。

            2. 對(duì)于沒有定義主體的類成員(例如 extern 或 abstract),PDB 中不包含行信息(SequencePoints)。因此,我們無(wú)法指向某個(gè)跨度范圍,而是指向整個(gè)文件。我們計(jì)劃在未來(lái)做出改進(jìn)以解決此問題。

            TypeDefinitionDocuments

            https://www.w3.org/TR/WCAG22/#keyboard-accessible



            另一個(gè)改進(jìn)想法

            您可能已經(jīng)注意到,我們與 Go to definition共享了許多核心邏輯。事實(shí)上,我們?cè)趯?shí)現(xiàn)中重用了它們的幾個(gè)類。我們提出了一個(gè)準(zhǔn)備用來(lái)的改進(jìn)此過程的功能,即使用現(xiàn)有代碼修改 Roslyn,以生成供我們使用的類型/成員級(jí)源映射。


            如果社區(qū)有同樣的需求,請(qǐng)?jiān)u論為我們投票。謝謝!



            向我們提供您的反饋

            我們很樂意聽取您對(duì)使用這些鏈接的反饋,因此請(qǐng)告訴我們您的想法!如果您發(fā)現(xiàn)任何與鏈接相關(guān)的問題,請(qǐng)隨時(shí)使用反饋控件分享或在相關(guān)文檔存儲(chǔ)庫(kù)上提交 GitHub 問題。



            最后,致謝

            我要感謝我的同事@shiminxu 為這個(gè)項(xiàng)目做出的貢獻(xiàn)。還要感謝 .NET 團(tuán)隊(duì)的 @ericstj 和 Roslyn 團(tuán)隊(duì)的 @tmat 提供的技術(shù)指導(dǎo)。最后,感謝無(wú)數(shù)為實(shí)現(xiàn)這一改變做出的貢獻(xiàn)的人。

            @shiminxu

            https://github.com/jianying10202713

            @ericstj

            https://github.com/ericstj

            @tmat

            https://github.com/tmat

          日干貨好文分享丨請(qǐng)點(diǎn)擊+關(guān)注 對(duì)R語(yǔ)言感興趣的加微信fridaybifly,邀請(qǐng)你進(jìn)入R語(yǔ)言學(xué)習(xí)群。

          今天我們就一起來(lái)利用簡(jiǎn)單的R函數(shù)做一些爬蟲工作,當(dāng)做是為一些爬蟲愛好者提供一些思路。假如想爬取天善社區(qū)現(xiàn)在的在線課程數(shù)據(jù),查看你感興趣課程的相關(guān)信息(授課老師、課時(shí)數(shù)、價(jià)格、銷量)等等。接下來(lái),讓我們一步步完成以上的需求。

          先看看天善社區(qū)的視頻首頁(yè)地址:

          https://edu.hellobi.com/course/explore?page=1

          首頁(yè)截圖如下:

          在網(wǎng)頁(yè)上點(diǎn)擊鼠標(biāo)右鍵,選擇查看網(wǎng)頁(yè)源代碼,查看當(dāng)前頁(yè)面的HTML源碼:

          假如各位看官不懂得爬蟲技術(shù),只要懂得運(yùn)用readLines函數(shù)和簡(jiǎn)單的正則表達(dá)式就能完成簡(jiǎn)單的爬蟲工作。

          首先我們先利用readLines函數(shù)將網(wǎng)頁(yè)的html信息爬取到R中。

          查看讀取后的結(jié)果:

          可見,已經(jīng)把HTML的源碼爬到R中,接下來(lái),我們一步步提取需要的數(shù)據(jù)。

          先提取課程名稱

          現(xiàn)在提取課程數(shù)信息

          學(xué)習(xí)人數(shù)、授課老師、課程售價(jià)的信息根據(jù)以上方式提取出來(lái),代碼如下:

          可見,第一頁(yè)的課程信息全部被爬下來(lái)了(備注,第十個(gè)課程無(wú)授課老師,直接跳過)。

          我們發(fā)現(xiàn),天善一共有7頁(yè)視頻,現(xiàn)在利用爬蟲全部爬取下來(lái),總結(jié)網(wǎng)頁(yè)地址:

          https://edu.hellobi.com/course/explore?page=1

          https://edu.hellobi.com/course/explore?page=2

          ……

          爬取全部網(wǎng)頁(yè)數(shù)據(jù)的完整代碼如下:

          其實(shí),R做爬蟲也有很多功能強(qiáng)大的包,例如quantmod包、XML包、RCrul包、rvest包。善用這些包,可以實(shí)現(xiàn)復(fù)雜的爬蟲工作,并大大簡(jiǎn)化代碼量。最后,我們利用rvest包對(duì)以上的爬蟲重做一遍,這邊直接給出爬蟲代碼。

          結(jié)果如下:

          可見,天善線上一共有107套視頻。我們想查看一下謝佳標(biāo)老師現(xiàn)在在線的視頻有哪些,中需要在serach窗口輸入老師名字即可。

          說明:

          本文作者為天善智能簽約講師謝佳標(biāo),此文允許轉(zhuǎn)載,轉(zhuǎn)載時(shí)需請(qǐng)完整保留以下內(nèi)容,違者必究。

          原文來(lái)自天善智能社區(qū):

          www.hellobi.com

          原文地址:

          https://ask.hellobi.com/blog/xiejiabiao/5402

          友情提示:

          天善智能是國(guó)內(nèi)最大的商業(yè)智能BI、數(shù)據(jù)分析、大數(shù)據(jù)領(lǐng)域社區(qū),歡迎大家登陸天善學(xué)院有更多免費(fèi)行業(yè)專家數(shù)據(jù)庫(kù),商業(yè)智能BI,數(shù)據(jù)分析,大數(shù)據(jù),數(shù)據(jù)挖掘視頻和干貨好文分享。

          Friday BI Fly:每周一個(gè)主題,一場(chǎng)跟數(shù)據(jù)有關(guān)的行業(yè)、工具、技術(shù)的交流盛宴。我們的口號(hào)是“Friday BI Fly 周五BI飛起來(lái)”。 Friday BI Fly 微信直播活動(dòng)目前已舉辦30期,往期分享內(nèi)容包括:【金融行業(yè)、零售行業(yè)、旅游行業(yè)、大數(shù)據(jù)挖掘、大數(shù)據(jù)落地、數(shù)據(jù)分析師、數(shù)據(jù)治理、大數(shù)據(jù)征信、風(fēng)控管理、Python實(shí)戰(zhàn)、用戶畫像、數(shù)據(jù)治理、數(shù)據(jù)架構(gòu)、R語(yǔ)言等】。

          本周分享主題:2016年11月4日晚8點(diǎn)半微信直播交流游戲行業(yè)數(shù)據(jù)倉(cāng)庫(kù)存儲(chǔ)模型第38場(chǎng),參加每周五的微信直播分享活動(dòng),請(qǐng)加微信:fridaybifly(備注:公司+行業(yè)+姓名)。

          更多內(nèi)容歡迎登陸:https://www.hellobi.com/ 。


          主站蜘蛛池模板: 在线|一区二区三区| 日本韩国一区二区三区| 麻豆AV无码精品一区二区 | 国产一区二区三区免费看| 国产福利电影一区二区三区久久老子无码午夜伦不 | 国产一区二区三区播放心情潘金莲| 免费av一区二区三区| 免费无码一区二区三区| 一区二区三区在线| 亚洲一区二区三区四区在线观看| 亚洲欧美日韩国产精品一区| 亚洲国产精品一区二区第一页免 | 久久精品国产一区| 国产AV一区二区精品凹凸| 在线中文字幕一区| 久久久精品一区二区三区| 一区二区三区四区电影视频在线观看 | 中文字幕在线精品视频入口一区| 久久影院亚洲一区| 2022年亚洲午夜一区二区福利| 中文字幕一区二区在线播放| 一级毛片完整版免费播放一区| 无码国产精品一区二区免费式直播| 国精品无码一区二区三区在线| 国产福利电影一区二区三区| 精品国产一区二区三区在线| 欧洲亚洲综合一区二区三区| 国产精品一区二区毛卡片| 中字幕一区二区三区乱码| 亚洲一区综合在线播放| 日韩精品区一区二区三VR| 亚洲高清日韩精品第一区 | 中文字幕日韩一区二区三区不| 国产成人一区二区三区电影网站| 尤物精品视频一区二区三区| 国产成人av一区二区三区在线观看| 海角国精产品一区一区三区糖心| 人妻av综合天堂一区| 精品无码中出一区二区| 中文字幕亚洲一区二区三区| 亚洲乱码国产一区三区|