ASP NET Core 2 找不到包“Projectname.Model”的编译库位置

2024-04-25

在我的解决方案中,我有两个项目。其中之一是web项目,另一个是Model项目。您可以在下面看到我的解决方案结构:

现在,当我运行应用程序时,出现以下错误:

InvalidOperationException:找不到包“ContosoUniversity.Model”的编译库位置

这是完整的堆栈跟踪:

An unhandled exception occurred while processing the request.
InvalidOperationException: Cannot find compilation library location for package 'ContosoUniversity.Model'
Microsoft.Extensions.DependencyModel.CompilationLibrary.ResolveReferencePaths(ICompilationAssemblyResolver resolver, List<string> assemblies)
InvalidOperationException: Cannot find compilation library location for package 'ContosoUniversity.Model'
Microsoft.Extensions.DependencyModel.CompilationLibrary.ResolveReferencePaths(ICompilationAssemblyResolver resolver, List<string> assemblies)
Microsoft.Extensions.DependencyModel.CompilationLibrary.ResolveReferencePaths()
Microsoft.AspNetCore.Mvc.ApplicationParts.AssemblyPart+<>c.<GetReferencePaths>b__8_0(CompilationLibrary library)
System.Linq.Enumerable+SelectManySingleSelectorIterator.MoveNext()
Microsoft.AspNetCore.Mvc.Razor.Compilation.MetadataReferenceFeatureProvider.PopulateFeature(IEnumerable<ApplicationPart> parts, MetadataReferenceFeature feature)
Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartManager.PopulateFeature<TFeature>(TFeature feature)
Microsoft.AspNetCore.Mvc.Razor.Internal.DefaultRazorReferenceManager.GetCompilationReferences()
System.Threading.LazyInitializer.EnsureInitializedCore<T>(ref T target, ref bool initialized, ref object syncLock, Func<T> valueFactory)
Microsoft.AspNetCore.Mvc.Razor.Internal.DefaultRazorReferenceManager.get_CompilationReferences()
Microsoft.AspNetCore.Mvc.Razor.Internal.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.RazorTemplateEngine.GenerateCode(RazorCodeDocument codeDocument)
Microsoft.AspNetCore.Mvc.Razor.Internal.RazorViewCompiler.CompileAndEmit(string relativePath)
Microsoft.AspNetCore.Mvc.Razor.Internal.RazorViewCompiler.CreateCacheEntry(string normalizedPath) 
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
System.Runtime.CompilerServices.TaskAwaiter.GetResult()
Microsoft.AspNetCore.Mvc.Razor.Internal.DefaultRazorPageFactoryProvider.CreateFactory(string relativePath)
Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.CreateCacheResult(HashSet<IChangeToken> expirationTokens, string relativePath, bool isMainPage)
Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.OnCacheMiss(ViewLocationExpanderContext expanderContext, ViewLocationCacheKey cacheKey)
Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.LocatePageFromViewLocations(ActionContext actionContext, string pageName, bool isMainPage)
Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.FindView(ActionContext context, string viewName, bool isMainPage)
Microsoft.AspNetCore.Mvc.ViewEngines.CompositeViewEngine.FindView(ActionContext context, string viewName, bool isMainPage)
Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.ViewResultExecutor.FindView(ActionContext actionContext, ViewResult viewResult)
Microsoft.AspNetCore.Mvc.ViewResult+<ExecuteResultAsync>d__26.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker+<InvokeResultAsync>d__19.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker+<InvokeNextResultFilterAsync>d__24.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResultExecutedContext context)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker+<InvokeNextResourceFilter>d__22.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker+<InvokeFilterPipelineAsync>d__17.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker+<InvokeAsync>d__15.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.Builder.RouterMiddleware+<Invoke>d__4.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware+<Invoke>d__7.MoveNext()

我使用 ASP NET Core 2 和 VS17。

这是我的ContosoUniversity.csproj文件(如果需要):

<Project Sdk="Microsoft.NET.Sdk.Web">

<PropertyGroup>
  <TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>

<ItemGroup>
  <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />
  <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.0" />
</ItemGroup>

<ItemGroup>
  <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" />
</ItemGroup>

<ItemGroup>
  <Reference Include="ContosoUniversity.Model">
    <HintPath>..\ContosoUniversity.Model\bin\Debug\netcoreapp2.0\ContosoUniversity.Model.dll</HintPath>
  </Reference>
</ItemGroup>

</Project>

我应该怎么做才能解决这个问题?


为了让asp.net core 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());
    });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP NET Core 2 找不到包“Projectname.Model”的编译库位置 的相关文章

