精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

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

開發 前端
MSBuild支持條件和屬性組合,可以為不同的目標平臺自定義構建過程。還可以使用自定義任務,例如運行代碼靜態分析器或壓縮構建輸出文件等。

一、MSBuild簡介

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

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

可以使用 dotnet build 命令或 msbuild 命令來運行MSBuild,它會自動查找與當前目錄相關聯的項目并執行構建過程。你還可以使用/t選項指定一個或多個目標,例如Clean、Build和Publish。

MSBuild支持條件和屬性組合,可以為不同的目標平臺自定義構建過程。還可以使用自定義任務,例如運行代碼靜態分析器或壓縮構建輸出文件等。

二、MSBuild應用場景

MSBuild可以用于多種場景,包括:

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

三、MSBuild基礎知識

以下是一些MSBuild基礎知識:

屬性

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

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

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

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

任務

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

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

運行構建

要在命令行上運行MSBuild,請使用以下命令:

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

該命令將運行名為 "Build" 的構建目標,并使用名為 "Debug" 的配置文件來構建項目。

四、MSBuild高級用法

MSBuild還有許多高級用法,包括:

自定義屬性和條件

在項目文件中定義自定義屬性和條件,例如定義一個自定義屬性來指定構建輸出目錄:

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

此時,可以在通用屬性文件中定義屬性值,然后在不同的項目文件中包含該通用屬性文件,以便重復使用自定義屬性。

目標依賴關系

在項目文件中聲明目標之間的依賴關系,例如,在兩個目標之間添加依賴關系:

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

這樣,MSBuild在執行 "Test" 目標時,會先執行 "Build" 目標。

自定義任務

編寫自定義任務來執行構建過程中的特定任務。例如,使用 MSBuildCommunityTasks 執行 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>

這個示例中,定義了一個名為 "FTPTask" 的自定義任務,然后在 "UploadFile" 目標中調用該任務來執行 FTP 上傳。

條件表達式

使用條件表達式根據條件執行不同的任務。例如,根據平臺類型選擇不同的構建配置:

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

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

自定義構建日志

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

<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" 的目標,并在執行 "Build" 目標之后調用該目標。在 "LogBuild" 目標中,使用 <Message> 元素將日志輸出到控制臺,使用 <WriteLinesToFile> 元素將日志寫入日志文件。

五、MSBuild最佳實踐

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

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

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

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

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

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

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

使用預定義的 MSBuild 目標和任務,以便重復使用現有功能:

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

在這個示例中,使用現有的 MSBuild 目標和任務來執行 "Clean" 目標。這樣可以重復使用現有功能并提高構建效率。

使用條件表達式來支持多個版本和平臺:

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

在這個示例中,使用條件表達式根據目標框架選擇執行不同的操作。這樣可以更好地支持多個版本和平臺,并保持代碼的簡潔和易于維護。

禁用 Visual Studio 的自動格式化選項,以避免與代碼格式化工具沖突:

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

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

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

責任編輯:姜華 來源: 今日頭條
相關推薦

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存儲開發

2020-12-17 09:24:20

前端開發工具

2016-02-29 15:00:48

RSA/信息安全

2015-09-17 17:37:57

工具程序開源

2023-06-29 17:53:00

VSCode插件程序

2022-09-22 16:17:12

css編程語言開發

2014-07-10 10:56:21

jQuery

2013-08-19 10:45:42

華為HCC大會HCC2013華為

2020-05-08 09:13:48

前端開發

2024-01-31 11:55:16

數據分析數據計算收支

2014-08-26 10:38:23

AppAndroid Wea應用

2024-01-25 18:08:57

CSSHTML文件

2020-08-05 10:13:14

JavaScript開發

2020-01-14 10:17:13

深度學習人生第一份工作人工智能

2024-01-18 00:00:00

開發框架Port

2020-03-19 10:12:10

開發技能代碼

2018-04-10 10:44:37

華為云
點贊
收藏

51CTO技術棧公眾號

