ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

.Csproj文件学习笔记

2020-10-21 02:00:46  阅读:323  来源: 互联网

标签:文件 项目 Csproj 指定 笔记 目标 csproj NET


Visual Studio现在使用.csproj文件来管理项目。我们可以通过右键单击项目并选择Edit <project-name> .csproj来编辑.csproj设置,如下所示。

 

上面项目的.csproj如下所示。

 

csproj文件包括与目标.NET Framework,项目文件夹,NuGet程序包引用等相关的设置。

.csproj是基于XML的格式。以下示例显示了使用.NET Core项目的根节点Microsoft.NET.Sdk。对于Web项目,使用的SDK是Microsoft.NET.Sdk.Web。

<Project Sdk="Microsoft.NET.Sdk">
...
</Project>

我们可以自己直接编辑.csproj文件,并手动添加必要的项目。所需的确切代码取决于需要链接的文件类型以及所需的MSBuild操作类型。

例如,如果我们要通过链接从项目外部添加.cs文件,则可以使用嵌套在<ItemGroup>中的元素<compile>:

<ItemGroup>
  <Compile Include="..\OtherFolder\MySharedClass.cs" Link="MySharedClass.cs" />
</ItemGroup>

Include给出项目文件夹中文件的相对路径,Link属性告诉MSBuild将文件添加为链接,以及应该用于该文件的名称。甚至还可以更改文件名。

对于诸如JSON配置文件之类的内容文件,我们可以使用<content>元素,例如:

<ItemGroup>
  <Content Include="..\Shared\SharedSettings.json" Link="SharedSettings.json" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>

在此示例中,我们将CopyToOutputDirectory设置为PreserveNewest,以便在构建或发布项目时将文件复制到输出目录。

PackageReference元素指定项目的NuGet依赖。Include属性指定包ID

<PackageReference Include="package-id" Version="" PrivateAssets="" IncludeAssets="" ExcludeAssets="" />

Version属性指定要还原的软件包的版本。

IncludeAssets属性指定<PackageReference>应使用属于指定包的哪些资产。默认情况下,包括所有包装资产。

ExcludeAssets属性指定<PackageReference>不应消耗属于指定包的资产。

PrivateAssets属性指定<PackageReference>应使用属于指定包的哪些资产,但不应流到下一个项目。的Analyzers,Build和ContentFiles资产都默认为私享此属性不存在。

多个目标框架

我们可以创建.NET Core应用程序并为其配置多个目标框架,以便它可以与所有已配置的目标框架一起运行。要定位多个框架,需要更改<TargetFramework>为复数,<TargetFrameworks>并包含我们要定位的不同框架的别名,并用;分隔:

<PropertyGroup>
   <TargetFrameworks>netstandard2.0;net462</TargetFrameworks>
 </PropertyGroup>

条件引用

我们可能会遇到的一个问题是,需要根据要构建的目标引用不同的程序集或NuGet程序包。

例如,我们将以下方法添加到我们的库中,它将成功编译.NET Standard 2.0目标,但是.NET 4.6.2目标将失败,因为它找不到.NET的定义HttpUtility。

public string JavaScriptEncode(string input)
{
    return HttpUtility.JavaScriptStringEncode(input);
}

要解决此问题,我们需要添加对System.Web程序集的引用,但仅.NET 4.6.2目标需要它。为此,我们只需.csproj使用以下语法在文件中添加条件引用即可:

<ItemGroup Condition=" '$(TargetFramework)' == 'net462' ">
    <Reference Include="System.Web" />
</ItemGroup>

如果要有条件引用的NuGet程序包,则使用PackageReference。可以使用多个条件:

<ItemGroup Condition=" '$(TargetFramework)' == 'net462' or '$(TargetFramework)' == 'net35'">
    <PackageReference Include="NAudio" Version="1.8.5" />
</ItemGroup>

条件编译

有时我们可能想从某些目标的编译中排除某些C#文件。例如,以下是在NAudio中针对.NET 3.5目标的方法,我引用了System.Windows.Forms程序集,并从编译中排除了三个特定文件:

<ItemGroup Condition=" '$(TargetFramework)' == 'net35' ">
<Reference Include="System.Windows.Forms" />
<Compile Remove="Wave\WaveOutputs\WasapiOutRT.cs" />
<Compile Remove="Wave\WaveInputs\WasapiCaptureRT.cs" />
<Compile Remove="Wave\WaveOutputs\WaveFileWriterRT.cs" />
</ItemGroup>

标签:文件,项目,Csproj,指定,笔记,目标,csproj,NET
来源: https://www.cnblogs.com/yigegaozhongsheng/p/13850073.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有