zoukankan      html  css  js  c++  java
  • asp.net core学习:准备asp.net core源码编译环境

    通过源码学习,不但可以让我们知道asp.net core框架更底层的原理,而且在遇到问题找不到资料时,也是一个解决道路,以下是我准备asp.net core源码编译时的步骤。

    1.下载源码:github https://github.com/dotnet/aspnetcore

    $ git clone --recursive https://github.com/aspnet/AspNetCore

    $ git submodule update --init --recursive

    2.用希望调试的tag版本创建分支,如果只想调主分支可忽略此步,我要调试的是 v3.1.10,选择版本的时候最好选择你本机Asp.net core的最高版本,

    查看所有tag

    $ git tag

    检出v3.1.10

    $ git checkout -b local3.1.10 v3.1.10

    还原子模块

    $ git submodule update --init --recursive

    3.准备环境

    • windows 10,版本>=1803,打开powershell执行脚本的限制

    以管理员运行powershell

    PS> set-ExecutionPolicy RemoteSigned,选择'Y'

    • >10GB的磁盘剩余空间
    • Visual Studio 2019,同时需要安装C++桌面开发包和其它的一些必要的组件

    PS> ./eng/scripts/InstallVisualStudio.ps1

    • Git客户端工具
    • NodeJS >=10.14.2
    • JDK >=11,可用安装脚本安装

    PS> ./eng/scripts/InstallJdk.ps1

    • 安装Chrome, Selenium测试需要这个

    4.Visual Stduio 中编译

    • 还原依赖,和各种语言、平台项目的包.

    PS> . estore.cmd

    这个过程会比较慢,等的时间也是最长的,尤其Yarn的包管坑不管埋的慢,一直在失败,程序会自动重试。

    • 编译
    PS>.uild.cmd

    经过漫长的等待,如果不出意外,就编译成功了。程序生成在:artifacts/bin目录下。

    • 源码中根据不同的组件包含多个解决方案,sln是不可以直接打开的,正确的方式是运行目录 里的startvs.cmd 它会设置必要的环境变量,并自动使用Visual Studio打开.sln文件。

    我们以MVC项目为例,打开/src/Mvc/startvs.cmd。

    “生成”一下samples/MvcSandbox,并设为启动项目,如果全部生成成功,就可以运行了。这里需要注意,运行的时候要以控制台模式运行Mvc,而不要选择“IIS Express"模式。

    成功运行如下:

     5.打包及源码步进调试

    • 编译源码生成nuget包和运行时安装包。

    PS>./build.cmd -all -pack -arch x64

    PS>./build.cmd -all -pack -arch x86 -noBuildJava

    PS>./build.cmd -buildInstallers

    编译出来的运行时安装包,装上之后,在新建项目时,选择对应的asp.net core 版本,在调试的时候就可以步进调试了。

     6.编译Extensions项目

    • 在前面我们调试的时候会发现在有些函数是不能逐语句调试的,除去.net core的程序集外,还有一部分是位于Extensions项目的程序集,我们通过源码编译一下.

    源码下载

    $ git clone https://github.com/dotnet/extensions

    把指定标签版本迁至分支

    $ git checkout -b local3.1.10 v3.1.10

    还原依赖

    PS> ./restore.cmd

    打开VS 编辑源码

    PS> ./startvs.cmd

    • Extensions项目不是安装包,而是一系统的程序集,我们可以通过生成符号nuget包并在vs中引用这些包的方式来实现调试时步入源码。
    第一步.编译生成

    PS> ./build.cmd

    编译之后会在artifactspackagesDebugShipping目录生成nuget的符号包 

    第二步.在需要调试项目的解决方案目录(.sln目录)新建nuget.config文件,文件内容:
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <packageSources>
            <clear />
            <add key="MyBuildOfAspNetCore" value="D:dotnet_opensourceextensionsartifactspackagesDebugShipping" />
            <add key="NuGet.org" value="https://api.nuget.org/v3/index.json" />
        </packageSources>
    </configuration>

    MyBuildOfAspNetCore的值为我们编译出来的包含符号包的目录。

    当然也可以在VS中把我们的MyBuildOfAspNetCore设置成全部的nuget源,针对所有项目都生效。


    第三步.项目中使用nuget引用将需要步入源码的nuget包,调试时逐语句进入即可。

    如果以前我们引用过相同版本的extensions nuget包,可能存在缓存的问题而加载不了我们自已编译的extensions。我们可以清一下nuget的缓存。

    打开Visual Studio ,Tools -> NuGet Package Manager -> Package Manager Colsole,输入命令

    PM> nuget locals all -clear

    7.其它问题

    *我在网上看到别人restore慢的解决方案是设置代理,如下:

    需要为 Powershell 与命令行设置代理,根据自己代理软件的监听的端口进行调整:
    # CMD
    set http_proxy=http://127.0.0.1:7890 & set https_proxy=http://127.0.0.1:7890

    # Powershell
    $Env:http_proxy="http://127.0.0.1:7890";$Env:https_proxy="http://127.0.0.1:7890"

     但我是开着梯子编的,不过我的梯子没啥用。不知这个方法是否可行。

     

    *如果遇到以下错误,需要自已下载相应版本的grandle,也可在编译命令后加“ -noBuildJava”,来不编译java部分。

     grandle发行列表:https://services.gradle.org/distributions/

      下载相应的文件再重新编译即可,

    我的是gradle-5.3-bin.zip至目录 :C:Users[你的登陆用户].gradlewrapperdistsgradle-5.3-bin[随机目录]

      

  • 相关阅读:
    bzoj1467 Pku3243 clever Y
    bzoj2242 [SDOI2011]计算器
    卡特兰数
    洛谷P1290 欧几里得的游戏
    bzoj2277 [Poi2011]Strongbox
    poj2406 Power Strings
    Codeforces 892 D.Gluttony
    Codeforces 892 C.Pride
    Codeforces 892 B.Wrath
    Codeforces 892 A.Greed
  • 原文地址:https://www.cnblogs.com/asminfo/p/14158764.html
Copyright © 2011-2022 走看看