源码编译dotnetcore的runtime
为了dotnetcore运行时的安可目标,特意在国庆假期研究了怎么编译dotnetcore的runtime。由于我们用的是.net6,最新的是8,所以从github下载的.net6的分支代码进行的编译。查遍了国内外资料,估计微软服务太体贴了,竟然没什么编译runtime的资料参照,而开始我也没翻源码doc的文档就自己猜着试了。整体试了4-5天总算自己给完全编译ok了,分享给需要安可的小伙伴,麻烦的应该就是runtime的编译了,因为涉及到cli的c++代码和环境依赖,后面再编译asp.netcore代码。虽然整个过程很痛苦,一直看编译报错和翻他的编译脚本及解决依赖问题和各种尝试。但是收获很多,C#编程环境更可控了,对Linux下c编译更加熟悉了。
成功编译的runtime
首先到开源的dotnet官网下载自己要编译的分支代码到本地
然后把下载的代码上传到linux的根下解压
代码大体层级,这个我是编译成功才翻文档的,早知道文档很明确就不用走这么多弯路了
Linux下的编译文档
Linux下用docker编译的镜像地址,不过国内网不好
dotnetcore编译的docker镜像地址,能够下载镜像的话应该镜像会容易些,不用解决复杂的依赖问题
| OS | Target Arch | Image location | crossrootfs location | Clang Version |
| --------------------------- | --------------- | ---------------------------------------------------------------------------------------------------- | -------------------- | ------------- |
| Ubuntu 16.04 | x64 | `mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-16.04-a50a721-20191120200116` | - | -clang9 |
| Alpine | x64 | `mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.9-WithNode-20200602002639-0fc54a3` | - | -clang5.0 |
| CentOS 7 (build for RHEL 7) | x64 | `mcr.microsoft.com/dotnet-buildtools/prereqs:centos-7-359e48e-20200313130914` | - | -clang9 |
| Ubuntu 16.04 | arm32 (armhf) | `mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-16.04-cross-20200413125008-09ec757` | `/crossrootfs/arm` | -clang9 |
| Ubuntu 16.04 | arm64 (arm64v8) | `mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-16.04-cross-arm64-20201022204150-b2c2436` | `/crossrootfs/arm64` | -clang9 |
| Alpine | arm64 (arm64v8) | `mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-16.04-cross-arm64-alpine-20200413125008-406629a` | `/crossrootfs/arm64` | -clang9 |
Linux下编译环境具体介绍,参照这个文档应该更准确
以下是我自己在CentOS7的编译经历,最终执行的编译命令是./build.sh --gcc指定用gcc编译了。
首先第一次运行build.sh时候他会下载一个版本的dotnetsdk来支持编译.net得基础库,这个下载很慢,而且没告诉下载到什么地方,
翻他的脚步发现他是把包下载到/root/下dotnet的隐藏文件了,可以把隐藏文件备份处理后面放进去就行了,避免每次下载.net环境慢。也能改他sh脚本的下载地址。
这里cmake版本要对,gcc要比较新,我试的好使的是gcc9,CentOS7默认gcc是4.8,需要升级。cmake也没有要求的版本,需要源码安装。
升级gcc
sudo yum install centos-release-scl
sudo yum install devtoolset-9-gcc*
scl enable devtoolset-9 bash
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
编译如果确实新版gcc头文件也是从gcc源码拷贝上传来解决
cmacke源码安装,下载地址https://cmake.org/files/
tar -zxvf cmake-3.16.4-Linux-x86_64.tar.gz
vi /etc/profile
export PATH=$PATH:/cmake-3.16.4-Linux-x86_64/bin
source /etc/profilevi ~/.bashrc
export PATH=$PATH:/cmake-3.16.4-Linux-x86_64/bin
缺少ttng头文件,这里要安装ttng软件,安装后了还是在usr/include下没头文件,我又到ttng官网下载源码把头文件上传上去才解决,这里也消耗了大量时间。
把下载的源码的头文件上传到/usr/include,其他包缺头文件也是同样处理
cmake版本不对,太高了也不行,太低了也不行。这里按文档要求安装就行。这个事情我消耗了太多时间,版本低了有些代码编译报错,用最新的cmake有的写法已经移除不支持了。
缺少ninja,用yum安装就行
编译成功之后后期操作又缺Python3,由于CentOS7默认安装的是2.7,还不能卸载默认的,卸载默认的之后yum会使用有问题,yum依赖的Python
/bin/sh: Python3_EXECUTABLE-NOTFOUND: command not found
首先从https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz下载Python3源码,上传到Linux上编译
先安装依赖,之前我安装里gcc和make额,没安装的先安装编译器
yum install libffi-devel -y
然后进入Python3代码目录生成makefile
chmod +x configure
./configure --prefix=/usr/local
执行编译和编译安装
make
make install
测试
python3 -V
pip -V
都搞定之后执行./build.sh --gcc就是漫长的编译过程了,持续十几分钟能编译完,下面是几个大概的片段
-- Performing Test HAVE_FDS_BITS - Failed-- Performing Test HAVE_PRIVATE_FDS_BITS-- Performing Test HAVE_PRIVATE_FDS_BITS - Failed-- Performing Test HAVE_SENDFILE_4-- Performing Test HAVE_SENDFILE_4 - Success-- Performing Test HAVE_SENDFILE_6-- Performing Test HAVE_SENDFILE_6 - Failed-- Performing Test HAVE_SENDFILE_7-- Performing Test HAVE_SENDFILE_7 - Failed-- Looking for fcopyfile-- Looking for fcopyfile - not found-- Looking for include file sys/sockio.h-- Looking for include file sys/sockio.h - not found-- Looking for include file linux/ethtool.h-- Looking for include file linux/ethtool.h - found-- Looking for include file sys/poll.h-- Looking for include file sys/poll.h - found-- Looking for include file sys/proc_info.h-- Looking for include file sys/proc_info.h - not found-- Looking for epoll_create1-- Looking for epoll_create1 - found-- Looking for accept4-- Looking for accept4 - found-- Looking for kqueue-- Looking for kqueue - not found-- Looking for disconnectx-- Looking for disconnectx - not found-- Performing Test HAVE_GETNAMEINFO_SIGNED_FLAGS-- Performing Test HAVE_GETNAMEINFO_SIGNED_FLAGS - Success-- Looking for malloc_size-- Looking for malloc_size - not found-- Looking for malloc_usable_size-- Looking for malloc_usable_size - found-- Looking for malloc_usable_size-- Looking for malloc_usable_size - not found-- Looking for posix_memalign-- Looking for posix_memalign - found-- Looking for aligned_alloc-- Looking for aligned_alloc - found
********************************************************[ 86%] Building C object System.IO.Compression.Native/CMakeFiles/System.IO.Compression.Native.dir/runtime-6.0.22/src/libraries/Native/AnyOS/brotli/enc/cluster.c.o[ 87%] Building C object System.IO.Compression.Native/CMakeFiles/System.IO.Compression.Native.dir/runtime-6.0.22/src/libraries/Native/AnyOS/brotli/enc/command.c.o[ 87%] Building C object System.IO.Compression.Native/CMakeFiles/System.IO.Compression.Native-Static.dir/runtime-6.0.22/src/libraries/Native/AnyOS/brotli/enc/entropy_encode.c.o[ 87%] Building C object System.IO.Compression.Native/CMakeFiles/System.IO.Compression.Native.dir/runtime-6.0.22/src/libraries/Native/AnyOS/brotli/enc/compress_fragment.c.o[ 88%] Building C object System.IO.Compression.Native/CMakeFiles/System.IO.Compression.Native-Static.dir/runtime-6.0.22/src/libraries/Native/AnyOS/brotli/enc/fast_log.c.o[ 88%] Building C object System.IO.Compression.Native/CMakeFiles/System.IO.Compression.Native-Static.dir/runtime-6.0.22/src/libraries/Native/AnyOS/brotli/enc/histogram.c.o[ 89%] Building C object System.IO.Compression.Native/CMakeFiles/System.IO.Compression.Native.dir/runtime-6.0.22/src/libraries/Native/AnyOS/brotli/enc/compress_fragment_two_pass.c.o[ 90%] Building C object System.IO.Compression.Native/CMakeFiles/System.IO.Compression.Native-Static.dir/runtime-6.0.22/src/libraries/Native/AnyOS/brotli/enc/literal_cost.c.o[ 90%] Building C object System.IO.Compression.Native/CMakeFiles/System.IO.Compression.Native-Static.dir/runtime-6.0.22/src/libraries/Native/AnyOS/brotli/enc/memory.c.o[ 91%] Building C object System.IO.Compression.Native/CMakeFiles/System.IO.Compression.Native-Static.dir/runtime-6.0.22/src/libraries/Native/AnyOS/brotli/enc/metablock.c.o[ 91%] Building C object System.IO.Compression.Native/CMakeFiles/System.IO.Compression.Native-Static.dir/runtime-6.0.22/src/libraries/Native/AnyOS/brotli/enc/static_dict.c.o[ 91%] Building C object System.IO.Compression.Native/CMakeFiles/System.IO.Compression.Native.dir/runtime-6.0.22/src/libraries/Native/AnyOS/brotli/enc/dictionary_hash.c.o[ 92%] Building C object System.IO.Compression.Native/CMakeFiles/System.IO.Compression.Native.dir/runtime-6.0.22/src/libraries/Native/AnyOS/brotli/enc/encode.c.o[ 93%] Building C object System.IO.Compression.Native/CMakeFiles/System.IO.Compression.Native-Static.dir/runtime-6.0.22/src/libraries/Native/AnyOS/brotli/enc/utf8_util.c.o[ 93%] Building C object System.IO.Compression.Native/CMakeFiles/System.IO.Compression.Native.dir/runtime-6.0.22/src/libraries/Native/AnyOS/brotli/enc/encoder_dict.c.o[ 94%] Building C object System.IO.Compression.Native/CMakeFiles/System.IO.Compression.Native-Static.dir/runtime-6.0.22/src/libraries/Native/AnyOS/System.IO.Compression.Native/entrypoints.c.o[ 94%] Linking C static library libSystem.IO.Compression.Native.a[ 95%] Building C object System.IO.Compression.Native/CMakeFiles/System.IO.Compression.Native.dir/runtime-6.0.22/src/libraries/Native/AnyOS/brotli/enc/entropy_encode.c.o[ 95%] Built target System.IO.Compression.Native-Static[ 95%] Building C object System.IO.Compression.Native/CMakeFiles/System.IO.Compression.Native.dir/runtime-6.0.22/src/libraries/Native/AnyOS/brotli/enc/fast_log.c.o[ 96%] Building C object System.IO.Compression.Native/CMakeFiles/System.IO.Compression.Native.dir/runtime-6.0.22/src/libraries/Native/AnyOS/brotli/enc/histogram.c.o[ 96%] Building C object System.IO.Compression.Native/CMakeFiles/System.IO.Compression.Native.dir/runtime-6.0.22/src/libraries/Native/AnyOS/brotli/enc/literal_cost.c.o[ 97%] Building C object System.IO.Compression.Native/CMakeFiles/System.IO.Compression.Native.dir/runtime-6.0.22/src/libraries/Native/AnyOS/brotli/enc/memory.c.o[ 97%] Building C object System.IO.Compression.Native/CMakeFiles/System.IO.Compression.Native.dir/runtime-6.0.22/src/libraries/Native/AnyOS/brotli/enc/metablock.c.o[ 98%] Building C object System.IO.Compression.Native/CMakeFiles/System.IO.Compression.Native.dir/runtime-6.0.22/src/libraries/Native/AnyOS/brotli/enc/static_dict.c.o[ 99%] Building C object System.IO.Compression.Native/CMakeFiles/System.IO.Compression.Native.dir/runtime-6.0.22/src/libraries/Native/AnyOS/brotli/enc/utf8_util.c.o[ 99%] Building C object System.IO.Compression.Native/CMakeFiles/System.IO.Compression.Native.dir/runtime-6.0.22/src/libraries/Native/AnyOS/System.IO.Compression.Native/entrypoints.c.o[100%] Building C object System.IO.Compression.Native/CMakeFiles/System.IO.Compression.Native.dir/__/version.c.o[100%] Linking C shared library libSystem.IO.Compression.Native.soVerifying System.IO.Compression.Native entry points against entrypoints.c Stripping symbols from $<TARGET_FILE:System.IO.Compression.Native> into file $<TARGET_FILE:System.IO.Compression.Native>.dbg[100%] Built target System.IO.Compression.NativeInstall the project...-- Install configuration: "DEBUG"-- Installing: /runtime-6.0.22/artifacts/bin/native/net6.0-Linux-Debug-x64/./libSystem.IO.Compression.Native.so.dbg-- Installing: /runtime-6.0.22/artifacts/bin/native/net6.0-Linux-Debug-x64/./libSystem.IO.Compression.Native.so-- Installing: /runtime-6.0.22/artifacts/bin/native/net6.0-Linux-Debug-x64/./libSystem.IO.Compression.Native.a-- Installing: /runtime-6.0.22/artifacts/bin/native/net6.0-Linux-Debug-x64/./libSystem.IO.Ports.Native.so.dbg-- Installing: /runtime-6.0.22/artifacts/bin/native/net6.0-Linux-Debug-x64/./libSystem.IO.Ports.Native.so-- Installing: /runtime-6.0.22/artifacts/bin/native/net6.0-Linux-Debug-x64/./libSystem.IO.Ports.Native.a-- Installing: /runtime-6.0.22/artifacts/bin/native/net6.0-Linux-Debug-x64/./libSystem.Native.so.dbg-- Installing: /runtime-6.0.22/artifacts/bin/native/net6.0-Linux-Debug-x64/./libSystem.Native.so-- Installing: /runtime-6.0.22/artifacts/bin/native/net6.0-Linux-Debug-x64/./libSystem.Native.a-- Installing: /runtime-6.0.22/artifacts/bin/native/net6.0-Linux-Debug-x64/./libSystem.Globalization.Native.so.dbg-- Installing: /runtime-6.0.22/artifacts/bin/native/net6.0-Linux-Debug-x64/./libSystem.Globalization.Native.so-- Installing: /runtime-6.0.22/artifacts/bin/native/net6.0-Linux-Debug-x64/./libSystem.Globalization.Native.a-- Installing: /runtime-6.0.22/artifacts/bin/native/net6.0-Linux-Debug-x64/./libSystem.Net.Security.Native.so.dbg-- Installing: /runtime-6.0.22/artifacts/bin/native/net6.0-Linux-Debug-x64/./libSystem.Net.Security.Native.so-- Installing: /runtime-6.0.22/artifacts/bin/native/net6.0-Linux-Debug-x64/./libSystem.Net.Security.Native.a************************************************************************System.Security.Cryptography.Xml -> /runtime-6.0.22/artifacts/bin/System.Security.Cryptography.Xml/netstandard2.0-Debug/System.Security.Cryptography.Xml.dllMicrosoft.Extensions.Logging.Debug -> /runtime-6.0.22/artifacts/bin/Microsoft.Extensions.Logging.Debug/netstandard2.0-Debug/Microsoft.Extensions.Logging.Debug.dllMicrosoft.Extensions.Http -> /runtime-6.0.22/artifacts/bin/Microsoft.Extensions.Http/netstandard2.0-Debug/Microsoft.Extensions.Http.dllMicrosoft.Extensions.Logging.EventSource -> /runtime-6.0.22/artifacts/bin/Microsoft.Extensions.Logging.EventSource/netstandard2.0-Debug/Microsoft.Extensions.Logging.EventSource.dllMicrosoft.Extensions.Logging.TraceSource -> /runtime-6.0.22/artifacts/bin/Microsoft.Extensions.Logging.TraceSource/netstandard2.0-Debug/Microsoft.Extensions.Logging.TraceSource.dllMicrosoft.Extensions.Logging.EventLog -> /runtime-6.0.22/artifacts/bin/Microsoft.Extensions.Logging.EventLog/netstandard2.0-Debug/Microsoft.Extensions.Logging.EventLog.dllMicrosoft.Extensions.Logging.Configuration -> /runtime-6.0.22/artifacts/bin/Microsoft.Extensions.Logging.Configuration/netstandard2.0-Debug/Microsoft.Extensions.Logging.Configuration.dllSystem.Security.Cryptography.Xml -> /runtime-6.0.22/artifacts/bin/System.Security.Cryptography.Xml/net6.0-Debug/System.Security.Cryptography.Xml.dllSystem.Data.OleDb -> /runtime-6.0.22/artifacts/bin/System.Data.OleDb/net6.0-Debug/System.Data.OleDb.dllMicrosoft.Extensions.Logging.Console -> /runtime-6.0.22/artifacts/bin/Microsoft.Extensions.Logging.Console/netstandard2.0-Debug/Microsoft.Extensions.Logging.Console.dllMicrosoft.Extensions.Configuration.Xml -> /runtime-6.0.22/artifacts/bin/Microsoft.Extensions.Configuration.Xml/netstandard2.0-Debug/Microsoft.Extensions.Configuration.Xml.dllMicrosoft.Extensions.Logging.Console -> /runtime-6.0.22/artifacts/bin/Microsoft.Extensions.Logging.Console/net6.0-Debug/Microsoft.Extensions.Logging.Console.dllMicrosoft.Extensions.Hosting -> /runtime-6.0.22/artifacts/bin/Microsoft.Extensions.Hosting/net6.0-Debug/Microsoft.Extensions.Hosting.dllMicrosoft.Extensions.Hosting -> /runtime-6.0.22/artifacts/bin/Microsoft.Extensions.Hosting/netstandard2.1-Debug/Microsoft.Extensions.Hosting.dllMicrosoft.Extensions.Hosting.Systemd -> /runtime-6.0.22/artifacts/bin/Microsoft.Extensions.Hosting.Systemd/netstandard2.1-Debug/Microsoft.Extensions.Hosting.Systemd.dllMicrosoft.Extensions.Hosting.WindowsServices -> /runtime-6.0.22/artifacts/bin/Microsoft.Extensions.Hosting.WindowsServices/netstandard2.1-Debug/Microsoft.Extensions.Hosting.WindowsServices.dllmscorlib -> /runtime-6.0.22/artifacts/bin/manual.mscorlib/net6.0-Debug/mscorlib.dllSystem -> /runtime-6.0.22/artifacts/bin/manual.System/net6.0-Debug/System.dllSystem.Data -> /runtime-6.0.22/artifacts/bin/manual.System.Data/net6.0-Debug/System.Data.dllSystem.Xml -> /runtime-6.0.22/artifacts/bin/manual.System.Xml/net6.0-Debug/System.Xml.dllApiCompat -> Trimming linux-x64 runtime pack assemblies with ILLinker...Trimming linux-x64 OOB assemblies with ILLinker...externals -> Microsoft.NETCore.App.Runtime.Composite -> /runtime-6.0.22/artifacts/obj/Microsoft.NETCore.App.Runtime.Composite/Debug/net6.0/linux-x64/output/ -> /runtime-6.0.22/artifacts/packages/Debug/Shipping//dotnet-runtime-internal-composite-6.0.22-linux-x64.tar.gz/runtime-6.0.22/artifacts/obj/Microsoft.NETCore.App.Runtime.Composite/Debug/net6.0/linux-x64/symbols/ -> /runtime-6.0.22/artifacts/packages/Debug/Shipping//dotnet-runtime-composite-symbols-linux-x64-6.0.22.tar.gzSuccessfully created package '/runtime-6.0.22/artifacts/packages/Debug/Shipping/Microsoft.NETCore.App.Composite.6.0.22.nupkg'.Successfully created package '/runtime-6.0.22/artifacts/packages/Debug/Shipping/Microsoft.NETCore.App.Composite.6.0.22.symbols.nupkg'.Microsoft.NETCore.App.Composite.Bundle -> /runtime-6.0.22/artifacts/obj/Microsoft.NETCore.App.Composite.Bundle/Debug/net6.0/linux-x64/output/ -> /runtime-6.0.22/artifacts/packages/Debug/Shipping//dotnet-runtime-composite-6.0.22-linux-x64.tar.gzMicrosoft.NETCore.App.Ref -> /runtime-6.0.22/artifacts/obj/Microsoft.NETCore.App.Ref/Debug/net6.0/linux-x64/output/ -> /runtime-6.0.22/artifacts/packages/Debug/Shipping//dotnet-targeting-pack-6.0.22-linux-x64.tar.gzSuccessfully created package '/runtime-6.0.22/artifacts/packages/Debug/Shipping/Microsoft.NETCore.App.Ref.6.0.22.nupkg'.Successfully created package '/runtime-6.0.22/artifacts/packages/Debug/Shipping/Microsoft.NETCore.App.Ref.6.0.22.symbols.nupkg'.Microsoft.NETCore.App.Host -> /runtime-6.0.22/artifacts/obj/Microsoft.NETCore.App.Host/Debug/net6.0/linux-x64/output/ -> /runtime-6.0.22/artifacts/packages/Debug/Shipping//dotnet-apphost-pack-6.0.22-linux-x64.tar.gzSuccessfully created package '/runtime-6.0.22/artifacts/packages/Debug/Shipping/Microsoft.NETCore.App.Host.linux-x64.6.0.22.nupkg'.Successfully created package '/runtime-6.0.22/artifacts/packages/Debug/Shipping/Microsoft.NETCore.App.Host.linux-x64.6.0.22.symbols.nupkg'.Microsoft.NETCore.App.Crossgen2 -> /runtime-6.0.22/artifacts/obj/Microsoft.NETCore.App.Crossgen2/Debug/net6.0/linux-x64/output/ -> /runtime-6.0.22/artifacts/packages/Debug/Shipping//dotnet-crossgen2-6.0.22-linux-x64.tar.gzSuccessfully created package '/runtime-6.0.22/artifacts/packages/Debug/Shipping/Microsoft.NETCore.App.Crossgen2.linux-x64.6.0.22.nupkg'.Successfully created package '/runtime-6.0.22/artifacts/packages/Debug/Shipping/Microsoft.NETCore.App.Crossgen2.linux-x64.6.0.22.symbols.nupkg'.dotnet-host -> dotnet-hostfxr -> /runtime-6.0.22/artifacts/obj/dotnet-hostfxr/Debug/net6.0/linux-x64/output/ -> /runtime-6.0.22/artifacts/packages/Debug/Shipping//dotnet-hostfxr-internal-6.0.22-linux-x64.tar.gzdotnet-runtime-deps-centos.7 -> dotnet-runtime-deps-cm.1 -> dotnet-runtime-deps-cm.2 -> dotnet-runtime-deps-debian -> dotnet-runtime-deps-fedora.27 -> dotnet-runtime-deps-fedora.34 -> dotnet-runtime-deps-opensuse.42 -> dotnet-runtime-deps-oraclelinux.7 -> dotnet-runtime-deps-rhel.7 -> dotnet-runtime-deps-sles.12 -> Microsoft.NETCore.App.Runtime -> /runtime-6.0.22/artifacts/obj/Microsoft.NETCore.App.Runtime/Debug/net6.0/linux-x64/output/ -> /runtime-6.0.22/artifacts/packages/Debug/Shipping//dotnet-runtime-internal-6.0.22-linux-x64.tar.gz/runtime-6.0.22/artifacts/obj/Microsoft.NETCore.App.Runtime/Debug/net6.0/linux-x64/symbols/ -> /runtime-6.0.22/artifacts/packages/Debug/Shipping//dotnet-runtime-symbols-linux-x64-6.0.22.tar.gzSuccessfully created package '/runtime-6.0.22/artifacts/packages/Debug/Shipping/Microsoft.NETCore.App.Runtime.linux-x64.6.0.22.nupkg'.Successfully created package '/runtime-6.0.22/artifacts/packages/Debug/Shipping/Microsoft.NETCore.App.Runtime.linux-x64.6.0.22.symbols.nupkg'.Microsoft.NETCore.App.Bundle -> /runtime-6.0.22/artifacts/obj/Microsoft.NETCore.App.Bundle/Debug/net6.0/linux-x64/output/ -> /runtime-6.0.22/artifacts/packages/Debug/Shipping//dotnet-runtime-6.0.22-linux-x64.tar.gzMicrosoft.NET.HostModel -> /runtime-6.0.22/artifacts/bin/Microsoft.NET.HostModel/Debug/netstandard2.0/Microsoft.NET.HostModel.dllSuccessfully created package '/runtime-6.0.22/artifacts/packages/Debug/NonShipping/Microsoft.NET.HostModel.6.0.22-dev.nupkg'.Successfully created package '/runtime-6.0.22/artifacts/packages/Debug/NonShipping/Microsoft.NET.HostModel.6.0.22-dev.symbols.nupkg'.TestUtils -> /runtime-6.0.22/artifacts/bin/TestUtils/Debug/net6.0/TestUtils.dllHostActivation.Tests -> /runtime-6.0.22/artifacts/bin/HostActivation.Tests/Debug/net6.0/HostActivation.Tests.dllBundleHelper -> /runtime-6.0.22/artifacts/bin/BundleHelper/Debug/net6.0/BundleHelper.dllMicrosoft.NET.HostModel.ComHost.Tests -> /runtime-6.0.22/artifacts/bin/Microsoft.NET.HostModel.ComHost.Tests/Debug/net6.0/Microsoft.NET.HostModel.ComHost.Tests.dllMicrosoft.DotNet.CoreSetup.Packaging.Tests -> /runtime-6.0.22/artifacts/bin/Microsoft.DotNet.CoreSetup.Packaging.Tests/Debug/net6.0/Microsoft.DotNet.CoreSetup.Packaging.Tests.dllMicrosoft.NET.HostModel.AppHost.Tests -> /runtime-6.0.22/artifacts/bin/Microsoft.NET.HostModel.AppHost.Tests/Debug/net6.0/Microsoft.NET.HostModel.AppHost.Tests.dllAppHost.Bundle.Tests -> /runtime-6.0.22/artifacts/bin/AppHost.Bundle.Tests/Debug/net6.0/AppHost.Bundle.Tests.dllMicrosoft.NET.HostModel.Bundle.Tests -> /runtime-6.0.22/artifacts/bin/Microsoft.NET.HostModel.Bundle.Tests/Debug/net6.0/Microsoft.NET.HostModel.Bundle.Tests.dllBuild succeeded.0 Warning(s)0 Error(s)Time Elapsed 00:29:43.24
开心 安全可控达标,用实际证明jdk可以国内控制编译;dotnet也可以,还是我自己编译可控的,哈哈
相关文章:

