本文详解 .NET Core 的 csproj 文件
在上一篇 MSBuild 入门 说到,
如果通过 Visual Studio 2019 创建一个 Web项目 的时候,csproj 文件是这样子的:
1 | <Project Sdk="Microsoft.NET.Sdk.Web"> |
.NET Core 的 csproj 文件变得如此不同的原因是:
因为隐式和默认值的原因,所以更改极大地简化了项目文件,
但官方提供了如何像 MSBuild 一样查看整个项目
可以在命令行 CD 切换到的项目路径,也就是说该路径下有一个 .csproj
的文件,
然后以下执行命令:
1 | dotnet msbuild -pp:fullproject.xml |
则会在该目录下生成一个 fullproject.xml
文件,内容是把 .csproj
所以隐式和默认的内容完整的显示出来。
当 Sdk="Microsoft.NET.Sdk.Web"
,会隐式引用包 Microsoft.NETCore.App
与 Microsoft.AspNetCore.App
1 | <Project Sdk="Microsoft.NET.Sdk.Web"> |
相当于:
1 | <Project Sdk="Microsoft.NET.Sdk.Web"> |
如果将 Sdk="Microsoft.NET.Sdk.Web"
修改成 Sdk="Microsoft.NET.Sdk"
,
那么则不会隐式引用 Microsoft.AspNetCore.App
~
1 | <Project Sdk="Microsoft.NET.Sdk"> |
相当于:
1 | <Project Sdk="Microsoft.NET.Sdk"> |
如果将:
1 | <Project Sdk="Microsoft.NET.Sdk.Web"> |
修改成:
1 | <Project Sdk="Microsoft.NET.Sdk"> |
那么在 Visual Studio 的 解决方案资源管理器
,
项目的 依赖项
的框架
中的 Microsoft.AspNetCore.App
则会消失~
Sdk
属性的值有:
Microsoft.NET.Sdk
的 .NET Core SDKMicrosoft.NET.Sdk.Web
的 .NET Core Web SDKMicrosoft.NET.Sdk.Razor
的 .NET Core Razor 类库 SDKMicrosoft.NET.Sdk.Worker
的 .NET Core Worker Service(自 .NET Core 3.0 起)Microsoft.NET.Sdk.WindowsDesktop
的 .NET Core WinForms 和 WPF(自 .NET Core 3.0 起)
<TargetFramework>
元素标记的作用是可以指定项目面向的 .NET 版本。
框架定位有助于确保应用程序仅使用指定框架版本中可用的功能。
其元素标记值可以有是:
目标框架名字对象 (TFM) | 目标 Framework | 最新稳定版本 |
---|---|---|
netstandard2.1 | .NET Standard | 2.1 |
netcoreapp3.1 | .NET Core | 3.1 |
net48 | .NET Framework | 4.8 |
所有的值可以查看SDK 样式项目中的目标框架,
想在 VS 中操作,可以查看 框架定位概述
在指定多个目标框架时,可有条件地为每个目标框架引用程序集。
1 | <Project Sdk="Microsoft.NET.Sdk"> |
对应的可以在库或应用中,编写条件代码以为每个目标框架编译:
1 | public class MyClass |
参考资料
MSBuild 如何生成项目
.NET Core 的 csproj 格式的新增内容
如何:使用 MSBuild 项目 SDK