日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

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

來源: 責(zé)編: 時(shí)間:2023-08-05 11:44:54 4784觀看
導(dǎo)讀一、MSBuild簡介MSBuild是一種基于XML的構(gòu)建引擎,用于在.NET Framework和.NET Core應(yīng)用程序中自動化構(gòu)建過程。它是Visual Studio的構(gòu)建引擎,可在命令行或其他構(gòu)建工具中使用。MSBuild使用XML文件格式來指定項(xiàng)目的編譯

JxI28資訊網(wǎng)——每日最新資訊28at.com

一、MSBuild簡介

MSBuild是一種基于XML的構(gòu)建引擎,用于在.NET Framework和.NET Core應(yīng)用程序中自動化構(gòu)建過程。它是Visual Studio的構(gòu)建引擎,可在命令行或其他構(gòu)建工具中使用。JxI28資訊網(wǎng)——每日最新資訊28at.com

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

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

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

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

MSBuild可以用于多種場景,包括:JxI28資訊網(wǎng)——每日最新資訊28at.com

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

三、MSBuild基礎(chǔ)知識

以下是一些MSBuild基礎(chǔ)知識:JxI28資訊網(wǎng)——每日最新資訊28at.com

屬性

屬性是聲明和定義變量的方式。可以使用 SetProperty 元素或 PropertyGroup元素來定義屬性。例如:JxI28資訊網(wǎng)——每日最新資訊28at.com

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

項(xiàng)

項(xiàng)用于表示一個或多個文件或其他資源。可以使用 ItemGroup 元素和具有Include屬性的元素來創(chuàng)建項(xiàng)。例如:JxI28資訊網(wǎng)——每日最新資訊28at.com

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

任務(wù)

任務(wù)是執(zhí)行構(gòu)建過程中的特定操作的方式。可以使用 Task 元素和具有TaskName屬性的元素來聲明和定義任務(wù)。例如:JxI28資訊網(wǎng)——每日最新資訊28at.com

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

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

要在命令行上運(yùn)行MSBuild,請使用以下命令:JxI28資訊網(wǎng)——每日最新資訊28at.com

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

該命令將運(yùn)行名為 "Build" 的構(gòu)建目標(biāo),并使用名為 "Debug" 的配置文件來構(gòu)建項(xiàng)目。JxI28資訊網(wǎng)——每日最新資訊28at.com

四、MSBuild高級用法

MSBuild還有許多高級用法,包括:JxI28資訊網(wǎng)——每日最新資訊28at.com

自定義屬性和條件

在項(xiàng)目文件中定義自定義屬性和條件,例如定義一個自定義屬性來指定構(gòu)建輸出目錄:JxI28資訊網(wǎng)——每日最新資訊28at.com

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

此時(shí),可以在通用屬性文件中定義屬性值,然后在不同的項(xiàng)目文件中包含該通用屬性文件,以便重復(fù)使用自定義屬性。JxI28資訊網(wǎng)——每日最新資訊28at.com

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

在項(xiàng)目文件中聲明目標(biāo)之間的依賴關(guān)系,例如,在兩個目標(biāo)之間添加依賴關(guān)系:JxI28資訊網(wǎng)——每日最新資訊28at.com

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

這樣,MSBuild在執(zhí)行 "Test" 目標(biāo)時(shí),會先執(zhí)行 "Build" 目標(biāo)。JxI28資訊網(wǎng)——每日最新資訊28at.com

自定義任務(wù)

編寫自定義任務(wù)來執(zhí)行構(gòu)建過程中的特定任務(wù)。例如,使用 MSBuildCommunityTasks 執(zhí)行 FTP 上傳:JxI28資訊網(wǎng)——每日最新資訊28at.com

<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>

這個示例中,定義了一個名為 "FTPTask" 的自定義任務(wù),然后在 "UploadFile" 目標(biāo)中調(diào)用該任務(wù)來執(zhí)行 FTP 上傳。JxI28資訊網(wǎng)——每日最新資訊28at.com

條件表達(dá)式

使用條件表達(dá)式根據(jù)條件執(zhí)行不同的任務(wù)。例如,根據(jù)平臺類型選擇不同的構(gòu)建配置:JxI28資訊網(wǎng)——每日最新資訊28at.com

<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。JxI28資訊網(wǎng)——每日最新資訊28at.com

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

自定義構(gòu)建日志以記錄構(gòu)建過程中的詳細(xì)信息。例如,將構(gòu)建日志輸出到文件:JxI28資訊網(wǎng)——每日最新資訊28at.com

<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>

此示例中,定義了一個名為 "LogBuild" 的目標(biāo),并在執(zhí)行 "Build" 目標(biāo)之后調(diào)用該目標(biāo)。在 "LogBuild" 目標(biāo)中,使用 <Message> 元素將日志輸出到控制臺,使用 <WriteLinesToFile> 元素將日志寫入日志文件。JxI28資訊網(wǎng)——每日最新資訊28at.com

