参考文献丢失。确保项目引用了“Microsoft.NET.Sdk.web”,并且“PreserveCompilationContext”属性未设置为false。

6

在尝试运行ASP.NET Core项目时,我遇到了这个错误。

缺少一个或多个编译引用。请确保项目引用了“Microsoft.NET.Sdk.web”且PreserveCompilationContext属性未设置为false。

enter image description here

EfDemo.csproj

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

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

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.6" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.1.1" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.1" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.1.1" />
  </ItemGroup>

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

</Project>

HomeController.cs

namespace EfDemo.Controllers
{
    public class HomeController : Controller
    {
        async public Task<IActionResult> Index()
        {
            using (var context = new EFCoreWebDemoContext())
            {
                var model = await context.Authors.AsNoTracking().ToListAsync();
                return View(model);
            }
        }
    }
}

EFCoreWebDemoContext.cs

public class EFCoreWebDemoContext : DbContext
{
    public DbSet<Book> Books { get; set; }
    public DbSet<Author> Authors { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
       optionsBuilder.UseSqlServer(@"connection string");
    }
 }

Index.cshtml

@{
    ViewData["Title"] = "Home Page";
}

<div>
    <span>Home Page</span>
</div>

_Layout.cshtml

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - EfDemo</title>
</head>
<body>
    @RenderBody()

    @RenderSection("Scripts", required: false)
</body>
</html>

_ViewImports.cshtml

@using EfDemo
@using EfDemo.Models
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, Microsoft.NET.Sdk

HomeController.cs文件中添加了断点并检查,执行应用程序时在return View(model)处崩溃。

尝试修改下面所示的HomeController.cs,但仍然存在相同的问题。

public IActionResult Index()
{
    return View();
}

问题似乎出现在视图的运行时编译中。你能否发一下你的 cshtml 文件? - Neil
@Neil 添加了 cshtml 文件... 请检查一下。 - Sharath
6个回答

3
参考版本冲突。 建议您尝试像下面这样修改csproj:
<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.6" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.0.3" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.3" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.4" />
  </ItemGroup>
  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" />
  </ItemGroup>
</Project>

在 PackageReference 中,SqlServer、Tools、Design 已经降级到较低的版本,所以我应该将其降级以使其正常工作吗? - Sharath
2
是的,你可以从NuGet降级到2.0.*版本。你的TargetFrameworknetcoreapp2.0,因此需要将参考保持为2.0.* - Edward

1

更新了csproj文件,添加了以下包,并将Visual Studio更新为15.7.5版本,一切正常。

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

  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.1.1" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.1" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.1.1" />
  </ItemGroup>

</Project>

你遇到的问题是由不同的引用版本和目标框架版本引起的。降低引用版本或将项目升级到netcoreapp2.1,两者都可以解决你的问题。 - Edward

0
我在更新 Visual Studio 后遇到了完全相同的错误。为了解决这个问题,我从这个页面安装了最新的 SDK:https://dotnet.microsoft.com/download。然后将我的项目切换到最新的 .NET Core(在我的情况下是 2.2)。在 VS 中,我清理了我的解决方案并重新构建了它。然后使用“工具 ->> Nuget 包管理器 ->> 管理解决方案的 nuget 包”更新了我的引用。

0

我曾经遇到过同样的问题。我通过在NuGet中卸载包并重新安装来解决了这个问题。之后我编译了项目,一切都恢复正常了。


0
在我的情况下,是这个包 'Microsoft.VisualStudio.Web.CodeGeneration.Design' 导致了问题。在我将其移除后,它现在可以正常工作了。

0

我在服务器上发布的代码中遇到了同样的问题,但是在本地开发机器上没有任何问题。

我通过用更新后的MyWebProject.deps.json文件替换旧文件来解决了这个问题,希望这能帮助到其他人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接