Visual Studio 2017无法在.NET Standard类库中加载.NET Framework引用怎么办?
解决.NET Standard多目标类库中框架引用警告及构建失败问题
我来帮你搞定这个头疼的引用问题,这个场景我之前也踩过坑,核心原因很明确:System.Runtime.Caching是.NET Framework专属的程序集,.NET Standard 2.0根本不包含它,你直接全局引用的话,会导致.NET Standard目标下找不到这个库,进而出现警告和构建失败。
下面给你几个具体的解决步骤:
1. 给引用加上目标框架条件
你需要修改.csproj文件,把System.Runtime.Caching的引用限制在net461目标下,这样.NET Standard目标就不会去加载它了。修改后的项目文件如下:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFrameworks>net461;netstandard2.0</TargetFrameworks> </PropertyGroup> <ItemGroup> <Compile Remove="Utility\EncryptionUtility.cs" /> </ItemGroup> <ItemGroup> <Folder Include="Utility\" /> </ItemGroup> <!-- 只在net461目标框架下引用这个程序集 --> <ItemGroup Condition="'$(TargetFramework)' == 'net461'"> <Reference Include="System.Runtime.Caching" /> </ItemGroup> </Project>
2. 处理.NET Standard下的缓存需求(如果有)
如果你的类库在.NET Standard环境下也需要缓存功能,千万别硬用.NET Framework的程序集,换用跨平台的替代方案:
- 安装NuGet包
Microsoft.Extensions.Caching.Memory,这是官方支持的跨平台缓存库,完美兼容.NET Standard 2.0 - 要是你需要同时兼容两种环境的代码,可以用条件编译区分:
#if NET461 // .NET Framework环境下用System.Runtime.Caching var cache = System.Runtime.Caching.MemoryCache.Default; #else // .NET Standard环境下用跨平台缓存库 var cache = new Microsoft.Extensions.Caching.Memory.MemoryCache(new Microsoft.Extensions.Caching.Memory.MemoryCacheOptions()); #endif
3. 清理重建项目
改完配置后,记得做这几步确保生效:
- 右键项目选择「清理」
- 接着选择「重新生成」
- 要是还是有问题,直接删掉项目目录下的
bin和obj文件夹,再重新构建一次,这招通常能解决很多缓存类的问题
这样操作后,黄色警告应该就会消失,项目也能正常构建了。
内容的提问来源于stack exchange,提问作者Iucounu
相关产品推荐
相关产品推荐

