如何在.NET Core测试应用中使用自定义corefx构建版本
在.NET Core测试应用中使用自定义构建的corefx版本
我之前也折腾过自定义corefx的替换,分享几个靠谱的方法,根据你的场景选就行:
方法1:直接引用自定义程序集(快速验证)
如果只是简单测试修改后的某个类,直接引用构建好的.dll最直接:
- 找到corefx构建输出的程序集目录,一般在
artifacts/bin/<目标类所在程序集名>/<构建配置(比如Release)>/net<你的目标框架版本>下面,比如修改了System.Collections,就找artifacts/bin/System.Collections/Release/net6.0 - 打开你的测试应用项目,右键“添加”→“引用”,选择浏览,找到上面路径下的
.dll和.pdb文件,添加引用 - 记得在引用的属性里把“复制本地”设为
True,这样运行时程序集才会被复制到输出目录,避免找不到
方法2:用自定义NuGet包(规范场景推荐)
如果你的修改涉及多个corefx程序集,用NuGet管理更省心:
- corefx构建时会自动生成NuGet包,路径在
artifacts/packages/<构建配置>/Shipping(正式包)或NonShipping(包含调试信息的包) - 给测试应用配置本地NuGet源:可以直接在项目文件(
.csproj)里添加包源,比如:<ItemGroup> <PackageSource Include="D:\corefx\artifacts\packages\Release\Shipping" /> </ItemGroup> - 修改项目里的
PackageReference,指定你构建的自定义版本号(版本号可以看NuGet包的文件名,比如System.Collections.6.0.0-custom.1.2345.6.nupkg里的6.0.0-custom.1.2345.6):<PackageReference Include="System.Collections" Version="6.0.0-custom.1.2345.6" /> - 注意:所有依赖的自定义corefx包都要替换成这个版本,不然会出现版本冲突的错误
方法3:通过runtimeconfig.json重定向运行时(替换全局corefx)
如果要让整个.NET Core运行时都使用你的自定义corefx,需要修改应用的runtimeconfig.json:
- 在测试应用的输出目录(或者项目根目录,构建时会自动复制)创建/修改
YourAppName.runtimeconfig.json,添加程序集绑定和探测路径:{ "runtimeOptions": { "assemblyBinding": { "dependencies": [ { "name": "System.Collections", "publicKeyToken": "b03f5f7f11d50a3a", "version": "6.0.0-custom.1.2345.6" } ] }, "additionalProbingPaths": [ "D:\corefx\artifacts\bin\System.Collections\Release\net6.0", "D:\corefx\artifacts\bin\System.Runtime\Release\net6.0" ] } } additionalProbingPaths是告诉运行时去哪里找你的自定义程序集,把所有修改过的程序集路径都加上
关键注意事项
- 必须保证测试应用的目标框架版本和自定义corefx构建的版本完全一致,比如你构建的是net6.0,测试应用不能用net7.0
- 每次替换后,记得删除测试应用的
bin和obj文件夹,清理缓存,避免旧程序集干扰 - 如果遇到版本冲突,用
dotnet list package命令查看当前项目的包依赖,找出还在使用官方版本的包,替换成自定义版本
关于官方指导文档,corefx的仓库wiki里有关于本地构建和替换使用的说明,核心步骤就是上面这些,不用额外找外链啦。
内容的提问来源于stack exchange,提问作者Andrey Zakharov
相关产品推荐
相关产品推荐