五、MSBuild最佳實(shí)踐

以下是MSBuild的一些最佳實(shí)踐及代碼示例:JxI28資訊網(wǎng)——每日最新資訊28at.com

使用命名屬性組,以便更好地組織和管理屬性:JxI28資訊網(wǎng)——每日最新資訊28at.com

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

在這個示例中,屬性都被包含在一個名為 "Debug|AnyCPU" 的 PropertyGroup 中。這樣可以更好地組織和管理屬性,并且可以使用條件表達(dá)式來根據(jù)需要選擇不同的屬性組。JxI28資訊網(wǎng)——每日最新資訊28at.com

避免硬編碼文件路徑,而是使用相對路徑和通用屬性:JxI28資訊網(wǎng)——每日最新資訊28at.com

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

在這個示例中,使用相對路徑 "src***.cs" 來指定需要編譯的源代碼文件,并使用通用屬性來獲取輸出路徑,以避免硬編碼路徑并提高可移植性。JxI28資訊網(wǎng)——每日最新資訊28at.com

使用預(yù)定義的 MSBuild 目標(biāo)和任務(wù),以便重復(fù)使用現(xiàn)有功能:JxI28資訊網(wǎng)——每日最新資訊28at.com

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

在這個示例中,使用現(xiàn)有的 MSBuild 目標(biāo)和任務(wù)來執(zhí)行 "Clean" 目標(biāo)。這樣可以重復(fù)使用現(xiàn)有功能并提高構(gòu)建效率。JxI28資訊網(wǎng)——每日最新資訊28at.com

使用條件表達(dá)式來支持多個版本和平臺:JxI28資訊網(wǎng)——每日最新資訊28at.com

<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>

在這個示例中,使用條件表達(dá)式根據(jù)目標(biāo)框架選擇執(zhí)行不同的操作。這樣可以更好地支持多個版本和平臺,并保持代碼的簡潔和易于維護(hù)。JxI28資訊網(wǎng)——每日最新資訊28at.com

禁用 Visual Studio 的自動格式化選項(xiàng),以避免與代碼格式化工具沖突:JxI28資訊網(wǎng)——每日最新資訊28at.com

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

在這個示例中,使用 EnableEditorConfig 屬性來禁用 Visual Studio 的自動格式化選項(xiàng),以避免與代碼格式化工具沖突。這樣可以保持代碼格式化的一致性,減少錯誤和不必要的麻煩。JxI28資訊網(wǎng)——每日最新資訊28at.com

參考文檔:https://learn.microsoft.com/zh-cn/visualstudio/msbuild/msbuild-concepts?view=vs-2022。JxI28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-94-0.html不容錯過的MSBuild技巧,必備用法詳解和實(shí)踐指南

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 分布式系統(tǒng)中的CAP理論,面試必問,你理解了嘛?