源码编译dotnetcore的runtime
为了dotnetcore运行时的安可目标,特意在国庆假期研究了怎么编译dotnetcore的runtime。由于我们用的是.net6,最新的是8,所以从github下载的.net6的分支代码进行的编译。查遍了国内外资料,估计微软服务太体贴了,竟然没什…...

11个在线免费调整图像大小而不会降低质量工具
图片对于增强您的网站、博客和其他在线平台的视觉效果非常重要,而这些图片的正确尺寸在这里起着重要作用。如果您有多种尺寸的图像并且想要调整为一个尺寸,可以使用多种在线图像调整工具。使用在线工具,没有软件下载或安装的麻烦,…...

聊聊机器的情感和意识
这是鼎叔的第七十七篇原创文章。行业大牛和刚毕业的小白,都可以进来聊聊。 欢迎关注本公众号《敏捷测试转型》,星标收藏,大量原创思考文章陆续推出。 鼎叔的个人专著《无测试组织-测试团队的敏捷转型》无测试组织:测试团队的敏捷…...
职责链模式,非常容易被忽视的设计模式之一(设计模式与开发实践 P13)
文章目录 现实实例反例优化异步职责链 职责链模式在 C# 中是常见的,他的定义是:使多个对象都有机会处理请求,从而避免发送者和请求者之间的耦合关系,将对象连成一条链并传递该请求,直到有一个对象处理它为止 现实实例…...

