成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

不容錯(cuò)過的MSBuild技巧,必備用法詳解和實(shí)踐指南

開發(fā) 前端
MSBuild支持條件和屬性組合,可以為不同的目標(biāo)平臺(tái)自定義構(gòu)建過程。還可以使用自定義任務(wù),例如運(yùn)行代碼靜態(tài)分析器或壓縮構(gòu)建輸出文件等。

一、MSBuild簡(jiǎn)介

MSBuild是一種基于XML的構(gòu)建引擎,用于在.NET Framework和.NET Core應(yīng)用程序中自動(dòng)化構(gòu)建過程。它是Visual Studio的構(gòu)建引擎,可在命令行或其他構(gòu)建工具中使用。

MSBuild使用XML文件格式來指定項(xiàng)目的編譯、測(cè)試和部署等各個(gè)階段的任務(wù)。這些XML文件通常以.csproj文件的形式存儲(chǔ)。每個(gè)項(xiàng)目文件都包含一個(gè)或多個(gè) PropertyGroup 元素和一個(gè)或多個(gè) ItemGroup 元素。 PropertyGroup 元素聲明和定義屬性,例如目標(biāo)框架、輸出路徑和程序集名稱等。 ItemGroup 元素創(chuàng)建項(xiàng),例如NuGet包引用、文件和資源等。

可以使用 dotnet build 命令或 msbuild 命令來運(yùn)行MSBuild,它會(huì)自動(dòng)查找與當(dāng)前目錄相關(guān)聯(lián)的項(xiàng)目并執(zhí)行構(gòu)建過程。你還可以使用/t選項(xiàng)指定一個(gè)或多個(gè)目標(biāo),例如Clean、Build和Publish。

MSBuild支持條件和屬性組合,可以為不同的目標(biāo)平臺(tái)自定義構(gòu)建過程。還可以使用自定義任務(wù),例如運(yùn)行代碼靜態(tài)分析器或壓縮構(gòu)建輸出文件等。

二、MSBuild應(yīng)用場(chǎng)景

MSBuild可以用于多種場(chǎng)景,包括:

  • 編譯源代碼 MSBuild可以編譯應(yīng)用程序中的源代碼文件,將它們編譯成二進(jìn)制文件,以便在部署時(shí)使用。它支持多種編譯選項(xiàng),例如優(yōu)化、生成調(diào)試信息和設(shè)置警告等級(jí)等。
  • 處理配置文件和資源文件 MSBuild還可以處理應(yīng)用程序的配置文件和資源文件,例如App.config和Resources.resx文件。它可以將這些文件復(fù)制到應(yīng)用程序目錄中,并將其包含在最終編譯的二進(jìn)制文件中。
  • 安裝和注冊(cè)組件 如果應(yīng)用程序依賴于其他組件或庫,MSBuild可以自動(dòng)安裝和注冊(cè)這些組件,以確保應(yīng)用程序能夠正常運(yùn)行。它也可以從NuGet包管理器中下載和安裝依賴項(xiàng)。
  • 打包和部署應(yīng)用程序 MSBuild可以將應(yīng)用程序打包成zip文件或其他格式,以方便部署到其他環(huán)境中。它還可以自動(dòng)部署應(yīng)用程序到遠(yuǎn)程服務(wù)器或云平臺(tái)上,例如Azure或AWS。
  • 自定義任務(wù) 除了執(zhí)行預(yù)定義的任務(wù)之外,MSBuild還可以編寫自定義任務(wù),以執(zhí)行特定的構(gòu)建任務(wù)。例如,你可以編寫一個(gè)任務(wù)來執(zhí)行代碼靜態(tài)分析或壓縮構(gòu)建輸出文件。

三、MSBuild基礎(chǔ)知識(shí)

以下是一些MSBuild基礎(chǔ)知識(shí):

屬性

屬性是聲明和定義變量的方式。可以使用 SetProperty 元素或 PropertyGroup元素來定義屬性。例如:

<PropertyGroup>
  <MyProperty>MyValue</MyProperty>
</PropertyGroup>

項(xiàng)

項(xiàng)用于表示一個(gè)或多個(gè)文件或其他資源。可以使用 ItemGroup 元素和具有Include屬性的元素來創(chuàng)建項(xiàng)。例如:

<ItemGroup>
  <Compile Include="*.cs" />
</ItemGroup>

任務(wù)

任務(wù)是執(zhí)行構(gòu)建過程中的特定操作的方式。可以使用 Task 元素和具有TaskName屬性的元素來聲明和定義任務(wù)。例如:

<TaskName Parameter1="Value1" Parameter2="Value2" />

運(yùn)行構(gòu)建

要在命令行上運(yùn)行MSBuild,請(qǐng)使用以下命令:

msbuild MyProject.csproj /t:Build /p:Configuration=Debug

該命令將運(yùn)行名為 "Build" 的構(gòu)建目標(biāo),并使用名為 "Debug" 的配置文件來構(gòu)建項(xiàng)目。

