MSBuild:用于创建可靠的最佳实践生成,第1部分MicrosoftLearn

请升级到MicrosoftEdge以使用最新的功能、安全更新和技术支持。

MSBuild

用于创建可靠的最佳实践生成,第1部分

SayedIbrahimHashimi

内容

定义目标依赖项批处理任务定义动态项和属性扩展清理过程组织目标使用通配符

定义目标依赖项

MSBuild中定义一个目标时,可以使用DependsOnTargets属性来定义目标依赖项。MSBuild使用此属性确定在其中执行目标的顺序。是例如如果您定义名为的目标部署依赖目标PrepareForBuild和生成的如下所示Express的依赖项:

尽管上一列表定义所需依赖的项,不提供可以扩展部署目标的行为。如果您可以指定部署目标依赖而不必修改本身部署目标的其他目标,它会更好。可以通过在DependsOnTargets属性而不是使用硬编码值定义属性来实现此行为。

请看一下此处显示修改后的部署目标:

$(DeployDependsOn);PrepareForBuild;Build;BeforeDeploy;CoreDeploy;AfterDeploy在这种情况下部署目标是一个空的目标。唯一它是指定这取决于的目标。实际工时是在CoreDeploy目标执行的。通过执行此步骤,您可以扩展使用DeployDependsOn属性,可以执行的目标之前和之后都CoreDeploy执行。

批处理任务

MSBuild使用称为任务批处理的概念,该任务将执行一次按每个唯一的批处理或的值组。批始终创建基于项目的元数据。请看一下一个简单的示例使用图2所示该Batching01.proj文件的内容。

图2A简单批处理示例

在TaskBatching01目标中用调用消息任务。此表达式将导致MSBuild来确定由从SampleItem物料组元数据定义唯一批。因为我知道该组有两个唯一的值,我知道的两个批创建,从组元数据和其他与使用A2中具有A1的值。另一条消息任务,创建基于ID的元数据值的数目。执行此目标的结果如图3所示。

图3Batching01.proj结果

C:\Samples\Batching>msbuildBatching01.proj/t:TaskBatching01/nologoBuildstarted10/20/20081:27:58AM.Project"C:\Samples\Batching\Batching01.proj"onnode0(TaskBatching01target(s)).SampleItem:one;two;three;four;fiveSampleItem.Group:A1SampleItem.Group:A2SampleItem.Id:A363BE85-2CB1-4221-A9CB-2881B7699329SampleItem.Id:48E171C8-2274-4567-84D5-D20C6B0CB363SampleItem.Id:618E5BD8-650F-43c9-855E-259126284004SampleItem.Id:65E8E8E7-5A3F-4e02-A1D9-34F797CB68D9SampleItem.Id:43D0D1FE-304F-4aff-BE19-67AD2195872BDoneBuildingProject"C:\Samples\Batching\Batching01.proj"(TaskBatching01target(s)).Buildsucceeded.0Warning(s)0Error(s)可以看到该语句flattensSampleItem值到一个字符串传递到消息任务导致的@(SampleItem)表达式的位置"一;两个;三个;四个;五个"。对比这具有与该调用所示的行为。在这种情况下已两次执行消息任务。在该SampleItem.id实例的情况下消息任务已执行五次。

图4Copy01.proj

src|class1.cs|class2.cs|class3.cs|class4.cs|+---Admin|admin_class1.cs|admin_class2.cs|+---Utilitiesutil_class1.csutil_class2.cs在本示例,在DestinationFolder被指定为$(Dest)%(SrcFiles.RecursiveDir).此语句将SrcFiles项目分为三个组的RecursiveDir根据值RecursiveDir、管理和实用程序的空值。复制任务都调用三次,一次每个组。期间的每次调用只当前组中的该文件为SrcFiles项传递给复制任务。

若要才能清楚地看到此,一下生成图5所示的详细的日志。从日志,您就可以确认复制任务执行三次,并且每次只文件匹配RecursiveDir的当前值已包括在SrcFiles项目中。

图5递归复制文件

图6Zip01.proj

Zip任务用于在ZipFile目标和值$(_ZipWorkingDir)%(SourceFiles.group).内%(SourceFiles.Access).zipisprovidedfortheZipFileNameproperty.在包含从相同的项列表的多个批处理表达式的情况下,批创建使用元数据的唯一组合。此语句,批会创建从唯一值的组和访问。因为有组的三个值和两个访问,将有最多六个批。在这种情况下有图7所示的组合所组成的只有四个批。