国产免费一区二区三区在线观看| 亚洲高清av在线| 亚洲精品影院| 午夜久久久久久久久久| 国产亚洲激情| 久久先锋资源| 色综合网站在线| 在线视频一二三区| 天堂中文在线官网| 久久99精品久久久久久国产越南| 九九热精品视频在线播放| 在线视频 日韩| 久久久久毛片| 亚洲国产乱码最新视频| 亚洲7777| 午夜在线观看视频18| 精品综合久久久久久8888| 午夜精品一区二区三区在线| 国产福利在线导航| 牛牛精品成人免费视频| 91精品国产91久久久久久一区二区 | 亚洲a成人v| 欧美日韩激情视频| 日本a在线天堂| 在线日本中文字幕| 97久久超碰国产精品| 亚洲影院高清在线| 中文字幕 欧美激情| 一区二区黄色| 欧美激情亚洲另类| 日本a级片视频| 日韩一区二区在线| 亚洲欧洲日本专区| 国产激情视频网站| jizz性欧美2| 欧美一区二区三区小说| 在线能看的av网站| 成人免费一区| 在线观看91精品国产入口| 久在线观看视频| 国产理论电影在线| 亚洲永久免费av| 国产一二三四五| 国产激情在线观看| 中文成人综合网| 亚洲国产精品视频一区| 国产玉足榨精视频在线观看| 久久综合网色—综合色88| 精品免费视频123区| 蜜臀av午夜精品| www.av网站| 水蜜桃精品av一区二区| 中文字幕国内精品| 亚洲a∨无码无在线观看| 精品国产午夜| 在线一区二区日韩| 五月婷婷欧美激情| 日韩精品首页| 日韩在线观看免费| 国产第一页浮力| 中文一区一区三区免费在线观看| 久久久极品av| 欧美精品久久久久久久久46p| 亚洲欧美综合久久久| 蜜月aⅴ免费一区二区三区| 全网免费在线播放视频入口| 中文字幕一区二区三区在线视频| 欧美剧在线观看| 久久国产一级片| 在线综合视频| 日本伊人精品一区二区三区介绍| 午夜精品一区二| 美国十次了思思久久精品导航 | 亚洲在线资源| 日韩写真欧美这视频| 亚洲一二三四五| 欧美一区 二区| 国产亚洲精品久久久久久牛牛| 亚洲色图 激情小说| 先锋资源久久| 久久久久久久影院| 日本久久综合网| 爱高潮www亚洲精品| 久久精品盗摄| 韩国美女主播一区| 亚洲 小说区 图片区| 久久成人精品无人区| 国产精品二区在线| 毛片网站在线| 亚洲你懂的在线视频| 欧美在线观看www| 久久精品资源| 亚洲精品一区二区精华| 国内精品卡一卡二卡三| 中文字幕一区二区精品区| 91国产美女视频| 亚洲永久精品视频| av一二三不卡影片| 一区二区三区国产福利| а√在线中文在线新版| 欧美日韩免费一区二区三区视频| 国产精品果冻传媒| 久久日文中文字幕乱码| 久久男人的天堂| 一本色道久久综合无码人妻| jizz一区二区| 伊人av成人| 欧美高清另类hdvideosexjaⅴ| 日本精品一级二级| 制服丝袜av在线| 欧美韩日高清| 国产v综合ⅴ日韩v欧美大片| 亚洲精品无遮挡| 国产精品久久久久久久久免费桃花| 一卡二卡三卡视频| 亚洲精品毛片| 亚洲人成电影网| 九九热这里有精品视频| 麻豆精品一二三| 欧美日韩中文国产一区发布| 午夜成年人在线免费视频| 欧美午夜精品久久久| 国产伦精品一区二区三区妓女| 欧美1区视频| 国产男女猛烈无遮挡91| 国产视频二区在线观看| 疯狂欧美牲乱大交777| 人妻激情偷乱视频一区二区三区| 日韩中文在线电影| 国产精品欧美久久久| 久久经典视频| 亚洲成人不卡| 婷婷激情综合网| 亚洲精品一区二区18漫画| 四虎成人av| 国产精品视频内| 国产二区视频在线观看| 色综合久久六月婷婷中文字幕| 黄色av电影网站| 欧美三级视频| 99re视频在线| 日韩精品分区| 欧美成人一级视频| 欧美三级免费看| 国产精品一区二区你懂的| 日韩中文字幕av在线| 新片速递亚洲合集欧美合集| 亚洲欧美日韩中文在线制服| 国产中文字幕视频| 国产视频亚洲色图| 蜜桃免费在线视频| 91日韩欧美| 91欧美日韩一区| 国产高清一区二区三区视频 | 中文字幕伦av一区二区邻居| 国产91精品高潮白浆喷水| 日本不卡视频一区二区| 色婷婷久久一区二区三区麻豆| 偷拍夫妻性生活| 日本美女一区二区三区视频| 亚洲精品成人三区| 国产精品白丝久久av网站| 欧美成人免费网| 亚洲AV无码精品国产| 亚洲成在线观看| 偷拍女澡堂一区二区三区| 日韩精品电影在线观看| 一个色的综合| jizz18欧美18| 欧美一区二三区| 92国产在线视频| 欧美一卡二卡三卡四卡| 福利一区二区三区四区| 久久亚洲一区二区三区四区| 污污的网站18| 欧美日韩影院| 欧美日韩在线高清| 亚洲伦理网站| 91爱视频在线| 女女色综合影院| 精品一区二区三区的国产在线观看| 欧美一区午夜精品| 日本少妇久久久| 国产日韩精品视频一区| 亚洲色图欧美自拍| 一区二区激情| 一区二区三区国| 老司机成人在线| 国产精品一区二区性色av| 午夜羞羞小视频在线观看| 亚洲精品资源在线| 国产精品无码专区av免费播放| 亚洲午夜免费视频| 男人天堂资源网| 99精品久久久久久| 色呦色呦色精品| 一区二区精品| 最新黄色av网站| 蜜桃a∨噜噜一区二区三区| 成人欧美在线视频| 免费成人直播| 久久久久久久爱| av中文资源在线| 亚洲高清在线观看| 国产精品乱码久久久| 欧美午夜影院在线视频| 一区二区国产精品精华液| 久久婷婷色综合| 国产精品果冻传媒| 国产真实乱偷精品视频免| 任你操这里只有精品| 欧美特黄一级| 亚洲最新免费视频| 久久不见久久见国语| 国产精品久久国产精品| 一级欧美视频| 国产精品久久久久免费a∨大胸| 国内在线免费视频| 久久综合国产精品台湾中文娱乐网| 九色视频成人自拍| 亚洲第一中文字幕在线观看| 99热这里只有精品5| 欧美视频一区二| 亚洲免费黄色网址| 亚洲国产美女搞黄色| 欧美日韩在线国产| 中文字幕亚洲一区二区av在线| 9.1成人看片免费版| jiyouzz国产精品久久| 成人做爰69片免费| 国产一区二区在线视频| 日本激情综合网| 日韩中文字幕av电影| 男人天堂999| 宅男噜噜噜66国产日韩在线观看| 成人小视频在线观看免费| 亚洲の无码国产の无码步美| aa国产精品| 男女视频网站在线观看| 亚洲黄色天堂| 国产精品国产亚洲精品看不卡| 亚洲网站在线| 国产一线二线三线女| 亚洲夜间福利| 少妇人妻在线视频| 国产欧美日本| 久久国产亚洲精品无码| 国产日韩综合| 日韩欧美在线播放视频| 新67194成人永久网站| 国产男女无遮挡| 久久国产主播| 日本www.色| 美国av一区二区| 国产免费中文字幕| 国产激情精品久久久第一区二区 | 嗯用力啊快一点好舒服小柔久久| 97免费资源站| 国产成人在线中文字幕| 国产一区二区精品在线| 亚洲激情播播| 亚洲国产日韩美| 久久精品国内一区二区三区水蜜桃| 在线播放 亚洲| 欧美日韩三级| 国产97在线 | 亚洲| 日日骚欧美日韩| 91国内在线播放| 成人一区二区视频| 91精品人妻一区二区| 中文字幕高清一区| 日本中文字幕免费在线观看| 亚洲国产一区二区视频| 黄色片中文字幕| 在线播放中文字幕一区| 亚洲精品第五页| 亚洲欧洲自拍偷拍| 二区在线播放| 欧美亚洲国产日韩2020| 美女色狠狠久久| www.一区二区三区| 国产欧美日韩精品高清二区综合区| 亚洲日本精品国产第一区| 欧美日韩国产一区精品一区| 国内性生活视频| 精品一区二区三区免费| yy6080午夜| 国产精品久久免费看| 亚洲一区二区91| 欧美自拍偷拍一区| 亚洲第一色视频| 一区二区福利视频| 欧美xxxxhdvideosex| 国产91亚洲精品| 久久人妻少妇嫩草av无码专区| 美女www一区二区| 国产精品手机在线观看| 国产精品人成在线观看免费| 日韩av电影网| 欧美一区二视频| 国家队第一季免费高清在线观看| 欧美成人精品一区二区三区| 亚洲播播91| 国产日韩亚洲精品| 天天久久综合| 黄色一级大片在线观看| 粉嫩嫩av羞羞动漫久久久| 美国美女黄色片| 精品久久中文字幕久久av| 99国产成人精品| 一区二区三区国产在线观看| 成年人黄色大片在线| 成人黄色免费看| 国产亚洲欧美日韩在线观看一区二区| 国产人妻人伦精品| 精品一区二区三区在线视频| 黄色正能量网站| 亚洲国产精品自拍| 国产女人爽到高潮a毛片| 国产亚洲精品日韩| 亚洲天堂手机| 精品高清视频| 怡红院精品视频在线观看极品| xxx中文字幕| 国产精品第13页| 自拍偷拍色综合| 亚洲女人天堂av| 亚洲伊人av| 久久久精品动漫| 中文国产一区| 中文字幕精品久久久| 亚洲综合色婷婷| 亚洲第一页在线观看| 久久夜色撩人精品| 在线日韩三级| 亚洲天堂av免费在线观看| 国产啪精品视频| 中文在线免费观看| 亚洲欧美中文在线视频| 交100部在线观看| 国产亚洲一区在线播放| 欧美三区美女| 不许穿内裤随时挨c调教h苏绵| 最新国产成人在线观看| 91影院在线播放| 日韩一区二区久久久| 国产精品久久久久久久久免费高清| 欧美一区二区三区四区夜夜大片| 校园春色综合网| 91网站免费入口| 欧美在线小视频| 在线视频自拍| 成人国产精品久久久久久亚洲| 99精品综合| 亚洲精品乱码久久久久久9色| 亚洲精品乱码久久久久久久久| aaa一区二区三区| 欧美另类老女人| 国产精品久久久久av蜜臀| 人妻少妇精品无码专区二区| 99视频精品免费视频| 久久一区二区三区视频| 亚洲社区在线观看| 色综合.com| 99re6这里有精品热视频| 成人一二三区视频| 国产成人中文字幕| 欧美久久精品一级c片| 日本激情综合网| 亚洲精品水蜜桃| 天天干免费视频| 国产精品wwwwww| 我不卡影院28| 国产高清成人久久| 在线观看视频一区| 黄色在线免费看| 国产精品一区二区三区精品| 久久av在线| 久久福利免费视频| 精品久久国产字幕高潮| 免费电影日韩网站| 福利网在线观看| 成人爽a毛片一区二区免费| 一级片视频在线观看| 久久精品视频网站| 欧美色图婷婷| 国产成人在线综合| 五月天久久比比资源色| av在线第一页| 成人免费在线看片| 久久久久久网| 久久免费看少妇高潮v片特黄 | 亚洲一区二区三区在线播放| 午夜18视频在线观看| 91精品国产综合久久香蕉最新版 | 影音先锋中文字幕一区二区| 中文字幕第4页| 精品毛片乱码1区2区3区| 日韩精品影院| 男人添女荫道口图片|