四、MSBuild高級(jí)用法

MSBuild還有許多高級(jí)用法,包括:

自定義屬性和條件

在項(xiàng)目文件中定義自定義屬性和條件,例如定義一個(gè)自定義屬性來指定構(gòu)建輸出目錄:

<Project>
  <PropertyGroup>
    <OutputDirectory>bin\$(Configuration)\</OutputDirectory>
  </PropertyGroup>
  ...
  <Target Name="Build">
    <MakeDir Directories="$(OutputDirectory)" />
    ...
  </Target>
</Project>

此時(shí),可以在通用屬性文件中定義屬性值,然后在不同的項(xiàng)目文件中包含該通用屬性文件,以便重復(fù)使用自定義屬性。

目標(biāo)依賴關(guān)系

在項(xiàng)目文件中聲明目標(biāo)之間的依賴關(guān)系,例如,在兩個(gè)目標(biāo)之間添加依賴關(guān)系:

<Project>
  ...
  <Target Name="Build">
    ...
  </Target>
  <Target Name="Test" DependsOnTargets="Build">
    ...
  </Target>
</Project>

這樣,MSBuild在執(zhí)行 "Test" 目標(biāo)時(shí),會(huì)先執(zhí)行 "Build" 目標(biāo)。

自定義任務(wù)

編寫自定義任務(wù)來執(zhí)行構(gòu)建過程中的特定任務(wù)。例如,使用 MSBuildCommunityTasks 執(zhí)行 FTP 上傳:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <UsingTask TaskName="FTPTask" AssemblyFile="MSBuild.Community.Tasks.dll" />
  <Target Name="UploadFile">
    <FTPTask ServerHost="ftp.example.com"
             RemoteFile="upload.txt"
             LocalFile="c:\files\upload.txt"
             Username="user"
             Password="pass" />
  </Target>
</Project>

這個(gè)示例中,定義了一個(gè)名為 "FTPTask" 的自定義任務(wù),然后在 "UploadFile" 目標(biāo)中調(diào)用該任務(wù)來執(zhí)行 FTP 上傳。

條件表達(dá)式

使用條件表達(dá)式根據(jù)條件執(zhí)行不同的任務(wù)。例如,根據(jù)平臺(tái)類型選擇不同的構(gòu)建配置:

<Project>
  ...
  <Choose>
    <When Condition="'$(Platform)' == 'x86'">
      <PropertyGroup>
        <DefineConstants>DEBUG;X86</DefineConstants>
        ...
      </PropertyGroup>
    </When>
    <When Condition="'$(Platform)' == 'x64'">
      <PropertyGroup>
        <DefineConstants>DEBUG;X64</DefineConstants>
        ...
      </PropertyGroup>
    </When>
  </Choose>
  ...
</Project>

此示例使用條件表達(dá)式 <Choose> 和 <When> 標(biāo)記,通過判斷 $(Platform) 變量的值來選擇執(zhí)行不同的 PropertyGroup。

自定義構(gòu)建日志

自定義構(gòu)建日志以記錄構(gòu)建過程中的詳細(xì)信息。例如,將構(gòu)建日志輸出到文件:

<Project>
  <PropertyGroup>
    <LogDirectory>logs\</LogDirectory>
  </PropertyGroup>
  <Target Name="Build">
    <Exec Command="dotnet build MyApp.csproj" />
  </Target>
  <Target Name="LogBuild" AfterTargets="Build">
    <Message Text="Writing build log to $(LogDirectory)\build.log" Importance="high" />
    <WriteLinesToFile File="$(LogDirectory)\build.log" Lines="$([System.DateTime]::Now.ToString()) - Build succeeded." />
  </Target>
</Project>

此示例中,定義了一個(gè)名為 "LogBuild" 的目標(biāo),并在執(zhí)行 "Build" 目標(biāo)之后調(diào)用該目標(biāo)。在 "LogBuild" 目標(biāo)中,使用 <Message> 元素將日志輸出到控制臺(tái),使用 <WriteLinesToFile> 元素將日志寫入日志文件。

五、MSBuild最佳實(shí)踐

以下是MSBuild的一些最佳實(shí)踐及代碼示例:

使用命名屬性組,以便更好地組織和管理屬性:

<Project>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    ...
  </PropertyGroup>
  ...
</Project>

在這個(gè)示例中,屬性都被包含在一個(gè)名為 "Debug|AnyCPU" 的 PropertyGroup 中。這樣可以更好地組織和管理屬性,并且可以使用條件表達(dá)式來根據(jù)需要選擇不同的屬性組。

避免硬編碼文件路徑,而是使用相對(duì)路徑和通用屬性:

<Project>
  <ItemGroup>
    <Compile Include="src\**\*.cs" />
    ...
  </ItemGroup>
  <PropertyGroup>
    <OutputPath>bin\$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), Build.props)\)</OutputPath>
  </PropertyGroup>
  ...
</Project>

