我有一个包含两个主机项目(一个是Web主机,另一个是通用主机)的解决方案,以及这两个主机项目引用的类库项目。
在Sdk文件的根标记<Project>的<Project>属性中,主机项目(web主机和通用主机)都使用Microsoft.NET.Sdk.Web,但是类库项目使用Microsoft.NET.Sdk。
两个主机项目引用Microsoft.AspNetCore.App元打包。
类库项目使用Microsoft.NETCore.App,但它单独引用了一些ASP.NET核心包(不是Microsoft.NETCore.App中的Microsoft.AspNetCore.App包)。
关于正确的SDK和metapackage:
( 1)在一般的主机项目中,是否应该使用纯.NET Core (Microsoft.NET.Sdk和Microsoft.NETCore.App)而不是ASP.NET Core (Microsoft.NET.Sdk.Web和Microsoft.AspNetCore.App),因为它不是一个web项目?
2)在类库项目中,使用Microsoft.NET.Sdk和Microsoft.AspNetCore.App可以避免引用属于Microsoft.AspNetCore.App的不同版本的包(例如,宿主项目中的Microsoft.AspNetCore.App@2.1.0和类库项目中的Microsoft.Extensions.Configuration@2.0.0 )?或者我只能在Microsoft.AspNetCore.App SDK中使用Microsoft.NET.Sdk.Web元打包?
( 3)使用Microsoft.NET.Sdk和Microsoft.NET.Sdk.Web有什么区别?文档说,“SDK,正如分层文档所描述的,是一组可以构建.NET核心代码的MSBuild任务和目标。”,但为什么我们需要两者兼而有之?在实践中,Microsoft.NET.Sdk.Web做什么Microsoft.NET.Sdk不做呢?
发布于 2018-09-22 11:37:02
广告(1)和(3):“核心”和“网络SDK”之间有什么区别,它们是如何影响普通主机应用的?
最重要的区别是:
appsettings.json文件时,使用web的项目将自动包含它,因为有一些模式可以确保.config、.json文件和wwwroot文件夹中的所有文件都是发布输出的一部分。见这些模式的MSBuild源代码在GitHub上。
如果您有一个通用主机,并且不使用Web,则可能需要向csproj文件添加代码以指定要复制到发布目录的文件(或使用IDE更改“复制到输出目录”设置,该设置还包括发布输出中的文件,但也将它们复制到生成输出中):.pubxml文件)或使用MSBuild / MSDeploy部署到azure或文件系统,您将需要这个发布逻辑。Ad (2):类库使用哪个SDK?
为了在发布公共库(例如通过NuGet)时实现最大的兼容性,请使用核心SDK和尽可能低版本的参考单个包-例如2.1.0 / 2.1.1。
如果您开发了一个包含剃刀视图的类库,您将需要使用Microsoft.NET.Sdk.Razor SDK来获得剃须刀工具(例如,当您使用dotnet new razorclasslib模板时)。
对于您想要使用与应用程序相同的元包引用的库和测试项目,目前的情况有点复杂,但它会变得更好:
对于ASP.NET Core2.1工具(!)(CLI2.1.*)我建议对类库使用非web,并使用该包的2.1.1版本。永远不要升级它,即使NuGet提供了升级。
用于2.1工具中的测试项目(!)(CLI2.1.*),它有点不同,有点棘手,请参阅集成和单元测试不再在ASP.NET Core2.1上工作,无法在运行时找到程序集
从2.2工具(CLI 2.2.100+)开始,对ASP.NET核心元包的少版本包引用被移动到核心SDK中,这样您就可以使用“ASP.NET”2.2.100+使用版本少的包引用为ASP.NET Core2.1和2.2开发库和测试项目:
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>在.NET Core / ASP.NET Core3.0中,您可以完全通过一种新机制(不需要web)引用框架:
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>https://stackoverflow.com/questions/52434690
复制相似问题