您当前的位置:首页 > .Net家族

Cannot find compilation library location for package“System.Security.Cryptography.Pkcs”异常解决办法

作者:无涯 时间:2023-08-28 10:58:50 阅读数:132 人阅读

在日常开发过程中,我们有时会遇到一些意想不到的异常。比如,今天在启动项目时突然发生了如下异常:

InvalidOperationException: Cannot find compilation library location for package 'System.Security.Cryptography.Pkcs'
Microsoft.Extensions.DependencyModel.CompilationLibrary.ResolveReferencePaths(ICompilationAssemblyResolver resolver, List<string> assemblies)
Microsoft.Extensions.DependencyModel.CompilationLibrary.ResolveReferencePaths()
Microsoft.AspNetCore.Mvc.ApplicationParts.AssemblyPartExtensions+<>c.<GetReferencePaths>b__0_0(CompilationLibrary library)
System.Linq.Enumerable+SelectManySingleSelectorIterator<TSource, TResult>.MoveNext()
System.Collections.Generic.List<T>.AddRange(IEnumerable<T> collection)
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.RazorReferenceManager.GetReferencePaths()
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.RazorReferenceManager.GetCompilationReferences()
System.Threading.LazyInitializer.EnsureInitializedCore<T>(ref T target, ref bool initialized, ref object syncLock, Func<T> valueFactory)
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.RazorReferenceManager.get_CompilationReferences()
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.LazyMetadataReferenceFeature.get_References()
Microsoft.CodeAnalysis.Razor.CompilationTagHelperFeature.GetDescriptors()
Microsoft.AspNetCore.Razor.Language.DefaultRazorTagHelperBinderPhase.ExecuteCore(RazorCodeDocument codeDocument)
Microsoft.AspNetCore.Razor.Language.RazorEnginePhaseBase.Execute(RazorCodeDocument codeDocument)
Microsoft.AspNetCore.Razor.Language.DefaultRazorEngine.Process(RazorCodeDocument document)
Microsoft.AspNetCore.Razor.Language.DefaultRazorProjectEngine.ProcessCore(RazorCodeDocument codeDocument)
Microsoft.AspNetCore.Razor.Language.RazorProjectEngine.Process(RazorProjectItem projectItem)
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.RuntimeViewCompiler.CompileAndEmit(string relativePath)
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.RuntimeViewCompiler.OnCacheMiss(string normalizedPath)
Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.DefaultPageLoader.LoadAsyncCore(PageActionDescriptor actionDescriptor, EndpointMetadataCollection endpointMetadata)
Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageLoaderMatcherPolicy.ApplyAsyncAwaited(PageLoader pageLoader, CandidateSet candidates, Task<CompiledPageActionDescriptor> actionDescriptorTask, int index)
Microsoft.AspNetCore.Routing.Matching.DfaMatcher.SelectEndpointWithPoliciesAsync(HttpContext httpContext, IEndpointSelectorPolicy[] policies, CandidateSet candidateSet)
Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware.<Invoke>g__AwaitMatch|10_1(EndpointRoutingMiddleware middleware, HttpContext httpContext, Task matchTask)
Volo.Abp.AspNetCore.Tracing.AbpCorrelationIdMiddleware.InvokeAsync(HttpContext context, RequestDelegate next)
Microsoft.AspNetCore.Builder.UseMiddlewareExtensions+InterfaceMiddlewareBinder+<>c__DisplayClass2_0+<<CreateMiddleware>b__0>d.MoveNext()
Microsoft.AspNetCore.Localization.RequestLocalizationMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.RequestLocalization.AbpRequestLocalizationMiddleware.InvokeAsync(HttpContext context, RequestDelegate next)
Microsoft.AspNetCore.Builder.UseMiddlewareExtensions+InterfaceMiddlewareBinder+<>c__DisplayClass2_0+<<CreateMiddleware>b__0>d.MoveNext()
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddlewareImpl.Invoke(HttpContext context)

起初,我们认为是包没有正确引用,于是清空缓存并重新进行引用操作,但依旧报错。而奇怪的是,旁边几个同事的项目就可以正常跑起来。经过一番搜索,我们发现这是由于版本升级导致的,并找到了解决方案。

您需要在暴露接口的工程文件 .csproj 中,/Project/PropertyGroup 节点下添加以下设置:

<GenerateRuntimeConfigDevFile>true</GenerateRuntimeConfigDevFile>

操作如下所示:

Cannot find compilation library location for package 'System.Security.Cryptography.Pkcs'异常解决办法

尝试一下后,问题得到了解决。然而这里我们产生了两个疑问:

  1. 我们的项目并没有升级 .NET Core 版本,为何添加这一行配置就可以解决问题?
  2. 为何我的同事们都能正常运行项目,而我却不能?

深入探讨问题原因

通过更加深入的调研,我们了解到,这可能是因为不同机器上的开发环境和配置存在差异。如下几点可以作为参考:

  1. 包版本差异:可能由于项目依赖的包版本不同,即我们在任何工程中的 Project/PropertyGroup 中没有明确指定版本,从而导致了不一致的问题。
  2. IDE环境差异:同事和您在使用的 IDE(如 Visual Studio)的配置可能存在差异,导致包的引用和编译行为不同。
  3. 本地缓存不一致:本地的 NuGet 缓存可能未及时更新,导致了版本差异。

关键配置解析

以下是需要添加的关键配置的详细解释:

<GenerateRuntimeConfigDevFile>true</GenerateRuntimeConfigDevFile>

这个配置将确保在开发环境中,RuntimeConfig.Dev.json 文件被生成和使用,从而提供必要的环境和版本信息支持。

相关推荐

如果您遇到类似的问题,可以参考以下资源和文章:

;

本站所有文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。

如果侵犯了你的权益请来信告知我们删除。邮箱:2780053831@qq.com

四川旅游网为您推荐-飞猪旅游

猜你喜欢