我正在创建一个 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();
}
您只需将
<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>
对我来说,我正在升级类库。使用
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社区版的全部内容。