架构师选择题--计算机网络
架构师选择题--计算机网络 22年考题21年考题 22年考题 d http:80 https:httpssl :443 b b pop3是邮件接收协议:110 SMTP是邮件发送协议:25 http:80 A 网络隔离:防火墙(逻辑),网闸(物…...
【图论】Linova and Kingdom—CF1336A
Linova and Kingdom—CF1336A 参考文章 思路 1 1 1 号节点为根节点。很容易想到,工业城市在树的下边,旅游城市在树的上边。具体来说,如果节点 u u u 是工业城市,那么它的子树的所有节点一定都是工业城市;如果节点 u…...

【红日靶场】vulnstack3-完整渗透过程
系列文章目录 【红日靶场】vulnstack1-完整渗透过程 【红日靶场】vulnstack2-完整渗透过程 【红日靶场】vulnstack3-完整渗透过程 文章目录 系列文章目录基本信息环境配置开始渗透信息收集暴力破解漏洞利用绕过内网信息收集尝试上线msf上线msf横向移动msf 传达会话给cs横向到域…...
物联网通信技术课程作业资料(TPUNB技术)
参考内容 TPUNB无线通信技术 - 技象科技 (techphant.cn) 技象科技CTO郑凛:用最好的物联网服务最多的人 | 了不起的创变者_技术_通信_团队 (sohu.com) LPWAN技术融合使用大势之下,TPUNB奔跑的一年-IOTE物联网展 (baidu.com) 院士认可国际首创…...

[开源]研发管理项目,支持从需求到代码发布全过程全生命周期管理
一、开源项目简介 neatlogic-rdm支持从需求到代码发布全过程覆盖。具备需求管理、缺陷追踪、测试计划、测试用例、报表仪表板等功能,支持关联外部代码库如GitLab、GitHub等。个性化的属性配置和状态流转控制,能帮助用户管理不同类型项目。 二、开源协议…...

一文生成猫眼电影热榜词云
1.爬取猫眼电影热榜数据 此次爬取的是电影票房的热榜电影名称,具体网站网址为猫眼电影热榜,经过实验观察后发现,此处的数据是通过ajax异步加载的,如果不相信可以使用request对当前网站网址发送请求,会发现无法获取电影…...
监控脚本展示
需求: 监控SVQC,SVCD,FHTC,FHQC,FHCD文件的生成 监控服务器:10.10.3.56 监控路径:/data/app/datafile/ftp/qdttec/10000002/download/yyyyMMdd/* 监控时间:每天7点开始,2…...

【重拾C语言】五、模块化程序设计——函数(定义、调用、参数传递、结果返回、函数原型;典例:打印字符图形、验证哥德巴赫猜想)
目录 前言 五、模块化程序设计——函数 5.1 计算三角形的重心 5.2 函数 5.2.1 函数定义 5.2.2 函数调用 a. 函数调用的形式和过程 b. 参数传递 值传递 指针传递 c. 函数结果返回 5.2.3 函数原型(先调用后定义) 5.3 程序设计实例 5.3.1 打印…...
Unity实现设计模式——迭代器模式
Unity实现设计模式——迭代器模式 迭代器模式是一种行为型设计模式,它提供了一种统一的方式来访问集合对象中的元素,而不是暴露集合内部的表示方式。简单地说,就是将遍历集合的责任封装到一个单独的对象中,我们可以按照特定的方式…...

【数据结构与算法】之“堆”介绍
目录 堆的基本存储 一、概念及其介绍 二、适用说明 三、结构图示 堆的 shift up 堆的 shift down 基础堆排序 一、概念及其介绍 二、适用说明 三、过程图示 优化堆排序 索引堆及其优化 一、概念及其介绍 二、适用说明 三、结构图示 堆的基本存储 一、概念及其介…...
ncnn Fatal signal 11 (SIGSEGV) 使用GPU加速崩溃
如果你的报错堆栈中包含以下信息,其中的关键信息是 anon:dalvik-classes2.dex extracted in memory Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x3c in tid 8619 (eplabv3plusncnn), pid 8619 () 2023-10-07 15:48:31.395 9793-9793 DEBUG …...

计算机考研 | 2018年 | 计算机组成原理真题
文章目录 【计算机组成原理2018年真题44题-15分】【第一步:信息提取】【第二步:具体解答】 【计算机组成原理2018年真题45题-8分】【第一步:信息提取】【第二步:具体解答】 【计算机组成原理2018年真题44题-15分】 某计算机采用页…...
用Configuration注解的方式写一个java过滤器的详细实例?
在Java中,可以使用Configuration注解和Spring框架来创建和配置过滤器。下面是一个详细的示例: 首先,创建一个实现javax.servlet.Filter接口的过滤器类,例如MyFilter: import javax.servlet.*; import java.io.IOExce…...

基于Springboot实现旧物置换网站平台演示【项目源码+论文说明】分享
基于Springboot实现旧物置换网站平台演示 摘要 随着时代在一步一步在进步,旧物也成人们的烦恼,许多平台网站都在推广自已的产品像天猫、咸鱼、京东。所以开发出一套关于旧物置换网站成为必需。旧物置换网站主要是借助计算机,通过对用户进行管…...

想要精通算法和SQL的成长之路 - 存在重复元素
想要精通算法和SQL的成长之路 - 存在重复元素 前言一. 存在重复元素II二. 存在重复元素III2.1 基于红黑树增删改查 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 存在重复元素II 原题链接 思路: 我们用HashSet存储元素,做到去重的效果。同时存储…...

使用华为eNSP组网试验⑸-访问控制
今天练习使用华为sNSP模拟网络设备上的访问控制,这样的操作我经常在华为的S7706、S5720、S5735或者H3C的S5500、S5130、S7706上进行,在网络设备上根据情况应用访问控制的策略是一个网管必须熟练的操作,只是在真机上操作一般比较谨慎ÿ…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...