ASP.NET Core 6 应用程序部件项目必须引用哪些 Nuget 包

问题描述 投票:0回答:2

我正在创建一个 ASP.NET Core 6 应用程序,我想在其中集成单独程序集提供的其他区域。我遵循 https://learn.microsoft.com/en-us/aspnet/core/mvc/advanced/app-parts?view=aspnetcore-6.0 上的文档。在一个提供app部件的项目中,我为

IMvcBuilder
添加了一个扩展方法,它可以让我方便地注册部件组件,例如:

services.AddMvc().AddFeatureXyzParts();

扩展程序仅执行以下操作:

public static IMvcBuilder AddFeatureXyzParts(this IMvcBuilder builder)
{
    if (builder == null) throw new ArgumentNullException(nameof(builder));
    builder.AddApplicationPart(typeof(MvcBuilderExtensions).Assembly);
    return builder;
}

在项目文件中,我将

Sdk
属性从
Microsoft.NET.Sdk
更改为
Microsoft.NET.Sdk.Web
以隐式引用 ASP.NET Core 6 SDK(因为它是为主应用程序项目设置的),但这会破坏构建该错误表明程序集缺少
Main
方法的定义。

由于它不是一个独立的 Web 应用程序组件,而是一个提供附加控制器类型和服务的部件库,因此我想将

Sdk
属性设置回
Microsoft.NET.Sdk
。然后我必须手动添加缺少的包引用。为此,
Microsoft.AspNetCore.App
包对于ASP.NET Core 6来说似乎是错误的选择,并且不能使用
Microsoft.AspNetCore.App.Refs

我需要什么参考资料?

更新 - 定义所需的入口点以满足构建

作为一种允许我引用所需 ASP.NET Core 6 SDK 的解决方法,如果我添加定义

Microsoft.NET.Sdk.Web
方法的内部
Program
类,我可以使用
Main
SDK。有了这个,我就可以根据需要注册我的零件装配,并且控制器(即使是某个区域的一部分)可以很好地集成。

internal static class Program
{
    public static void Main() => throw new NotImplementedException();
}
c# asp.net-core .net-core asp.net-core-6.0
2个回答
50
投票

您只需将

<FrameworkReference Include="Microsoft.AspNetCore.App"/>
添加到库项目
.csproj
文件中,如 docs 中所述:

<Project Sdk="Microsoft.NET.Sdk">
  <!--... rest of file-->

  <ItemGroup>
    <FrameworkReference Include="Microsoft.AspNetCore.App" />
  </ItemGroup>

  <!--... rest of file-->
</Project>

0
投票

对我来说,我正在升级类库。使用

Microsoft.NET.Sdk

来自

<TargetFrameworks>netcoreapp2.1;net45;net46;net47;net48</TargetFrameworks>

<TargetFrameworks>net8.0</TargetFrameworks>

我发现添加以下内容解决了我的所有构建错误

<ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />
</ItemGroup>

不确定是否适用于OP的确切情况,但作为一系列“重复”问题发布导致我来到这里,并希望发布以防万一帮助其他一些谷歌人。

升级助手 VSIX 跳过了这一点,并带有一些无信息的注释。旧的 nuget 有通知说已弃用,但对使用什么替代没有帮助。

这就是VS2022社区版的全部内容。

© www.soinside.com 2019 - 2024. All rights reserved.