代码之家  ›  专栏  ›  技术社区  ›  lmcarreiro

Microsoft.NET.Sdk和Microsoft.NET.Sdk.Web之间有什么区别

  •  13
  • lmcarreiro  · 技术社区  · 6 年前

    Web Host 另一个是 Generic Host

    Sdk 根标记的属性 <Project> 在*.csproj文件中,两个主机项目(web主机和通用主机)都使用 Microsoft.NET.Sdk.Web Microsoft.NET.Sdk .

    Microsoft.AspNetCore.App

    类库项目正在使用 Microsoft.NETCore.App ,但它分别引用了一些ASP.NET核心包(的包) 微软.AspNetCore.App 那些不在 Microsoft.NETCore.App应用程序 ).

    关于正确的SDK和元软件包:

    1) 在通用宿主项目中,我应该使用pure吗 .NET核心 ( Microsoft.NET.Sdk )而不是 ASP.NET核心 ( Microsoft.NET.Sdk.Web 微软.AspNetCore.App

    2) 在类库项目中,是否可以使用 Microsoft.NET.Sdk 具有 微软.AspNetCore.App 避免引用属于 (例如,为了避免, Microsoft.AspNetCore.App@2.1.0 在宿主项目中 Microsoft.Extensions.Configuration@2.0.0 在类库项目中)?或者我只能用 微软.AspNetCore.App 元包 Microsoft.NET.Sdk.Web SDK?

    Microsoft.NET.Sdk Microsoft.NET.Sdk.Web docs 他说 正如分层文档所描述的,SDK是一组可以生成.NET核心代码的MSBuild任务和目标 Microsoft.NET.Sdk.Web 是吗 不?

    1 回复  |  直到 6 年前
        1
  •  37
  •   poke    6 年前

    广告(1)和(3):“核心”和web SDK之间有什么区别,它们如何影响通用主机应用程序?

    最重要的区别是:

    1. 默认项目

      websdk有不同的定义和globbing模式,用于在已发布的应用程序中包含哪些文件。

      例如,当你有 appsettings.json 文件,使用websdk的项目将自动包含它,因为存在确保 .config .json 文件和文件中的所有文件 wwwroot the MSBuild source code on GitHub for these patterns .

      <ItemGroup>
        <None Update="*.json" CopyToPublishDirectory="PreserveNewest" />
      </ItemGroup>
      
    2. Web发布逻辑

      如果计划使用发布配置文件( .pubxml

    Ad(2):类库使用哪个SDK?

    为了在发布公共库(例如通过NuGet)时获得最大的兼容性,请使用核心SDK并引用具有最低版本(例如2.1.0/2.1.1)的单个软件包。

    如果开发包含razor视图的类库,则需要使用 Microsoft.NET.Sdk.Razor SDK获取razor工具(例如,当您使用 dotnet new razorclasslib

    对于希望使用与应用程序相同的元包引用的库和测试项目,目前情况有点复杂,但会变得更好:

    对于ASP.NET Core 2.1工具(!)(cli2.1.*),我建议对类库使用非web SDK,并使用该包的2.1.1版本。永远不要升级它,即使NuGet给你升级。

    对于2.1工具中的测试项目(!)(CLI 2.1.*),它有点不同,也有点棘手,请参见 Integration and unit tests no longer work on ASP.NET Core 2.1 failing to find assemblies at runtime

    从2.2 tools(CLI 2.2.100+)开始,对ASP.NET Core元包的无版本包引用被移动到Core SDK中,这样您就可以使用“Core”SDK为ASP.NET Core 2.1和2.2开发库和测试项目(前提是您使用的是tools 2.2.100+)使用无版本包引用:

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

    在.NET Core/ASP.NET Core 3.0中,您将能够通过一种新机制完全引用框架(不需要web SDK):

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