下一篇: 如何正確使用:Has和:Nth-Last-Child

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
亚洲图片激情小说| 亚洲欧洲在线观看| 欧美亚洲自偷自偷| 欧美一级午夜免费电影| 久久久人成影片一区二区三区| 中日韩美女免费视频网址在线观看 | 久久av一区二区| 老牛国产精品一区的观看方式| 久久国产视频网| 麻豆亚洲精品| 久久久夜精品| 欧美日韩日韩| 欧美日韩国产在线| 国产欧美精品va在线观看| 国色天香一区二区| 国内综合精品午夜久久资源| 亚洲人精品午夜| 先锋影音久久久| 欧美国产日韩一区二区| 国产精品日日摸夜夜添夜夜av| 国产一区二区三区在线播放免费观看 | 国产在线观看精品一区二区三区| 亚洲国产精品成人| 亚洲女性喷水在线观看一区| 免费久久精品视频| 欧美成人按摩| 国产精品久久毛片a| 在线观看国产日韩| 亚洲一区日韩在线| 午夜精彩视频在线观看不卡| 男女激情久久| 国产农村妇女精品一区二区| 国产视频在线观看一区二区| 亚洲片国产一区一级在线观看| 午夜一区二区三区不卡视频| 免费成人黄色| 国产欧美日韩亚洲| 亚洲视频二区| 免播放器亚洲一区| 国产亚洲一区二区三区在线播放 | 性久久久久久| 欧美日韩三级| 国产欧美日韩综合一区在线观看 | 国产精品美女在线| 亚洲精品小视频在线观看| 久久精品成人| 国产精品人人做人人爽人人添| 亚洲乱码久久| 亚洲综合导航| 欧美精品久久久久久久久老牛影院| 欧美婷婷久久| 亚洲国产精品一区二区第四页av | 亚洲一区精品在线| 欧美激情小视频| ●精品国产综合乱码久久久久| 欧美在线1区| 国产精品入口夜色视频大尺度| 亚洲精品久久久久久久久久久久| 久久人人97超碰国产公开结果| 另类图片综合电影| 国产主播在线一区| 亚洲看片一区| 免费成人av资源网| 精品动漫一区| 久久久欧美一区二区| 国产亚洲精品自拍| 午夜精品电影| 欧美刺激午夜性久久久久久久| 国产真实久久| 欧美一区二区在线免费观看| 国产精品日本欧美一区二区三区| 一本大道久久a久久综合婷婷| 欧美黄色免费| 亚洲精品乱码久久久久久蜜桃91 | 国产一区二区日韩精品欧美精品| 亚洲一区二区3| 国产精品99免视看9| 在线国产精品一区| 久久资源在线| 一区二区三区中文在线观看| 久久久久久久999| 国产精品久久福利| 亚洲一本大道在线| 国产精品乱子久久久久| 亚洲欧美www| 国产三级欧美三级| 久久久久国色av免费看影院| 精品福利av| 欧美成人精品在线播放| 最新中文字幕亚洲| 欧美日韩精品高清| 亚洲影院在线| 国产一区成人| 久久这里有精品15一区二区三区| 亚洲高清一二三区| 欧美精品久久99| 在线观看成人小视频| 老色批av在线精品| 亚洲精品在线观看免费| 欧美日韩亚洲精品内裤| 亚洲在线第一页| 国产婷婷97碰碰久久人人蜜臀| 久久久久久久久久码影片| 在线观看一区欧美| 欧美日韩成人综合天天影院| 91久久中文字幕| 欧美精品日日鲁夜夜添| 亚洲一区二区三区在线播放| 国产无一区二区| 久久综合久久久| 99精品欧美| 国产日韩欧美高清| 嫩草成人www欧美| 久久av二区| 亚洲国产精品ⅴa在线观看 | 国内伊人久久久久久网站视频| 免费观看日韩| 亚洲小少妇裸体bbw| 国产亚洲精品久久久久久| 免费在线国产精品| 亚洲视频网站在线观看| 国产一区视频观看| 欧美精品免费播放| 欧美亚洲日本网站| 亚洲区中文字幕| 国产精品五月天| 亚洲男人的天堂在线aⅴ视频| 国产一区二区三区网站 | 激情欧美国产欧美| 欧美日韩成人免费| 欧美一区二区在线看| 91久久午夜| 国产九色精品成人porny| 卡一卡二国产精品| 亚洲欧美www| 亚洲欧洲日本mm| 国产偷国产偷精品高清尤物| 欧美精品午夜视频| 久久激情视频免费观看| 99热免费精品在线观看| 国内精品美女在线观看| 欧美视频一区二区三区| 久久在线免费| 午夜精品久久| 99国产精品自拍| 一区二区亚洲欧洲国产日韩| 国产精品第13页| 欧美成人午夜激情视频| 欧美一区2区三区4区公司二百| 亚洲欧洲一区二区三区久久| 国产午夜精品一区理论片飘花| 欧美日韩午夜| 欧美国产高清| 久久九九久久九九| 亚洲欧美国产日韩中文字幕| 葵司免费一区二区三区四区五区| 精久久久久久久久久久| 欧美性猛交视频| 欧美在线视频一区二区| av成人天堂| 亚洲国产老妈| 欧美午夜不卡视频| 乱人伦精品视频在线观看| 亚洲欧美国产精品va在线观看 | 国模套图日韩精品一区二区| 欧美三级网页| 久久精品道一区二区三区| 一本色道久久88精品综合| 亚洲二区三区四区| 国产在线欧美日韩| 国产精品日韩二区| 欧美午夜www高清视频| 欧美国产视频在线| 美日韩精品免费观看视频| 久久精品国产亚洲aⅴ| 香蕉成人伊视频在线观看| 亚洲性色视频| 在线视频中文亚洲| 99爱精品视频| 亚洲免费不卡| 91久久综合亚洲鲁鲁五月天| 一区在线视频观看| 狠狠色丁香久久综合频道| 国产农村妇女毛片精品久久麻豆| 欧美视频精品一区| 欧美日韩一区二区精品| 欧美成人精品h版在线观看| 亚洲国产cao| 狠狠色综合色区| 黄色亚洲网站| 激情五月婷婷综合| 激情久久影院| 影音先锋成人资源站| 影音先锋一区| 亚洲电影免费| 91久久线看在观草草青青| 亚洲日产国产精品| 亚洲精品五月天| 99热在线精品观看| 一本久道综合久久精品| 日韩午夜在线视频| 一区二区三区免费观看| 亚洲天堂视频在线观看| 亚洲免费一区二区|