其他可能的组合(管理/公用和Util/私钥)永远不会在项目中显示,因此不会使用它们。现在,我们知道应创建四个.zip文件。如果执行命令msbuildZip01.proj/t:ZipFiles,可以看到结果如图8所示。

图8创建基于元数据的Zip文件

C:\Samples\Batching>msbuildZip01.proj/nologoBuildstarted11/3/200811:40:40PM.Project"C:\Samples\Batching\Zip01.proj"onnode0(defaulttargets).Creatingdirectory"output\".Creatingzipfile"output\common.public.zip".added"src/class1.cs".added"src/class3.cs".Createdzipfile"output\common.public.zip"successfully.Creatingzipfile"output\common.private.zip".added"src/class2.cs".added"src/class4.cs".Createdzipfile"output\common.private.zip"successfully.Creatingzipfile"output\util.public.zip".added"src/Utilities/util_class1.cs".added"src/Utilities/util_class2.cs".Createdzipfile"output\util.public.zip"successfully.Creatingzipfile"output\admin.private.zip".added"src/Admin/admin_class1.cs".added"src/Admin/admin_class2.cs".Createdzipfile"output\admin.private.zip"successfully.DoneBuildingProject"C:\Samples\Batching\Zip01.proj"(defaulttargets).Buildsucceeded.0Warning(s)0Error(s)在该图,可以看到zip任务IMAPITable四次,预期。每个zip文件名称中包含使用批处理的两个元数据值。

此处描述的行为并不限于两个元数据值或单个项目列表。您可以自由使用如有必要的尽可能多的元数据值。批处理在多个项列表的行为与不同内容我已经介绍并不将此处讨论。

定义动态项和属性

MSBuild2.0中必须使用CreateItem和CreateProperty任务分别创建动态的项和属性。MSBuild3.5中,您可以通过使用相同的语法,当您使用的静态项创建它们。首选的方法是使用ItemGroup和PropertyGroup元素,在一个目标。

属性和Item评估发生多个周期。静态属性和项,属性计算的上向下(从文件末尾文件的开头),包括输入任何导入的项目和项目计算从上到下,还包括任何导入的项目中输入。它们执行计算动态属性和项。

在创建项和属性时,约定是开始使用下划线的名称为"internal"的值。项目和属性名称不能启动使用下划线表示用户它们能够替代它们。在创建这些属性或项目时,给出此约定,应首先检查以查看是否在已定义一个条件。这非常有用,以防其他人已定义相同的属性或应重写您的项目。

MSBuild3.5包含与动态项的新功能。是例如MSBuild2.0中,您不能修改的项列表的内容。在一个项列表中包括项目后无法删除。在解决此限制是创建新项目不包括您不想值。MSBuild3.5现在支持通过删除属性的项目中的删除值。图9中,显示该项目文件RemoveItems01.proj,演示此。

图9RemoveItems01.proj

图10显示了执行删除目标的结果。基于图10所示的输出,您可以看到,class2.cs和class3.cs文件已成功删除从SrcFiles物料。可以同时添加和更新使用ItemGroup元素内部的一个的目标的元数据使用相同的语法处理创建动态的项目。若要了解如何更新元数据值,请一下UpdateMetadata01.proj文件图11所示。

图10从项目中删除值

C:\Samples>msbuildRemoveItems01.proj/t:Remove/nologoBuildstarted10/26/200812:54:11AM.Project"C:\Samples\RemoveItems01.proj"onnode0(Removetarget(s)).SrcFiles:Batching\src\class1.cs;Batching\src\class2.cs;Batching\src\class3.csSrcFiles:Batching\src\class1.csDoneBuildingProject"C:\Samples\RemoveItems01.proj"(Removetarget(s)).Buildsucceeded.0Warning(s)0Error(s)图11UpdateMetadata01.proj

图12更新现有的元数据

C:\Samples>msbuildUpdateMetadata01.proj/t:UpdateSpecificVersion/nologoBuildstarted10/29/200812:07:39AM.Project"C:\Samples\UpdateMetadata01.proj"onnode0(UpdateSpecificVersiontarget(s)).IronPython,Version=...:Falselog4net,Version=...:Falsenunit.core,...:Falsenunit.framework,Version=...:Falsenunit.util,...:FalseUpdateReference.SpecificVersiontoTrueIronPython,Version=...:Truelog4net,Version=...:Truenunit.core,...:Truenunit.framework,Version=...:Truenunit.util,...:TrueDoneBuildingProject"C:\Samples\UpdateMetadata01.proj"(UpdateSpecificVersiontarget(s)).Buildsucceeded.0Warning(s)0Error(s)您可以看到添加AddMetadata01.proj文件包含相应的示例代码中的元数据的一个示例。我不会转到详细信息。与修改项目列表本身,更新数据,并将元数据添加到项目中,在执行目标时可以是具有MSBuild2.0没有等效项的新功能。