在這個(gè)示例中,使用相對(duì)路徑 "src***.cs" 來指定需要編譯的源代碼文件,并使用通用屬性來獲取輸出路徑,以避免硬編碼路徑并提高可移植性。

使用預(yù)定義的 MSBuild 目標(biāo)和任務(wù),以便重復(fù)使用現(xiàn)有功能:

<Project>
  ...
  <Target Name="Clean">
    <MSBuild Projects="$(MSBuildThisFileFullPath)"
             Targets="CleanSolution"
             Properties="Configuration=$(Configuration)" />
  </Target>
  ...
</Project>

在這個(gè)示例中,使用現(xiàn)有的 MSBuild 目標(biāo)和任務(wù)來執(zhí)行 "Clean" 目標(biāo)。這樣可以重復(fù)使用現(xiàn)有功能并提高構(gòu)建效率。

使用條件表達(dá)式來支持多個(gè)版本和平臺(tái):

<Project>
  ...
  <Choose>
    <When Condition="'$(TargetFramework)' == 'netcoreapp3.1'">
      <PropertyGroup>
        <DefineConstants>NET_CORE_3_1</DefineConstants>
        ...
      </PropertyGroup>
    </When>
    <When Condition="'$(TargetFramework)' == 'net5.0'">
      <PropertyGroup>
        <DefineConstants>NET_5_0</DefineConstants>
        ...
      </PropertyGroup>
    </When>
  </Choose>
  ...
</Project>

在這個(gè)示例中,使用條件表達(dá)式根據(jù)目標(biāo)框架選擇執(zhí)行不同的操作。這樣可以更好地支持多個(gè)版本和平臺(tái),并保持代碼的簡(jiǎn)潔和易于維護(hù)。

禁用 Visual Studio 的自動(dòng)格式化選項(xiàng),以避免與代碼格式化工具沖突:

<Project>
  ...
  <PropertyGroup Condition="'$(BuildingInsideVisualStudio)' == 'true'">
    <EnableEditorConfig>false</EnableEditorConfig>
  </PropertyGroup>
  ...
</Project>

在這個(gè)示例中,使用 EnableEditorConfig 屬性來禁用 Visual Studio 的自動(dòng)格式化選項(xiàng),以避免與代碼格式化工具沖突。這樣可以保持代碼格式化的一致性,減少錯(cuò)誤和不必要的麻煩。

參考文檔:https://learn.microsoft.com/zh-cn/visualstudio/msbuild/msbuild-concepts?view=vs-2022。

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2019-10-29 09:00:00

AIOps人工智能

2011-03-01 09:17:34

Linux命令行

2023-12-04 11:05:44

2019-07-04 08:00:00

MySQL存儲(chǔ)開發(fā)

2020-12-17 09:24:20

前端開發(fā)工具

2016-02-29 15:00:48

RSA/信息安全

2015-09-17 17:37:57

工具程序開源

2023-06-29 17:53:00

VSCode插件程序

2014-07-10 10:56:21

jQuery

2022-09-22 16:17:12

css編程語言開發(fā)

2013-08-19 10:45:42

華為HCC大會(huì)HCC2013華為

2024-01-31 11:55:16

數(shù)據(jù)分析數(shù)據(jù)計(jì)算收支

2020-05-08 09:13:48

前端開發(fā)

2014-08-26 10:38:23

AppAndroid Wea應(yīng)用

2020-08-05 10:13:14

JavaScript開發(fā)

2020-01-14 10:17:13

深度學(xué)習(xí)人生第一份工作人工智能

2024-01-18 00:00:00

開發(fā)框架Port

2024-01-25 18:08:57

CSSHTML文件

2020-03-19 10:12:10

開發(fā)技能代碼

2012-02-02 10:40:47

開發(fā)者盛會(huì)Linux
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 午夜精品福利视频 | 欧美另类视频 | 成人av电影网 | 精品一区二区三区在线播放 | 在线观看第一区 | 免费黄色的视频 | 亚洲精品电影网在线观看 | 久久激情视频 | 狠狠干夜夜草 | 久久国产成人午夜av影院武则天 | 精品国产99| 国产东北一级毛片 | 国产成人精品一区二区 | 午夜三级视频 | 亚洲国产精品一区二区三区 | 国产区视频在线观看 | av大片| 国产欧美精品一区二区三区 | 天天射天天操天天干 | 亚洲国产成人精品女人久久久 | 欧美三区 | 亚洲欧美综合精品久久成人 | 91视频在线看 | 午夜影院在线观看视频 | 刘亦菲国产毛片bd | 大香在线伊779 | 91免费在线看 | 韩日一区二区三区 | 91高清视频在线观看 | 成人在线一区二区三区 | 综合久久av | 毛片一级电影 | 国产一区二区三区四区五区加勒比 | 午夜电影一区二区 | 狠狠干美女 | 精品91久久久 | 二区三区视频 | 精品视频在线观看 | 欧美性一区二区三区 | 欧美精品1区 | 久久久久国产一区二区三区 |