TeamCity构建单元测试项目失败:缺少System.Runtime引用如何解决?
解决TeamCity中单元测试项目CS0012错误(无app.config场景)
遇到这种没app.config又要解决CS0012的情况,我有几个实战验证过的方案,你可以挨个试试:
方案1:直接修改项目文件添加显式引用
如果不想动NuGet或者构建配置,直接编辑单元测试项目的.csproj文件,手动添加System.Runtime的引用:
<ItemGroup> <Reference Include="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <!-- 这里的路径要对应你项目使用的.NET Framework版本,比如v4.7.2就替换成对应目录 --> <HintPath>$(MSBuildProgramFiles32)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.2\System.Runtime.dll</HintPath> </Reference> </ItemGroup>
保存后重新提交代码,TeamCity构建时就会自动识别这个引用了。
方案2:通过TeamCity构建参数强制注入引用
不想修改项目文件的话,可以在TeamCity的构建配置里做文章:
- 进入你的构建配置,找到Build Parameters选项卡,添加一个系统参数,键为
system.AdditionalReferences,值设为System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - 切换到Build Steps,找到对应的MSBuild构建步骤,在Command line parameters里添加:
/p:AdditionalReferences="%system.AdditionalReferences%"
这样MSBuild在构建时会自动把这个程序集加入引用列表,完全不需要改动项目代码。
方案3:升级项目的.NET Framework版本
如果你的单元测试项目用的是.NET Framework 4.5或更早的版本,升级到4.6.1及以上版本试试。更高版本的框架已经默认整合了System.Runtime的相关引用,很多这类依赖问题会自动消失。
方案4:通过NuGet包引入依赖
给单元测试项目安装System.Runtime的NuGet包,选择和你项目框架匹配的版本。NuGet会自动处理引用配置,不需要手动写任何xml或者配置文件,构建环境也能正确识别这个依赖。
补充说明
这个错误本质上是因为你的单元测试项目依赖的某个类库间接引用了System.Runtime,但测试项目本身没有显式声明这个引用,而TeamCity的构建环境没有自动处理这种传递依赖。上面的几个方案都是从“显式声明依赖”的角度出发解决问题的,根据你的项目场景选最适合的就行。
内容的提问来源于stack exchange,提问作者Anton Putau
相关产品推荐
相关产品推荐

