“找不到包"enc.dll"的编译库位置. .net核心依赖项注入发生错误

编程入门 行业动态 更新时间:2024-10-25 06:26:19
本文介绍了“找不到包"enc.dll"的编译库位置. 核心依赖项注入发生错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在使用asp核心mvc构建一个网站,并为登录添加了enc.dll文件的依赖关系,该文件只是对用户信息进行加密/解密. 我使用enc.dll文件制作了Seeder类,该文件具有密钥属性,并使用密钥进行加密/解密.然后,将其添加到服务中以使用依赖项注入功能.

I am building a website using asp core mvc, and for the login i added dependency for enc.dll file, which just encrypt/decrypt user information. I made a Seeder class with enc.dll file, which has a key property and en/decrypt with the key. Then I added it to my service to use dependency injection feature.

services.AddSingleton<ISeeder, Seeder>();

虽然当我调用种子程序类的enc,dec函数时效果很好,但它不返回任何错误.下面是示例代码.

While it works well when i call enc, dec function of seeder class, it does not return any error. Below is the example code.

private readonly ISeeder seed; public AccountController(ISeeder seed) { this.seed = seed; } [HttpGet] public IActionResult test() { string s = seed.Enc("testEncode"); return Json(s); }

因此,当我返回由种子实例创建的字符串s时,它可以工作.

So it works when i return string s that is created by seed instance.

但是当我尝试不使用种子实例并抛出错误而返回视图时,它不起作用,其中Enc是我正在使用的dll库.

but it is not working when i try to return a view without using seed instance and throwing an error, where Enc is the dll library i am using.

InvalidOperationException: Cannot find compilation library location for package 'Enc' Microsoft.Extensions.DependencyModel.CompilationLibrary.ResolveReferencePaths(ICompilationAssemblyResolver resolver, List<string> assemblies)

下面是我的Seeder代码.

And below is my Seeder code.

private Enc enc; private readonly EncKey key; public Seeder(IOptions<EncKey> options) { enc = new Enc(); key = options.Value; } public string Dec(string toDec) { return enc.Dec(toDec, key.EncryptKey); } public string Enc(string toEnc) { return enc.Enc(toEnc, key.EncryptKey); }

有人可以帮忙吗?我正在 core 2.0环境中工作

Could anyone help? I am working on core 2.0 environment

推荐答案

更新

此问题已在2.0.3中修复,适用于更新VS(或手动更新)的问题 dotnet SDK和Runtime)以及通过nuget(特别是)的项目包 Microsoft.AspNetCore.All到2.0.3)

This issue was fixed in 2.0.3, for apply need to update VS(or manualy dotnet SDK and Runtime) and project packages via nuget(in particular Microsoft.AspNetCore.All to 2.0.3)

.Net Core 2.0的已知问题 github/dotnet/core-setup/issues/2981

It's known issue of .Net Core 2.0 github/dotnet/core-setup/issues/2981

Razor视图预编译无法解析lib路径

Razor view precompilation can not resolve lib path

这里有解决方法来完成这项工作:

Here workaround to get this work:

添加此内容(这是修复版本发布错误)