扩展清理过程

此部分与使用MSBuild会生成VisualStudio中的C#或VisualBasic.NET项目时。此处描述的行为都包含内部目标文件用于生成这些类型的项目和不在MSBuild本身。

在修改生成过程来创建新文件,您负责扩展清理过程清理这些文件。MSBuild清理文件,它负责自动,但它不能,生成的自定义的目标的文件。MSBuild维护名为FileWrites包含需要清洗的文件的项目列表。此列表被保存到一个文件被称为"清理缓存"obj文件夹。可以将其他值放到FileWrites项列表,以便在被删除项目清理时。

有两个缺点这样,但是。要删除的文件必须位于该输出路径下,并您必须将项目追加到该列表,清除的缓存写入磁盘的中清理或会出现IncrementalClean目标根据执行的生成类型之前。生成目标完成之前,将调用这些目标。

在示例代码本文随附,您将看到Windows窗体项目WindowsFormsApplication1,在其中我已定义BeforeBuild目标,如下所示:

此目标,一个名为的文件中通过WriteLinesToFile任务创建settings.config。在这种情况下该文件包含仅文本"配置项下面,",但是它可能包含appSettings节点,以及其他内容的值。此外,FileWrites列表被追加到,因此settings.config文件将被移除,执行清理时。

图13Clean目标结果

另一种方法是使用目标依赖项。您可以扩展清理过程中注入您自己的目标将CleanDependsOn属性。请看一下自定义到WindowsFormsApplication2项目图14中,显示的Microsoft.CSharp.targets导入语句之后发生。

图14WindowFormsApplication2

图15Clean目标结果

C:\Samples\WindowsFormsApplication2>msbuildWindowsFormsApplication2.csproj/t:Clean/nologoBuildstarted10/26/20081:17:40PM.Project"C:\Samples\WindowsFormsApplication2\WindowsFormsApplication2.csproj"onnode0(Cleantarget(s)).CustomBeforeCleantargetexecutedCoreClean:Deletingfile"\bin\Debug\WindowsFormsApplication2.exe".Deletingfile"\bin\Debug\WindowsFormsApplication2.pdb".Deletingfile"\obj\Debug\WindowsFormsApplication2.Form1.resources".Deletingfile"\obj\Debug\WindowsFormsApplication2.Properties.Resources.resources".Deletingfile"\obj\Debug\WindowsFormsApplication2.csproj.GenerateResource.Cache".Deletingfile"\obj\Debug\WindowsFormsApplication2.exe".Deletingfile"\obj\Debug\WindowsFormsApplication2.pdb".AfterClean:AfterCleantargetexecutedCustomAfterClean:CustomAfterCleantargetexecutedDoneBuildingProject"C:\Samples\WindowsFormsApplication2\WindowsFormsApplication2.csproj"(Cleantarget(s)).Buildsucceeded.0Warning(s)0Error(s)组织目标

生成过程的增长需要组织驻留了不同的部分。通常情况下,最好使用专用的职责的文件和其内容反映它们的用途。定义为产品的生成过程时,请解决这种情况下,会有所帮助创建三个文件:

通过以便重写MyProduct.settings.targets中的任何值并准备MyProduct.targets属性和项。如果您与此生成过程的C#项目,MyProduct.targets相当于Microsoft.CSharp.targets(和Microsoft.common.targets),并其他两个文件构成实际的项目文件。

使用通配符

VisualStudio项目文件并不使用通配符来填充VisualStudio进行的交互的项目。例如,您可以定义编译项目包含将在如下所示发送给该的编译器的文件的列表:

将该表达式将放所有文件在src文件夹到该编译项目和这是有效和将起作用时,它不是最佳的方法采用外部随意的项目。VisualStudio对项目文件所做的任何编辑将导致此项可扩展到分别列出每个文件。此外,这种方法使得易于忘记了签入源代码管理的新的或已删除文件从本地计算机。而不是VisualStudio所维护的项目使用通配符,应该显式包含每个文件。

