InvalidOperationException: Cannot find compilation library location for package 'xxx'問題:
為了asp.net核心2.0項目已經成功找到外部程序集.NETStandard2.0,你需要重寫一個內置的MetadataReferenceFeatureProvider。為此,我們需要添加以下類:
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; namespace Microsoft.AspNetCore.Mvc.Razor.Compilation { /// <summary>Провайдер нужен для компенсации бага компиляции представлений при подключении сборок .NetStandart2.0</summary> 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); } } } }
並用下面的代碼替換你的啟動“services.AddMvc()”:
services.AddMvc() // Следующий патч нужен для компенсации бага компиляции представлений при подключении сборок .NetStandart2.0 .ConfigureApplicationPartManager(manager => { manager.FeatureProviders.Remove(manager.FeatureProviders.First(f => f is MetadataReferenceFeatureProvider)); manager.FeatureProviders.Add(new ReferencesMetadataReferenceFeatureProvider()); });
原文地址:https://stackoverflow.com/questions/46279561/asp-net-core-2-cannot-find-compilation-library-location-for-package-projectname
SqlException: 'OFFSET' 附近有語法錯誤。 在 FETCH 語句中選項 NEXT 的用法無效。問題:
這個原因是EF core 生成的分頁語法SQL 2008不支持,要修改注冊DbContext的方式
services.AddDbContext<FZTX_DBContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("FZTXDatabase"), o => o.UseRowNumberForPaging()));