随机推荐

  • CMake 错误“找不到要添加属性的目标”

    在我的 CMakeLIsts txt 文件中我这样写 set LIBHELLO SRC hello c set target properties hello static PROPERTIES OUTPUT NAME hello get
  • 在JTextArea中使用Timer实现打字机效果?

    我正在制作一款文本冒险游戏 但遇到了一个问题 我无法按照我想要的方式显示一些文本 当输入一些单词时 玩家可以开始引入一个新房间 我希望这个介绍具有 打字机 效果 该事件需要在我的程序 ActionPerformed 方法中发生 例如 当用户
  • 如何在 Tridion 中获取当前登录用户的 tcmid?

    private void Subscribe EventSystem Subscribe
  • 对象不支持属性或方法日期选择器

    我试图在我的页面中放置一个日期选择器并收到此错误 我已经搜索并寻找此错误的其他答案 但找不到任何答案 如果没有对于引导程序部分 它有效 但有了它 我收到了这个错误 这背后的原因是什么 我该如何解决这个问题 这是我的index cshtml
  • 如何用mock修补模块的内部函数?

    我所说的 内部函数 是指从定义它的同一模块内调用的函数 我正在使用mock http www voidspace org uk python mock 图书馆 特别是patch http www voidspace org uk pytho
  • Android中状态栏的高度[重复]

    这个问题在这里已经有答案了 Android状态栏的高度是多少 总是一样吗 从我的测量来看 它似乎是 25dp 但我不确定它在所有平台上是否具有相同的高度 我想知道这一点以正确实现从没有状态栏的活动到有状态栏的活动的淡入淡出过渡 这个问题之前
  • windows下如何获取线程的起始地址?

    I m working on a mini windows process explorer in C I have a handle to a thread How can I retrieve starting address of t
  • 如何使用自定义复选框按钮选择表视图行选择?

    如何使用自定义按钮选择表格视图行 我有另一个按钮 称为选择表视图外部的所有内容 我的问题是 在单击表视图按钮外部时 如何选择和取消选择表视图内部的行 同时我可以在表视图中选择单行吗 如何在 swift 3 中做到这一点 这是我在 cellf
  • Spring MVC 中 Bean 集合的自定义绑定错误消息

    我们使用的是 Spring MVC 3 0 6 但我们没有使用 JSR 303 验证 仅在处理模型表单 bean 的控制器方法中使用 BindingResult 进行绑定错误 我将尝试简化下面的示例 因为问题不在于如何构建事物 因为这些决定
  • git-svn rebase 出了严重错误

    有没有办法重做 git svn rebase 或重置任何效果 在我的 8000 提交 git svn 存储库中 合并分支后出现问题 我的本地 master 没有反映任何接近完整主干日志的内容 和跑步git svn rebase正确地获取新的
  • Material UI 嵌套主题提供程序打破了 withStyles HOC

    我有一个使用 Create React App 创建的 React 应用程序 并使用 material ui core npm 包进行主题化 为了自定义组件 我使用 MaterialUI 提供的 withStyles 高阶组件 根据文档它支
  • read_excel 读入消息 - 抑制?

    我喜欢使用readxl包裹 然而 我一直将它用作 RMarkdown 文档的一部分以及一些read excel 读取文件时的消息在进行分析时很有用 但在尝试呈现分析时则无用 所以问题是 在使用时是否有任何方法可以抑制收到的消息 或与此相关的
  • 在 while 循环内使用 try-finally 块[重复]

    这个问题在这里已经有答案了 当我在 while 循环中使用finally 时 我试图理解该机制 在下面的代码中 终于在行打印并比 while 中断 我预计代码不会到达finally 块 或者如果它到达finally块 则有no break在
  • Grunt watch 任务似乎需要很长时间

    我正在运行两个简单的任务 每个任务运行时间 spawn to false但这似乎破坏了它 并且没有运行任何相关的任务 以下是更改 sass 文件时的示例输出 gt gt File app styles main scss changed F
  • ggplot2堆叠条形图数据标签向后

    我想在 ggplot2 中创建一个堆积条形图 其中数据标签位于与其相关的填充区域的中心 我尝试过的代码的标签顺序与应有的顺序相反 这是代码示例 data rep lt data frame Task Number c 5 004 5 004
  • Eclipse C++ 打印漂亮吗?

    从 Eclipse 打印 C 源代码时得到的输出相当难看 是否有方法 插件可以漂亮地打印 C 源代码 例如与a2ps 这可能是对C源代码使用另一个过滤器 我也用enscript为了这 这是我经常使用的别名 alias cpp2ps ensc
  • 诊断 R 包构建错误:pdfLatex 不可用

    我正在尝试构建一个包R 我制作了骨架 并运行了命令R CMD check package1 我收到一个错误描述here https stackoverflow com questions 10819959 diagnosing r pack
  • 迁移到 Jboss 7.0 AS 后 Firefox 和 IE 中的 ViewExpiredException

    我们的 JSF 2 0 Richfaces 4 0 应用程序在 Jboss 6 0 上运行得非常好 我们正在尝试将其迁移到 Jboss 7 0 AS 对于我们点击页面上的任何链接 我们在 Firefox 和 IE 中遇到 ViewExpir
  • 如何使用 boost::spirit::qi 解析行尾?

    不应该是一个简单的eol http www boost org doc libs 1 42 0 libs spirit doc html spirit qi quick reference qi parsers auxiliary html
  • ASP NET Core 2 找不到包“Projectname.Model”的编译库位置

    在我的解决方案中 我有两个项目 其中之一是web项目 另一个是Model项目 您可以在下面看到我的解决方案结构 现在 当我运行应用程序时 出现以下错误 InvalidOperationException 找不到包 ContosoUniver