拓冰建站拓冰建站
首页 / 资讯中心 / 正文

dotnet/runtime 如何用 corerun 与 Core_Root 运行自己构建的托管应用?

dotnet/runtime 如何用 corerun 与 Core_Root 运行自己构建的托管应用【免费下载链接】runtime.NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps.项目地址: https://gitcode.com/GitHub_Trending/runtime6/runtime你在 dotnet/runtime 仓库里改动了 CoreCLR 或托管类库想用自己构建出来的运行时而不是机器上安装的 .NET来运行一个托管控制台应用验证改动是否生效。using-corerun-and-coreroot.md 给出了两条路径直接使用clr子集构建产物里的corerun宿主再通过CORE_LIBRARIES指定类库来源通过测试构建脚本生成 Core_Root——一个把你构建的运行时和所需类库打包在一起的目录——再用其中的corerun运行应用。前提条件已经至少构建过仓库的clr子集二进制产物位于artifacts/bin/coreclr/OS.arch.configuration。如果没有构建过先看 CoreCLR 构建文档。先了解 corerun 如何定位运行时和类库corerun是一个平台无关的快速测试工具定位 .NET 运行时二进制Windows 的coreclr.dll、macOS 的libcoreclr.dylib、Linux 的libcoreclr.so时按以下顺序使用启发式规则检查用户是否传了--clr-path参数检查是否定义了CORE_ROOT环境变量检查运行时二进制是否与corerun位于同一目录。无论用哪种方式找到运行时它的目录同时用于查找基类程序集System.Runtime.dll、System.IO.dll等。额外的类库目录可以通过定义CORE_LIBRARIES环境变量加入。注意corerun完全不感知 NuGet它只负责找到运行时和类库程序集。corerun在构建clr子集时生成位于repo root/artifacts/bin/coreclr/OS.Arch.Configuration目录Windows 上为corerun.exe。路径一用 clr 构建产物中的 corerun 运行应用准备一个测试应用先创建一个简单的 Hello World 控制台应用作为运行对象mkdir HelloWorld cd HelloWorld dotnet new console dotnet build设置 corerun 的查找路径下一步是让corerun能找到运行时和类库。文档示例假设你以Debug配置、x64架构构建且机器上安装的 .NET 运行时版本是7.0.0——请根据自己的构建配置和实际安装版本替换路径repo_root你的 runtime 仓库检出根目录7.0.0你机器上Microsoft.NETCore.App共享框架的版本目录。把corerun所在目录加入PATH可省略省略时每次用完整路径调用即可并把CORE_LIBRARIES指向系统安装的 .NET 共享框架目录。因为只构建了运行时类库用机器上已有的Windows 命令行set PATH%PATH%;repo_root\artifacts\bin\coreclr\windows.x64.Debug set CORE_LIBRARIES%ProgramFiles%\dotnet\shared\Microsoft.NETCore.App\7.0.0 corerun HelloWorld.dllmacOS 和 Linux文档示例为 osxLinux 上把路径换成linux# Change osx to linux if youre on a Linux machine. export PATH$PATH:repo_root/artifacts/bin/coreclr/osx.x64.Debug export CORE_LIBRARIES/usr/local/share/dotnet/shared/Microsoft.NETCore.App/7.0.0 corerun HelloWorld.dllPowerShell用追加到已有PATHLinux/macOS 上分隔符改用:$Env:PATH ;repo_root\artifacts\windows.x64.Debug $Env:CORE_LIBRARIES %ProgramFiles%\dotnet\shared\Microsoft.NETCore.App\7.0.0 corerun HelloWorld.dll上面的 PowerShell 片段按源文档原样保留。运行与验证执行corerun HelloWorld.dll后控制台应用应使用你构建的运行时正常运行并打印输出、退出。环境变量只需设置一次同一个终端实例内一直有效之后你重新构建运行时加入更多改动再重新构建应用时直接重跑corerun即可验证新改动。如果 corerun 报找不到运行时或程序集按上面的启发式顺序检查--clr-path是否指向有效路径、CORE_ROOT是否已定义、运行时二进制是否与 corerun 同目录以及CORE_LIBRARIES指向的目录里是否确实有应用依赖的 dll。可选用 self-contained 发布目录替代系统类库如果应用以 self-contained 方式发布dotnet publish --self-contained发布目录里已经部署了全部所需类库。这时只需把上一节的CORE_LIBRARIES改为指向该发布目录corerun就会从你的发布应用中加载这些程序集而不依赖系统安装的 .NET。路径二生成 Core_Root 后运行应用Core_Root 是测试构建脚本src/tests/build.cmd或 src/tests/build.sh整理出来的目录把刚构建的 CoreCLR 和测试所需的类库组件收集在一起输出到artifacts/tests/coreclr/OS.Arch.Configuration/Tests/Core_Root。与路径一相比它的优势是可以同时测试和调试类库改动。前置构建生成 Core_Root 前必须先构建过类库-subset libs。推荐的工作流是 clr 用Debug、类库用Release见 CoreCLR 构建文档./build.sh -subset clrlibs -runtimeConfiguration Debug -librariesConfiguration Release两个注意点来自 testing.md测试构建脚本默认在Release模式下查找类库无论你指定的运行时配置是什么。如果你用其他配置构建了类库必须传/p:LibrariesConfigurationyour_configyour_config换成你的实际配置如Debug。完整测试套件构建耗时很长因此建议只用-generatelayoutonly参数生成 Core_Root需要时再单独构建具体测试。生成 Core_Root在仓库根目录执行Windows 示例来自 testing.md假设 CoreCLR 为Debug、类库为Release因此无需额外参数.\src\tests\build.cmd generatelayoutonlymacOS/Linux 上对应src/tests/build.shCoreCLR 构建文档给出的带配置参数的示例为./src/tests/build.sh -arch x64 -checked -generatelayoutonly构建完成后Core_Root 位于artifacts/tests/coreclr/OS.arch.configuration/Tests/Core_Root。运行应用Core_Root 里已经包含了corerun和全部类库所以不需要再设置CORE_LIBRARIES把 Core_Root 加入PATH直接运行即可Windows 命令行set PATH%PATH%;repo_root\artifacts\tests\coreclr\windows.x64.Debug\Tests\Core_Root corerun HelloWorld.dllmacOS 和 Linux# Change linux to osx if youre on a macOS machine. export PATH$PATH:repo_root/artifacts/tests/coreclr/linux.x64.Debug/Tests/Core_Root corerun HelloWorld.dllPowerShell$Env:PATH ;repo_root\artifacts\tests\coreclr\windows.x64.Debug\Tests\Core_Root corerun HelloWorld.dll验证方式同路径一应用应使用 Core_Root 中你构建的运行时与类库正常执行并输出结果。corerun 的附加选项corerun --help会列出以下可选命令行参数--clr-path PATH在命令行上传入 Core_Root 的位置。若 corerun 本身就在 Core_Root 文件夹内或已通过CORE_ROOT环境变量设置了路径可省略该参数。示例corerun --clr-path /path/to/core_root HelloWorld.dll--property PROPERTY在初始化时向 .NET 运行时传入一个属性。示例corerun --property System.GC.Concurrenttrue HelloWorld.dll--debug在加载 .NET 运行时之前等待调试器附加。示例corerun --debug HelloWorld.dll--env传入一个.env文件路径为测试运行指定环境变量。示例corerun --env gcstress.env HelloWorld.dll限制与替代路径corerun不处理 NuGet 恢复只负责发现运行时二进制和类库程序集类库来源由CORE_LIBRARIES或 Core_Root 决定。本文只覆盖 corerun 与 Core_Root 这条路径。文档还提到另外两种用自建运行时跑应用的方式使用 Dev Shipping Packages见 using-dev-shipping-packages.md或配合机器上已安装的 SDK 替换自包含应用中的相应二进制。生成 Core_Root 的测试构建脚本默认按Release查找类库配置不一致时应用无法定位到正确的类库需按上文传/p:LibrariesConfigurationyour_config。【免费下载链接】runtime.NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps.项目地址: https://gitcode.com/GitHub_Trending/runtime6/runtime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门