新版csproj工程文件配置说明

最基础的类库项目配置

1
2
3
4
5
6
7
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>

</Project>

多目标框架开发

1
2
3
4
5
6
7
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>netcoreapp3.1;net45</TargetFrameworks>
</PropertyGroup>

</Project>

根据编写条件代码以针对每个目标框架进行编译

1
2
3
4
5
6
7
8
9
10
11
12
13
public class MyClass
{
static void Main()
{
#if NET45
Console.WriteLine("Target framework: .NET Framework 4.5");
#elif NETCOREAPP3_1
Console.WriteLine("Target framework: .NET Core 3.1");
#elif NETCOREAPP
Console.WriteLine("Target framework: .NET Core x*x");
#endif
}
}

多目标框架下针对不同框架进行分别引用

多目标平台引用修改前
多目标平台引用修改前

多目标平台引用修改后
多目标平台引用修改后

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>netcoreapp3.1;net45</TargetFrameworks>
</PropertyGroup>

<ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.1'">
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
</ItemGroup>

<ItemGroup Condition="'$(TargetFramework)' == 'net45'">
<Reference Include="Newtonsoft.Json" />
</ItemGroup>

</Project>

不同框架的可选符号

目标框架 可选符号
.NET Framework NETFRAMEWORK,NET20,NET35,NET40,NET45,NET451,NET452,NET46,NET461,NET462,NET47,NET471,NET472,NET48
.NET Standard NETSTANDARD,NETSTANDARD1_0,NETSTANDARD1_1,NETSTANDARD1_2,NETSTANDARD1_3,NETSTANDARD1_4,NETSTANDARD1_5,NETSTANDARD1_6,NETSTANDARD2_0,NETSTANDARD2_1
.NET Core NETCOREAPP,NETCOREAPP1_0,NETCOREAPP1_1,NETCOREAPP2_0,NETCOREAPP2_1,NETCOREAPP2_2,NETCOREAPP3_0

可选项目属性

  • GeneratePackageOnBuild
    默认为false,如果更改为true,在生成项目时,visual studio将创建的类库生成NuGet包。
  • AssemblyName
    程序集名称。
  • RootNamespace
    默认命名空间
  • OutputType
    输出类型,主要有WinExe、Exe、Library等。
  • PackageId
    NuGet包名称。
  • Authors
    软件作者名。
  • Company
    公司名称。
  • Product
    产品名称。
  • Copyright
    版权信息
  • Description
    对类库的描述和介绍信息。
  • Version
    版本号
  • RepositoryType
    仓库类型
  • PackageTags
    NuGet包标签

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<AssemblyName>NetCoreSample</AssemblyName>
<RootNamespace>NetCoreSample</RootNamespace>
<OutputType>Library</OutputType>

<!-- NuGet -->
<PackageId>NetCoreSample</PackageId>
<Authors>icyrene</Authors>
<Company>icyrene.cn</Company>
<Copyright>icyrene.cn</Copyright>
<Product>hello netcore</Product>
<Description>this is a test library</Description>
<Version>1.0.1</Version>
<RepositoryType>git</RepositoryType>
<PackageTags>test;netcore</PackageTags>
</PropertyGroup>
</Project>