add this (it's fixing release publish error)

using Microsoft.AspNetCore.Mvc; using Microsoft.DotNet.PlatformAbstractions; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyModel; using Microsoft.Extensions.DependencyModel.Resolution; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Threading.Tasks; namespace somenamespace { public class MvcConfiguration : IDesignTimeMvcBuilderConfiguration { private class DirectReferenceAssemblyResolver : ICompilationAssemblyResolver { public bool TryResolveAssemblyPaths(CompilationLibrary library, List<string> assemblies) { if (!string.Equals(library.Type, "reference", StringComparison.OrdinalIgnoreCase)) { return false; } var paths = new List<string>(); foreach (var assembly in library.Assemblies) { var path = Path.Combine(ApplicationEnvironment.ApplicationBasePath, assembly); if (!File.Exists(path)) { return false; } paths.Add(path); } assemblies.AddRange(paths); return true; } } public void ConfigureMvc(IMvcBuilder builder) { // .NET Core SDK v1 does not pick up reference assemblies so // they have to be added for Razor manually. Resolved for // SDK v2 by github/dotnet/sdk/pull/876 OR SO WE THOUGHT /*builder.AddRazorOptions(razor => { razor.AdditionalCompilationReferences.Add( MetadataReference.CreateFromFile( typeof(PdfHttpHandler).Assembly.Location)); });*/ // .NET Core SDK v2 does not resolve reference assemblies' paths // at all, so we have to hack around with reflection typeof(CompilationLibrary) .GetTypeInfo() .GetDeclaredField("<DefaultResolver>k__BackingField") .SetValue(null, new CompositeCompilationAssemblyResolver(new ICompilationAssemblyResolver[] { new DirectReferenceAssemblyResolver(), new AppBaseCompilationAssemblyResolver(), new ReferenceAssemblyPathResolver(), new PackageCompilationAssemblyResolver(), })); } } }

和这个(正在修复编译错误)

and this (it's fixing compilation errors)

using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection.PortableExecutable; using Microsoft.AspNetCore.Mvc.ApplicationParts; using Microsoft.CodeAnalysis; using Microsoft.Extensions.DependencyModel; using Microsoft.AspNetCore.Mvc.Razor.Compilation; namespace somenamespace { public class ReferencesMetadataReferenceFeatureProvider : IApplicationFeatureProvider<MetadataReferenceFeature> { public void PopulateFeature(IEnumerable<ApplicationPart> parts, MetadataReferenceFeature feature) { var libraryPaths = new HashSet<string>(StringComparer.OrdinalIgnoreCase); foreach (var assemblyPart in parts.OfType<AssemblyPart>()) { var dependencyContext = DependencyContext.Load(assemblyPart.Assembly); if (dependencyContext != null) { foreach (var library in dependencyContext.CompileLibraries) { if (string.Equals("reference", library.Type, StringComparison.OrdinalIgnoreCase)) { foreach (var libraryAssembly in library.Assemblies) { libraryPaths.Add(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, libraryAssembly)); } } else { foreach (var path in library.ResolveReferencePaths()) { libraryPaths.Add(path); } } } } else { libraryPaths.Add(assemblyPart.Assembly.Location); } } foreach (var path in libraryPaths) { feature.MetadataReferences.Add(CreateMetadataReference(path)); } } private static MetadataReference CreateMetadataReference(string path) { using (var stream = File.OpenRead(path)) { var moduleMetadata = ModuleMetadata.CreateFromStream(stream, PEStreamOptions.PrefetchMetadata); var assemblyMetadata = AssemblyMetadata.Create(moduleMetadata); return assemblyMetadata.GetReference(filePath: path); } } } }

也将addMVC更改为此

also change addMVC to this

//workaround github/dotnet/core-setup/issues/2981 will be fixed in 2.0.1 services.AddMvc().ConfigureApplicationPartManager(manager => { var oldMetadataReferenceFeatureProvider = manager.FeatureProviders.First(f => f is MetadataReferenceFeatureProvider); manager.FeatureProviders.Remove(oldMetadataReferenceFeatureProvider); manager.FeatureProviders.Add(new ReferencesMetadataReferenceFeatureProvider()); });

您将能够在自己的视图中使用dll

and you will able to use dll in your view

您还有第二种方法是在此处禁用剃须刀预编译示例 从ASP.Net Core 2 API中删除PrecompiledViews.dll

also you have second way is disable razor precompilation here example Deleting PrecompiledViews.dll from ASP.Net Core 2 API

更多推荐

“找不到包"enc.dll"的编译库位置. .net核心依赖项注入发生错误

本文发布于:2023-11-16 12:59:30,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1604498.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:找不到   发生错误   核心   位置   quot

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!