THE END
1.新三板创新层公司超音速新增软件著作权信息:“C++线程使用工具软件每经讯,据启信宝,新三板创新层公司超音速(833753)新增著作权信息,登记批准日期为2024年12月4日,该作品名称为“C++线程使用工具软件”,作品类别为软件著作权证书,登记号为2024SR1980123。 (记者 曾健辉) 免责声明:本文内容与数据仅供参考,不构成投资建议,使用前核实。据此操作,风险自担。 https://www.nbd.com.cn/articles/2024-12-06/3675939.html
2.12月3号总结皮卡丘和杰尼龟12月3号总结 今天是周二补国庆假期的课程,还是完成软件构造的大作业 任务三:要求管理员登录后可查看不同用户的各项业务使用情况 主要完成最后一个任务并且整理提交https://www.cnblogs.com/ykznlxx/p/18599080
3.新注册《基于最小总能量原理的拓展有限元断裂分析软件V1.0》项目中国中铁新注册《基于最小总能量原理的拓展有限元断裂分析软件V1.0》项目的软件著作权,证券,算法,著作权,中国中铁,基于最小总能量原理的拓展有限元断裂分析软件V1.0https://www.163.com/dy/article/JIMHOKNM051984TV.html
4.SchlumbergerFlaresim2024.2(x64)补丁激活教程软件标签:Schlumberger Flaresim Flaresim 2024破解版是领先的火炬系统的设计、评估、分析和计算的程序!您将获得一个友好的用户界面,并提供完整的选项和参数,能够更准确灵活的评估、建模和设计分析燃烧的整个过程,可计算由耀斑产生的热辐射和噪声,并估计暴露表面的温度。它还可以在熄火条件下对燃烧气体或释放的流体进行http://www.sd173.com/soft/9946.html
5.怎么在QQ中关闭火炬手图标?在QQ中关闭火炬手图标的教程浏览器 腾讯软件 双核浏览器 高速浏览器 电脑浏览器 chrome浏览器 使用QQ时,大家也许会遇到一些问题不知道怎么解决,下面小编为大家带来了在QQ中关闭火炬手图标的教程,希望可以帮助到你们。 QQ火炬手图标关闭方法 1、首先你在手机QQ主界面向下滑动屏幕调出传递我的火炬页面,如图所示。 ?https://mydown.yesky.com/news/87321801.html
6.证券三叶草成品网站源码下载全方位解析,带你轻松搭建专业,长公主墨书白著TXT百度网盘最新章节更新,长公主墨书白著,她在洗碗我在后面老扒最新章节免费阅读,她在洗碗我在后,《顶级暴徒小说免费阅读全》顶级暴徒小说免费阅读全最新章,《翁与小莹浴室欢爱125章》翁与小莹浴室欢爱125章小说最新,《警察锅哥第二季》全集在线免费观看完整版-电视剧频道-,《梦精爱2暧昧播放》完整http://m.ruhrg.com/v/video/20241203/8513842Om57.shtml?20241206=iEfFgwI.scm
7.Flaresim下载安装教程 1、下载解压,得到Schlumberger Flaresim安装程序; 2、运行Install_Flaresim_2023.1-COM+132.msi,阅读同意条款开始安装; 3、选择安装模式,默认即可; 4、等待安装完成,点击finish退出导向; 软件特色 1、可用于海上石油渠道,气体处理厂,炼油厂和化工厂的火炬体系核算 https://www.32r.com/soft/71504.html
8.火炬之光MOD制作工具与说明[官方MOD教学](转的)官方去下载一个(http://www.blender.org),这个软件是遵守GNU开源的跨平台3D软件,支持平台有:linux,ubuntu,FreeBSD,windows 98/ME/NT/2000/2003/xp/vista/7,SGI,SUN,Mac OS X 等等你可以在以上任何平台下制作 《火炬之光》的MOD。同时《火炬之光》可以运行在以上所有平台上,支持OPENGL/DX 2种渲染模式。 https://blog.csdn.net/J_hui/article/details/5587109
9.ESET(NOD32)杀毒软件安装教程,ESETFileSecurity服务器版efsw中山电信火炬机房机房位于中山市火炬区康乐大道47号电信3楼,是中国电信3星级机房,可提供双线接入等业务。 江苏徐州电信机房机房位于江苏徐州市新城区镜泊东路4号,徐州市档案馆东侧,是中国电信3星级机房,可提供双线接入等业务。 江苏常州电信机房机房位于江苏省常州市清凉路108号常州信息港,是中国电信4星级机房,可提供双http://hk.xhisp.net/jiaocheng/2175.html
10.6破解版flaresim6激活版下载v6.0.0.64[网盘资源]5、将Crack文件夹下的“Flaresim.exe”复制到源程序安装目录下并替换,软件即可激活成功。 默认安装目录【C:Program Files (x86)Flaresim 6.0】 6、以上就是本次flaresim 6破解版的软件安装教程,希望能对用户有帮助。 软件功能 1、火炬头系统的压力分布计算 https://www.91rjz.com/pcsoft/74381.html
11.《火炬之光无限》关于搬砖很多小伙伴都积极入坑,但并非那么容易上手,尤其对新手玩家不是很友好,攻略问答中常常会遇到《火炬之光无限》关于搬砖不知如何解决,为此小编给大家收集整理《火炬之光无限》关于搬砖解决办法,感兴趣的快来看看吧。 1.搬砖需要时间投入,是正经当一份工作来做的,这一点就刷掉了百分之95以上的人,一般情况下大概都是当https://www.duote.com/tech/xxyxgl/389580.html
12.3DMAX制作燃烧的火焰效果3D教程3dmax实例3DMAX教程媒体动画3DMAX制作燃烧的火焰效果3D教程 火焰喷射与燃烧效果是 3Dmax 软件中常见的特效之一。制作逼真的火焰效果,可以广泛应用于电影、游戏以及其他动画作品中。下面将详细介绍如何在3Dmax中制作火焰喷射与燃烧效果 GPT4.0+Midjourney绘画+国内大模型 会员永久免费使用!https://www.jb51.net/3DMAX/2556_all.html
13.3d建模视频教程3d建模实战案例软件入门教程免费下载爱给网-海量免费3d视频教程,为创作者提供Softimage XSI,Modbox,Vue,mari,3d_coat,toon_boom_harmony等海量中英文软件教程,免费点播,免费下载https://www.aigei.com/course/3d-other/modo/
14.石油地质行业软件伙伴神Schlumberger、PIPESIM、FracMan、ResForm、Landmark、Midland Valley、Phast、Datamine、CMG油藏数值、地质建模、流体动态模拟、管网模拟、测井解释分析、风险评估、地质解释和勘探分析等石油地质行业软件 ,伙伴神-专业软件|视频教程|资源下载站http://www.cityhbs.com/forum-224-1.html
15.橘子仁橘子仁是一个有着丰富电脑系统软件资源的下载中心,在这里可以找到win7系统、win8系统、win10系统、win11系统等系统下载资源,还有电脑软件下载推荐等内容,提供各种系统软件教程攻略,解决所遇到的电脑系统使用问题,舍虹说给你带来更加全面的电脑系统软件玩法。http://www.jzreng.cn/
16.热门软件教程排行榜2024最新游戏攻略大全好玩游戏免费下载类型:软件教程时间:12-12 韩剧她很漂亮细腻情感与成长之旅:在爱与自我认同中展开 类型:软件教程时间:12-12 【咸鱼之王珍珠的多重用途解析:提升生活品质的秘密武器】 类型:软件教程时间:12-12 大侠立志传无名小村机关宝箱在哪-无名小村机关宝箱位置一览 http://www.z2z1.com/
17.能免费自学办公软件教程的有什么APP推荐豌豆荚能免费自学办公软件教程的有什么榜单为您提供最新能免费自学办公软件教程的有什么大全,这里不仅有能免费自学办公软件教程的有什么安卓版本APP、历史版本应用下载资源,还有类似能免费自学办公软件教程的有什么的应用推荐,欢迎大家前来豌豆荚下载。https://www.wandoujia.com/bangdan/396447/
18.3DMAX教程大全下载(室内设计软件)本书延续了火星时代精品CG图书的一贯优势——配备了大容量、高品质的多媒体教学,能帮助读者更快捷、更直观地掌握3ds Max软件的使用方法和技巧,便于读者系统地对三维动画进行自学,在最短的时间内掌握专业动画制作技术。 全套视频教学光盘内容安排如下: DVD1:包含3ds Max基础知识、菜单工具、基础建模、放样建模、合成http://www.360doc.com/content/12/0512/09/1542087_210449398.shtml
19.《sps仿真软件培训教程(终极版)》.pdf文档全文免费阅读在线看《sps仿真软件培训教程(终极版)》.pdf 北京中加诚信管道技术有限公司 PipePlusTechnologyLtd. SPS管道仿真系统介绍 主要内容 公司介绍 ? 北京凯特伟业科技有限公司 潍坊凯特工业控制系统工程有限公司 北京中加诚信管道技术有限公司 ? Advantica公司(已被GL并购) ? Stoner software介绍 PipePlus Technology Ltd. https://max.book118.com/html/2015/1229/32246832.shtm