MSBuild-Visual Studio博客 https://devblogs.microsoft.com/visualstudio/tag/msbuild网站/ Visual Studio工程团队产品洞察力的官方来源 2024年3月27日星期三01:40:47+0000 英语-美国 每小时 1 https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2018/10/microsoft-Favicon.png MSBuild-Visual Studio博客 https://devblogs.microsoft.com/visualstudio/tag/msbuild网站/ 32 32 新的MSBuild编辑体验 https://devblogs.microsoft.com/visualstudio/treantial-msbuild-editor/ 2024年3月27日星期三15:00:55+0000 https://devblogs.microsoft.com/visualstudio/?p=248389 MSBuild是的基本部分。NET开发经验,但对于新手和经验丰富的开发人员来说,这可能是一个挑战。为了帮助开发人员更好地理解他们的项目文件,并访问需要直接编辑项目文件的高级功能,我们正在发布一个实验性的MSBuild编辑器,该编辑器对MSBuild文件的理解比当前的XML模式要丰富得多。

帖子新的MSBuild编辑体验首次出现于Visual Studio博客.

]]>
MSBuild是的基本部分。NET开发经验,但对于新手和经验丰富的开发人员来说,这可能是一个挑战。为了帮助开发人员更好地理解他们的项目文件并访问需要直接编辑项目文件的高级功能,我们发布了一个实验MSBuild编辑器它对MSBuild文件的理解比当前XML模式所允许的要丰富得多。根据反馈,我们希望默认情况下所有人都可以使用它。NET开发人员。如果您使用的是MSBuild文件,请尝试一下,让我们知道它的运行情况。

这是给谁的?

尽管Visual Studio为管理项目及其设置提供了丰富的UI,但您可能需要直接编辑csproj文件,以访问UI中未公开的某些高级功能。在合并源代码管理中的更改时,您可能还需要直接编辑csproj文件,或者您可能正在编写目标和道具文件以供本地使用或在NuGet包中发布。如果这些场景中有任何一个适用于您,我们希望您对新体验提供反馈。

了解项目文件

新的MSBuild编辑器不仅为MSBuild文件中的XML元素提供了“快速信息”,还提供了MSBuild表达式中的属性、项和元数据的快速信息。快速信息弹出窗口更丰富,具有指向相关文档的深层链接,以及指向其他文件中引用的超链接,这些超链接可能有助于您了解基础目标如何使用该属性或项目。

编译器警告代码快速信息

如果您想了解属性或项的使用方式,可以使用Ctrl-Click或转到定义命令转到定义位置。您还可以使用查找参考命令对所有导入的文件执行精确搜索:

显示“查找引用”结果的工具窗口

在不离开编辑器的情况下编写代码

即使是一位经验丰富的MSBuild作者,我也经常打开文档来查找MSBuild属性、项和元数据的确切名称和允许值。在使用MSBuild编辑器时,我很少这样做,因为它几乎在文件中的任何位置都提供了IntelliSense,文档由其模式支持:

条件表达式中比较器的智能感知

它对NuGet软件包有特殊支持,允许您搜索软件包ID,并查看软件包描述及其NuGet.org页面的链接:

PackageReference项的IntelliSense,显示NuGet.org完成

其他类型也有特殊处理,例如区域性名称:

IntelliSense为NeutralLanguage属性的区域性名称提供完成

MSBuild表达式中有IntelliSense,包括属性函数和项函数:

属性函数的智能感知

编辑器并不局限于在其模式中定义的那些属性和项。它扫描所有导入的MSBuild文件,并为在这些文件中找到的任何属性、项、元数据和目标提供推断完成。更好的是,工具提示具有指向属性或项的超链接,用于:

IntelliSense为目标名称提供补全功能

尽早发现问题

MSBuild Editor的验证不仅仅是XML验证。它将一个类型系统覆盖到MSBuild上,因此您将得到有关格式错误的值(如URL或版本字符串)的错误信息。它对MSBuild表达式格式的理解意味着您可以捕获格式错误的条件和表达式,而无需运行生成。

条件表达式中缺少引号字符的错误波形符号

甚至还有一些Roslyn风格的分析器和代码修复程序。

代码修复为拼写错误的属性名称提供拼写修复

增强MSBuild编辑体验

MSBuild编辑器由新的基于MSBuild的特定于json的模式格式它允许为MSBuild属性、项、项元数据和目标定义文档和类型批注。包含内置架构对于。NET SDK和其他常用的目标和SDK。

然而,您也可以为自己的MSBuild目标编写架构以允许MSBuild编辑器在编辑或使用它们时提供更丰富的体验。如果您是包含构建目标的NuGet包的作者,您可以在NuGet包中发送侧车模式为包的使用者提供更好的MSBuild编辑体验。

问答

问:。扩展有一个GitHub存储库——我可以从源代码构建并贡献吗?

A。当然!只需克隆存储库及其子模块,在VisualStudio中打开,然后按F5。

问:。为什么扩展存储库、名称空间和程序集的名称中有“MonoDevelop”?

A。MSBuild Editor是我最初于2015年3月为MonoDevelop IDE创建的扩展的后代。尽管它在过去的几年中发展了很多,包括移植到Visual Studio,但为了怀旧,我保留了内部名称。

问:。我可以在Visual Studio代码中使用扩展吗?

A。还没有!我目前正在将扩展移植到LSP(语言服务器协议),以便可以在Visual Studio代码扩展中使用。虽然LSP显然是新扩展的选择,但这个代码库可以追溯到VisualStudio代码发布之前。

我们需要您的反馈!

如果您想对扩展进行调整,可以通过在Visual Studio扩展管理器中搜索“MSBuild Editor”或下载来找到它从Visual Studio市场。该扩展当前仅适用于Visual Studio,但将其移植到Visual Studio代码的工作正在进行中。

如果您在扩展中遇到任何问题,请将其发布在GitHub问题页面。该扩展是开源的,欢迎您的贡献。请填写以下信息,让我们了解您的体验本次调查。我们感谢您的反馈,这将有助于指导实验的发展,以及MSBuild Editor是否成为正式支持的部分。NET开发经验。

帖子新的MSBuild编辑体验首次出现于Visual Studio博客.

]]>
Visual Studio工具箱:加速SDK样式的构建。NET项目 https://devblogs.microsoft.com/visualstudio/vs-toolbox-accelerate-your-buildds-of-sdk-style-net-projects网站/ https://devblogs.microsoft.com/visualstudio/vs-toolbox-accelerate-your-buildds-of-sdk-style-net-projects/#comments 2023年6月22日星期四16:00:48+0000 https://devblogs.microsoft.com/visualstudio/?p=243804 VisualStudio工具箱展示通过关注VisualStudio内外的工具,帮助您成为一名更有效率的开发人员。我们的最新一集《VS工具箱》(可在Learn和YouTube上找到)中有Drew Noakes。NET团队。

帖子Visual Studio工具箱:加速SDK样式的构建。NET项目首次出现于Visual Studio博客.

]]>
VisualStudio工具箱展示通过关注VisualStudio内外的工具,帮助您成为一名更有效率的开发人员。我们最新一集的VS工具箱学习YouTube网站)特写来自的Drew Noakes。NET团队。他演示了如何显著减少SDK风格的构建时间。NET项目。

什么是构建加速?

为生成加速。NET SDK风格的项目是一种opt-in功能,它指示Visual Studio仅生成经过修改的项目,而跳过未更改的项目。启用构建加速可以将SDK样式的增量构建时间减少80%。NET项目。

要在解决方案中启用生成加速,请添加或编辑顶级目录。构建.props文件包含以下内容:

<项目><属性组><加速构建InvisualStudio>真的</加速构建InvisualStudio></属性组></项目>

构建加速是如何工作的?

Visual Studio使用MSBuild进行生成。NET项目。调用MSBuild来生成每个项目会带来一些开销,因此VisualStudio使用“快速最新检查”(FUTDC)来避免在需要时调用MSBuild。该FUTDC可以快速确定项目中是否有任何更改,从而导致需要进行构建。

有时,FUTDC确定不需要编译,但确定需要从当前项目或引用的项目复制到输出目录中的一些文件。从历史上看,在这种情况下,FUTDC会调用MSBuild来构建项目,即使不需要编译。这样做是为了确保将文件复制到输出目录。使用生成加速功能,VisualStudio将直接执行这些文件复制,而不是调用MSBuild来执行这些复制。

在VS工具箱秀上了解有关构建加速的更多信息!

查看下面的Visual Studio工具箱一集,看看Build Acceleration的实际应用,然后尝试新功能!

帖子Visual Studio工具箱:加速SDK样式的构建。NET项目首次出现于Visual Studio博客.

]]>
https://devblogs.microsoft.com/visualstudio/vs-toolbox-accelerate-your-buildds-of-sdk-style-net-projects/feed/ 20
在Build 2023上为Visual Studio做好准备:加入成千上万的在线团队! https://devblogs.microsoft.com/visualstudio/get-read-for-visual-studio-at-build-2023-join-tens-of-thousands-online/ https://devblogs.microsoft.com/visualstudio/get-read-for-visual-studio-at-build-2023-join-tens-of-thousands-online/#comments 2023年5月15日星期一15:55:25+0000 https://devblogs.microsoft.com/visualstudio/?p=242787 你准备好迎接2023年的建设了吗?距离微软的旗舰开发人员会议只有一周的时间了,我们有一系列令人难以置信的Visual Studio会议,您绝对不能错过!  

今年,Microsoft Build将采用混合模式,为您提供两全其美的服务–

帖子在Build 2023上为Visual Studio做好准备:<br/>加入成千上万的在线团队!首次出现于Visual Studio博客.

]]>
你准备好迎接2023年的建设了吗?距离微软的旗舰开发人员会议只有一周的时间了,我们有一系列令人难以置信的Visual Studio会议,您绝对不能错过!  

构建2023特色类别

今年,微软Build将推出混合版,为您提供两全其美的体验–5月23日至25日在华盛顿州西雅图的虚拟和现场体验!不能去西雅图吗?别担心!你可以在舒适的办公室里免费在线访问大量实时会话。沉浸在关于Visual Studio、AI开发以及C#和的最新进展的主题注释和会议中。NET! 

此外,我们在大多数的主题演讲、专题讨论和讨论中提供实时聊天,让像您这样的开发人员有机会与来自世界各地的同行联系,并一起参与这些会议。这确实使Build 2023成为全球规模最大、联系最紧密的开发者会议之一,成千上万的参与者在线参与!  

不要错过机会;这个会话生成器正在直播!今天制定您的个性化活动日历,确保您参与到Build 2023的所有精彩活动中。记住,现在还不晚在线注册并参加活动,确保您的位置,加入我们,体验一次难忘的体验,其中充满洞察力、创新和全球联系!  

2023年建造时必须查看主题演讲: 

  • Microsoft Build开幕式主题演讲:Satya Nadella分享了微软如何在这个新的人工智能时代为我们平台上的开发者创造新的机会。 
  • AI Copilot时代:与微软首席技术官凯文·斯科特(Kevin Scott)一起探讨微软和OpenAI的全栈AI平台如何在世界超级计算机Azure的支持下,赋予开发者、初创企业和企业家创新和开发下一代AI应用程序和工具的能力,使不可能成为可能。 
  • 面向微软云开发人员的下一代人工智能:加入微软的Scott Guthrie,云+AI执行副总裁,讨论微软如何利用GitHub Copilot、Azure的OpenAI服务以及生产新一代AI融合应用程序所需的微软云平台和工具等经验,为开发者实现AI创新。 

Build 2023上的Visual Studio会话: 

浏览所有生成会话但这里是一些Visual Studio会话这将深入了解我们目前正在开发和增强的内容,并将重点放在技术上。 

  • 将云和AI的力量注入您的开发工作流:加入Amanda Silver和朋友们,看看开发人员工具中令人激动的新进展,这将使您的团队能够更快地加入新开发人员,并为他们配备获得编码所需的一切,并在编写代码时提高效率。了解如何使用Dev Box和部署环境,以及Visual Studio、Visual Studio代码和GitHub Copilot来提高生产力。 
  • Visual Studio中的高级开发人员提示和技巧: 探索最新功能、预览更新和内部提示,以优化工作流、自动化任务并提高您的编码技能。了解智能代码导航、GitHub操作、加速调试、分析器技术、开发隧道等。 
  • 使用Microsoft Dev Box在云中开发:了解Microsoft Dev Box如何在云中提供按需、基于任务的工作站,这些工作站由开发团队预先配置,并由中央IT提供安全保护。通过云基础结构、集中安全性和深入的Visual Studio集成来简化您的工作流。 
  • 考虑可访问性的开发,问答:加入Visual Studio PM团队,讨论可访问性和包容性开发实践的价值。了解音频提示和拼写检查器等功能如何为残疾用户带来革命性的体验,并参与对话,以从我们以客户为导向的旅程中获得见解。 
  • 在Visual Studio中提高工作效率的五个提示:一个快乐的开发人员就是一个高效的开发人员。学习一些提示和技巧,以提高您在Visual Studio中的工作效率,这样您可以更快地编写代码,并减少花费在无聊的重复工作上的时间。这是一个快速演示,其中包含了一些提示,您可以在离开会话后立即使用。 
  • 充分利用GitHub Copilot的实用技巧:探索GitHub Copilot的工作原理、最佳实践,以及AI可以为开发人员实际做什么。了解人工智能只有与使用它的开发人员一样好,以及好奇心、创造力和批判性思维如何最大限度地发挥人工智能辅助编码的优势。 

与斯科特·汉塞尔曼(Scott Hanselman)一起闲逛,他是粉丝的最爱! 

图为2023年建造时的斯科特·汉塞尔曼

开发人员与Scott Hanselman和朋友们一起分享快乐 

与Hanselman和朋友们一起探索过去五年Windows开发人员的创新,并预知即将推出的功能,这些功能将使Windows对所有技能水平的开发人员更加强大。 

立即注册! 

准备好加入数以万计的开发人员参加Build 2023了吗?不要错过这些激动人心的课程!单击下面的链接,立即注册并确保您的位置,与全球开发者社区一起体验Build 2023。抓住机会,在这个令人难以置信的活动中学习、联系和成长! 

注册Build 2023并免费在线加入我们! 

保持信息畅通! 

通过关注我们,及时了解最新新闻和公告YouTube网站,推特,LinkedIn链接,抽搐、和上的Microsoft学习 

帖子在Build 2023上为Visual Studio做好准备:<br/>加入成千上万的在线团队!首次出现于Visual Studio博客.

]]>
https://devblogs.microsoft.com/visualstudio/get-ready-for-visiona-studio-at-build-2023-join-tens-of-thusands-online/feed(https://devblogs.microsoft.com/visualstudio/get-ready-for-visiona-studio-at-build-2023-join-tens-of-thusands-online/feed)/ 1
Visual Studio系列欢迎您参加Microsoft Build 2021 https://devblogs.microsoft.com/visualstudio/the-visiona-studio-family-welcomes-you-at-microsoft-build-2021(https://devblogs.microsoft.com/visualstudio/the-visiona-studio-family-welcomes-you-at-microsoft-build-2021)/ https://devblogs.microsoft.com/visualstudio/the-visual-studio-family-welcomes-you-at-microsoft-build-2021/#评论 2021年5月18日星期二17:30:42+0000 https://devblogs.microsoft.com/visualstudio/?p=232617 欢迎加入我们最大的开发人员大会Microsoft Build,探索技术方面的最新进展。今年,Build将于太平洋时间2021年5月25日星期二上午8:30开始(请参阅您所在的时区)。您可以期待一场充满激动人心的产品发布、,

帖子Visual Studio系列欢迎您参加Microsoft Build 2021首次出现于Visual Studio博客.

]]>
来加入我们Microsoft内部版本,我们最大的开发人员会议,探讨技术的新特性。今年,Build将于太平洋时间2021年5月25日星期二上午8:30开始(在您的时区查看). 您可以期待一场充满激动人心的产品发布、现场主题演讲、精彩演示的分组会议,以及来自不同产品团队的专家的问答,这些活动可以跨越多个时区进行。

如果您尚未注册,请务必访问构建主页免费注册并浏览议程和会议细节。

我们知道,过去一年对每个人都是一个挑战,包括开发人员。我们比以往任何时候都更加努力地为开发人员提供工具和服务,以提高他们的生产力,无论是使用何种语言还是使用何种平台。在今年的Build大会上,我们安排了一组很棒的会议,涵盖Visual Studio系列、GitHub和。净利润。无论您是一名初学者,还是一名经验丰富的开发人员,希望提高您的技能,请在此次数字活动中与我们一起学习、联系和编写代码。

以下是Visual Studio、VS代码和的会话列表。NET团队,我们鼓励您参加。

开始时间(太平洋夏令时) 会话名称 扬声器

5月25日星期二上午9:30
(在您的时区查看)

重新运行:5月26日星期三上午1:30
(在您的时区查看)

利用Microsoft的端到端开发人员平台提高开发人员速度

会话重新运行

阿曼达·斯尔沃
多诺万·布朗
朱莉·施特劳斯

5月26日星期三上午8:30
(在您的时区查看)

重新运行:5月27日,星期四,12:30 AM
(在您的时区查看)

微软:与Scott Guthrie、Scott Hanselman、Rajesh Jha和Kevin Scott共同聚焦

会话重新运行

斯科特·格思里
汉塞尔曼
拉杰什·杰哈
凯文·斯科特

5月26日星期三上午11:00
(在您的时区查看)

重新运行:5月27日,星期四,凌晨3:00
(在您的时区查看)

Visual Studio代码中的新增功能

会话重新运行

萨纳·阿贾尼
杰弗里·缪

5月26日星期三下午12:00
(在您的时区查看)

重新运行:5月27日,星期四,4:00 AM
(在您的时区查看)

现代应用程序开发的未来。净值

会话重新运行

斯科特·亨特

5月26日星期三下午3:00
(在您的时区查看)

重新运行:5月27日星期四上午7:00
(在您的时区查看)

使用GitHub和Azure扩展DevSecOps

会话重新运行

拉瓦尼亚·卡萨拉巴达
史蒂文·穆拉夫斯基

5月26日星期三下午12:00
(在您的时区查看)

询问专家:Visual Studio团队

米卡·杜蒙特
德斯·克里斯德森
安迪·斯特兰
Gherfal Taysser公司
尼克·乌伦赫特

5月26日星期三下午1:00
(在您的时区查看)

问专家:现代应用程序开发的未来。净值

斯科特·亨特
德米特里·利亚林
玛丽亚·纳加加
大卫·奥尔蒂诺
丹尼爾羅斯
马德斯·托格森
杰夫·弗里茨

5月27日星期四上午5:00
(在您的时区查看)

咨询专家:使用GitHub和Azure扩展DevSecOps

拉瓦尼亚·卡萨拉巴达
史蒂文·穆拉夫斯基

5月26日星期三上午7:30
(在您的时区查看)

使用ASP创建web API。NET核心

谢恩·博伊尔
加洛韦

5月26日星期三下午1:00
(在您的时区查看)

Fusion Development 101:专业开发人员要点

马特·苏库奇
贾斯汀·尤

5月27日星期四上午5:00
(在您的时区查看)

使用Blazor和web Assembly构建您的第一个web应用程序

杰夫·弗里茨

5月25日星期二下午2:30
(在您的时区查看)

开始使用流行的编程语言:Python和C简介#

克里斯托弗·哈里森
詹姆斯·蒙特马格诺

5月25日星期二上午10:30
(在您的时区查看)

开发人员职业生涯的核心工具:Visual Studio代码和GitHub简介

萨纳·阿贾尼
米甘·刘易斯

*5月25日星期二上午10:00
(在您的时区查看)

增压显影剂速度

Nicole Forsgren医生
埃里卡·埃尔利

*5月26日星期三上午2:15
(在您的时区查看)

使用Visual Studio代码进行基于容器的开发

克里斯托夫·马蒂

*5月26日星期三上午10:45
(在您的时区查看)

Visual Studio 2022第一次预览中的内容

德斯·克里斯德森

*5月26日星期三上午11:30
(在您的时区查看)

TypeScript的新增功能

丹尼尔·罗森瓦瑟

*5月26日星期三凌晨2:45
(在您的时区查看)

在云中开发,为云提供代码空间和Kubernetes桥接

尼克·格林菲尔德

*5月26日,星期三,4:30 AM
(在您的时区查看)

Visual Studio 2019中改进的容器工具

乌切·恩卡迪

*5月27日星期四上午5:30
(在您的时区查看)

Visual Studio 2019中的现代测试增强功能

肯德拉港
曼迪·沃利

随需应变

.NET 6深潜;有什么新功能和即将推出的功能

斯科特·亨特
德米特里·利亚林
玛丽亚·纳加加
大卫·奥尔蒂诺
丹尼爾羅斯
马德斯·托格森
达斯汀·坎贝尔
斯蒂芬·哈尔特

随需应变

增加你的。使用Visual Studio实现NET生产力

米卡·杜蒙特
肯德拉港

随需应变

引入开发人员Velocity实验室以改善开发人员的工作和福利

尼科尔·福斯格伦

随需应变

在Visual Studio中增强Java脚本体验

加布里埃尔·克雷夫科尔

*这些片段不是Build会话目录的一部分,但将在不同的中断会话之间播放,因此在会话开始时调到Build livestream

数字Swag:我们还可以下载很棒的数字Swag

帖子Visual Studio系列欢迎您参加Microsoft Build 2021首次出现于Visual Studio博客.

]]>
https://devblogs.microsoft.com/visualstudio/the-visual-studio-family-welcomes-you-at-microsoft-build-2021/feed/ 7
2015年9月热门新闻 https://devblogs.microsoft.com/visualstudio/top-news-2015年9月/ 2015年10月27日星期二10:00:00+0000 https://blogs.msdn.microsoft.com/visualstudio/2015/10/27/top-news-for-2015年9月/ 大家好!每个月我们都会分享上个月的一些头条新闻,下面是我们9月份的总结。
开源跨平台MSBuild:继续开源跨平台。NET的故事已经开始了。NET核心和。NET编译器平台(“Roslyn”),

帖子2015年9月热门新闻首次出现于Visual Studio博客.

]]>
大家好!每个月我们都会分享上个月的一些头条新闻,下面是我们9月份的总结。

开源、跨平台MSBuild:继续开源、跨平台。NET的故事已经开始了。NET内核和。NET编译器平台(“Roslyn”),正如尼古拉·蒂尔曼(Nikolai Tillmann)解释的那样,MSBuild正在加入娱乐圈。来源是现在在GitHub上,并在MSBuild实现时向贡献开放。NET核心。

GitHub上的MSBuild开源

 

跨平台应用程序:Apache Cordova、Xamarin和Unity等选项在Visual Studio中都有很好的支持。构建您的第一个端到端跨平台应用程序–第4部分–iOS应用程序,Shashank Bisen继续他的Xamarin之旅,这已经涵盖了Windows和Android。在Channel9上,Office Dev Show第九集Richard diZerega演示了如何构建与Office365集成的Cordova应用程序。和Alex Lian在Unity的博客上分享关于Unity 5.2–通往Unity Services的门户(如Unity Ads、Unity Cloud Build、Unity Analytics和Unity Multiplayer),以及Unity 5.2如何支持Windows 10 Universal Windows平台与Visual Studio的紧密集成。然后检查一下有什么新功能。Win10 Tools 1.1中的NET和UWP理查德·兰德(Richard Lander)。

 

微软热爱Linux:人们一直在问“微软在Linux上做什么?”深度探索#1:Hyper-V上的Linux和FreeBSD简介除了Michael为数据中心描述的工作之外Azure上的Linux支持米基·麦克唐纳曾写过关于如何勾搭Visual Studio Code for Linux与Unity的实验Linux构建谈到Visual Studio代码,Sean McBreen分享了这一点其文档现在位于GitHub上.

微软热爱Linux

码头和集装箱:当你向开发人员介绍Linux时,你可能会进入一个关于Docker和容器的对话。如果你想抓住这个话题,这个Visual Studio工具箱与Robert Green和Steve Lasker合集介绍了所有基础知识,以及如何在Windows和Linux上利用Visual Studio中的容器。

罗伯特·格林和史蒂夫·拉斯克谈论码头和集装箱

ASP的夏天。净值:有四个ASP版本。NET过去几个月,杰弗里·弗里茨(Jeffrey Fritz)为我们提供了所有最新信息。最近的NET web开发,包括ASP。NET4.6,ASP的继续测试版。NET5和激动人心的新WebHooks扩展。有一个上的全系列WebHooks帖子。NET Web开发博客来自Henrik Nielsen,从他的介绍并继续发布有关与Slack、Salesforce和Instagram等产品集成的详细帖子。如果你准备深入ASP。NET 5,开始使用Scott Hanselman关于微软虚拟学院的介绍视频.

剪辑图像008

一些旧的,一些新的最后,我们有一个小的对比研究。对于老人,吉姆·斯普林菲尔德分享了振兴Microsoft C/C++编译器,注意到1982年的源代码中仍然有注释。我特别喜欢这篇文章,因为几年后我第一次遇到了这个编译器。至于新的,事实上也与非常古老的东西有关,花点时间引入U-SQL–一种简化大数据处理的语言作者Michael Rys,就在Visual Studio博客上。Michael解释说,当您开始使用大数据时,现有的基于SQL的语言在可扩展性方面存在不足,而过程语言在伸缩性等方面也存在不足。因此,U-SQL将两者结合在一起。

要查看我们最近共享的其他内容,请查看2015年8月最新消息2015年7月最新消息,以及最近在Visual Studio博客.

享受吧!

剪辑_图像010

克雷格·布罗克施密特,Visual Studio高级内容开发人员

@克雷布罗

Kraig自1988年以来一直在微软工作,一直致力于帮助开发人员编写优秀的软件。目前,他专注于与Xamarin和Cordova开发跨平台移动应用程序的内容。他为MSDN杂志撰稿,是使用HTML、CSS和JavaScript编写Windows应用商店应用程序(两个版本)和OLE内部(如果你还记得的话,有两个版本)来自微软出版社,偶尔会在kraigbrockschmidt.com网站,可以在各种开发人员会议上找到。

帖子2015年9月热门新闻首次出现于Visual Studio博客.

]]>
MSBuild现在是Visual Studio的一部分! https://devblogs.microsoft.com/visualstudio/msbuild-is-now-part-of-visual-studio/ 2013年7月24日星期三08:00:00+0000 https://blogs.msdn.microsoft.com/visualstudio/2013/07/24/msbuild-is-now-part-of-visual-studio/ 我们对MSBuild for Visual Studio 2013进行了一些令人兴奋的更改,包括重新思考MSBuild、Visual Studio和之间的基本关系。NET Framework.MSBuild已作为的组件提供。NET框架自2005年首次引入以来。NET 2.0,

帖子MSBuild现在是Visual Studio的一部分!首次出现于Visual Studio博客.

]]>
我们对MSBuild for Visual Studio 2013进行了一些令人兴奋的更改,包括重新思考MSBuild、Visual Studio和之间的基本关系。NET Framework.MSBuild已作为的组件提供。NET框架自2005年首次引入以来。NET2.0,尽管它首先是一个主要由VisualStudio开发人员使用的开发工具。从Visual Studio 2013开始,2013版本的MSBuild将作为Visual Studio的一部分提供,而不是。NET框架。此转换允许我们更快地发展MSBuild。

此版本的大多数重要更改都源于MSBuild向Visual Studio的过渡:

  • MSBuild和VB/C#编译器现在作为一个独立的软件包Microsoft®Build Tools提供。此软件包随Visual Studio 2013一起安装。
  • 我们正在简化MSBuild的版本控制故事。每个版本的Visual Studio都有相应版本的Microsoft®构建工具包括MSBuild、VB/C#编译器以及构成2013年的常见任务和目标工具集。不再有任何子工具集版本。Visual Studio 2013将专门使用2013 MSBuild和VB/C#编译器(程序集版本12.0)以及2013工具集(工具版本12.0)。
  • MSBuild为命令行生成选择工具集版本的方式现在与Visual Studio生成项目的方式相同。如果您的项目是在VS中构建的,那么它们将从命令行进行构建。不再手动覆盖Toolset版本并查找缺少的依赖项。
  • MSBuild依赖于最新的Framework。NET 4.5.1。

此更改并不意味着我们将从中删除以前提供的MSBuild版本。NET Framework.MSBuild 4.5仍然是的一部分。NET 4.5.1 Framework。Visual Studio 2012仍将使用该框架的MSBuild,并且能够生成从Visual Studio 2013到Visual Studio 2012的往返项目。然而,未来的创新、新功能和对新项目类型的支持将不会移植到Framework MSBuild。

新的Microsoft®Build Tools包

MSBuild现在是Visual Studio的一个组件,将与Visual Studio的所有SKU一起提供,包括Team Build,因此如果您使用Visual Studio,那么您的所有生成需求都应该得到满足。我们了解到,您可能有很多原因希望在不需要安装Visual Studio的情况下使用MSBuild和其他生成工具,因此我们将这些工具作为一个名为Microsoft®build tools的新独立包提供。该包包括MSBuild和VB/C#编译器。可以获取新包在这里在MSDN下载中心。

这个独立包非常适合于需要对构建过程进行精细控制的构建服务器。使用这种新的方法来演化MSBuild,您可以更好地控制生成行为,并且不会受到影响。NET Framework版本。

MSBuild及其工具集现在的Visual Studio版本

我们计划从现在起在每个版本的Visual Studio中改进我们的构建工具。每个版本的Micrsoft®构建工具都将有一个新版本的MSBuild、VB/C#编译器和工具集。他们将一起发布。Visual Studio将以独占方式使用其相应版本的MSBuild。例如,Visual Studio 2013将专门使用MSBuild 2013和ToolsVersion=“12.0”。为了与Visual Studio的版本控制保持一致,我们将MSBuild的程序集版本从4.0更新为12.0。

MSBuild的新二进制文件位置

单独装运MSBuild。NET Framework要求我们重新定位MSBuild和VB/C#编译器。

在32位计算机上,可以在以下位置找到它们:C: 程序文件MSBuild12.0bin

在64位机器上,32位工具将位于:C: 程序文件(x86)MSBuild12.0bin

以及以下64位工具:C: 程序文件(x86)MSBuild12.0binamd64

为了帮助在这个新位置找到工具,我们向Microsoft添加了GetPathToBuildToolsFile方法。生成。公用设施工具位置助手类。示例调用:

工具位置助手.GetPathToBuildToolsFile(获取生成工具文件的路径)(

“msbuild.exe”,“12.0”,

DotNet框架体系结构.位64);

 

中有一个新属性工具位置助手,CurrentToolsVersion,它映射到最新版本的生成工具。

Visual Studio 2013、Visual Studio 2013开发人员命令提示符和Team Build已更新为在执行生成工具时查看这些新路径,因此默认情况下,正常生成将使用Microsoft®Build tools 2013。如果您已经自定义了生成基础结构,则需要更新它以查看这些新路径,以使用最新版本的MSBuild。

$(MSBuildToolsPath)和$(MSBuildBinPath)继续指向安装MSBuild的目录,但我们在测试期间发现,我们的一些目标文件也使用这些属性指向中的组件。NET Framework,它严格来说不是MSBuild的一部分,并且没有随我们一起移动到新位置。我们不认为这种情况太常见,但如果您有自定义生成过程,并且遇到任何错误,表明在“C:Program Files(x86)MSBuild12.0bin”下找不到某些内容,则最好首先使用$(MSBuildToolsPath)。

对于要引用中保留的组件的生成过程。NET Framework,我们引入了一个新参数$(MSBuildFrameworkToolsPath),它指向。NET Framework 4.5.1目录。

MSBuild 2013中的命令行生成和资源兼容性

在MSBuild 2013中,我们正在消除命令行生成与Visual Studio中的生成之间长期存在的不连续性。Visual Studio始终重写工具集版本由项目文件指定,以支持与生成项目的Visual Studio版本相对应的工具集。此技术允许您往返在不同版本的VisualStudio中创建的项目,而无需在计算机上同时安装两个版本的Visual Studio。

MSBuild 2013也为命令行生成带来了同样的技术。对于大多数项目,这将大大简化确保所有工具集依赖项可用的过程。一般来说,在VisualStudio中生成的任何项目都将在命令行上生成,只需最少的干预。如果您的生成过程对项目中的特定ToolsVersion敏感,我们提供了许多方法来禁用此新行为,但请注意,编译大多数ToolsVersion 4.0项目将需要在计算机上与MSBuild 2013一起安装Visual Studio 2012。

引用MSBuild 2013

引用最新的MSBuild与中的一样简单。净额4.5。由于MSBuild 2013不是Framework组件,因此它现在显示在程序集的“扩展”选项卡中。MSBuild的最新程序集版本为12.0.0.0,程序集(如Microsoft)。生成。将其版本号附加到名称后的实用程序现在以v12.0.dll为后缀。如果应用程序引用了根据旧版本的MSBuild编译的任务或其他程序集,则应使用绑定重定向如果引用最新版本的MSBuild。

前进

我们希望,随着Microsoft®Build Tools包的推出,我们正在对MSBuild 2013进行的更改将帮助我们更好、更快地满足客户的要求,并建立对我们构建工具未来的可预测性和信心。我们很乐意听取您对Microsoft®Build Tools未来的意见、担忧和建议。

图5582图像拇指5D0F78AE 威尔·别克–Visual Studio IDE项目和构建程序经理

威尔是Visual Studio的长期用户,最近加入了Microsoft的Visual Studio项目和构建团队。自从他开始使用Visual Basic 4编程以来,他一直热爱编程、软件开发和硬件黑客。他很高兴有机会开发多年来一直使用的开发工具。

帖子MSBuild现在是Visual Studio的一部分!首次出现于Visual Studio博客.

]]>
使用Visual Studio调试MSBuild脚本(3) https://devblogs.microsoft.com/visualstudio/debugging-msbuild-script-with-visual-studio-3/ 2010年7月8日星期四20:19:00+0000 https://blogs.msdn.microsoft.com/visualstudio/2010/07/08/debugging-msbuild-script-with-visual-studio-3/ 在我的上两篇文章(这里和这里)中,我展示了如何启用不受支持的MSBuild调试器来调试在命令行上使用MSBuild.exe启动的生成。在最后一篇文章中,我将提到其他一些变体。
请注意,这个博客相当狭窄,

帖子使用Visual Studio调试MSBuild脚本(3)首次出现于Visual Studio博客.

]]>
在我最近的两篇帖子中(在这里在这里)我演示了如何启用不受支持的MSBuild调试器来调试使用MSBuild.exe在命令行上启动的生成。在最后一篇文章中,我将提到其他一些变体。请注意,这个博客相当狭窄,所以有些截图可能很难看到–您可以单击它们来查看完整的版本。

场景3:在命令行上调试解决方案文件

在前面的示例中,我针对一个项目文件启动了msbuild.exe。您可能想从解决方案文件开始。如果这样做,可能会出现如下错误:微软。生成。共享。内部错误异常:MSB0001:内部MSBuild错误:不匹配的假期为C:UsersdanmoseDocumentsvisual studio 2010 ProjectsWindowsFormsApplication1WindowsFormsApplication1.sln.metaproj应为C:UsersdanmoseDocumentsvisual studio 2010项目WindowsFormsApplication1WindowsFormsApplication1.csproj(2,1)解决方法如下。首先,设置环境变量MSBUILDEMITSOLUTION=1。然后按常规方式构建解决方案:如果需要,可以在它开始构建项目后取消它。在解决方案文件旁边,应该会看到一个扩展名为“.sln.metaproj”的文件。这实质上是转换为MSBuild格式的解决方案文件。现在执行通常的调试过程,但这次针对这个sln.metaproj文件而不是原始解决方案文件启动msbuild.exe。

场景4:多处理器构建

当您调试构建过程或任务时,如果一次只有一个项目在构建,那么执行起来会容易得多,并且您可能会在任何时候都这样做。此外,调试会大大减慢构建速度,因此它可能无法帮助您诊断计时问题。然而,如果出于某种原因,您确实需要调试多处理器构建,这是可能的。正如您可能知道的那样,MSBuild启动子进程以一次生成多个项目,并且它们会持续一段时间,以便为另一个生成做好准备。/debug开关不会传播到它们。要使其工作,请首先终止所有仍处于活动状态的msbuild.exe进程。然后在命令窗口中设置环境变量MSBUILDDEBUGGING=1。该环境变量等效于/debug开关,但与开关不同,它将传播到任何子进程。现在,从这个命令窗口中,像往常一样使用/debug开关启动msbuild.exe。所有的工作方式都与以前一样,但当每个子进程开始工作时,您将得到一个新的JIT提示符,并且您必须为每个子进程使用Visual Studio的新实例。例如,我在这里构建一个解决方案,使用上面提到的.metaproj工作区。在第一个JIT提示符处附加,我可以看到我正在.metaproj本身中启动:形象如果我点击继续(F5),我将到达下一个项目的顶部,并像往常一样停在那里。在调用堆栈窗口中,我可以看到解决方案调用了该项目,我可以双击调用堆栈中的下部框架来查看它是在何处执行的-当然,这是一个MSBuild任务:形象当我停在这里时,我再次收到JIT提示符。这次是针对我的解决方案中的另一个项目,该项目已经开始在另一个msbuild.exe进程中并行加载。我将像以前一样仔细检查JIT提示,并选择启动VisualStudio的新实例。这反过来又会在另一个项目的顶部出现。我现在看到的是:形象VisualStudio支持同时调试多个进程,这将更加方便,但我认为JIT启动程序不会允许您这样做。如果您有很多子进程,它可能会变得相当麻烦。请记住,“/m”开关默认为与CPU相同的进程数,因此您可能希望使用“/m:2”来减少进程数。

场景5:在Visual Studio中加载项目时调试项目

当我编写原型时,还可以调试VisualStudio中加载的项目的评估和构建。不幸的是,在经历了这个场景之后,我很遗憾地发现它在VisualStudio2010的发布版本中有些损坏。在我的实验中,当加载项目时,调试会一直进行到第一次评估,但随后会遇到错误并终止。由于这是一个未经测试的功能,因此总是有可能在未检测到的情况下发生故障,而这显然就是这里发生的情况。考虑到这一点,您很可能不得不坚持使用msbuild.exe。不过,我将继续解释一下如何在VisualStudio中实现这一点,以防您的运气比我好。按照我的第一个岗位并像在上一个场景中那样杀死MSBuild.exe的所有延迟实例。确保环境变量MSBUILDDEBUGGING为设置并打开第一个VisualStudio作为调试器。您可以从开始菜单执行此操作。如前所述,确保在此实例中打开了Just-My-Code。打开命令提示符并再次设置环境变量MSBUILDDEBUGGING=1。然后从该命令提示符启动Visual Studio,很可能是使用类似“%ProgramFiles%Microsoft Visual Studio 10.0Common7IDEdevenv.exe”的命令启动它。第二个实例是调试对象,您将把项目加载到其中。返回调试器进程,并连接到该调试器,一如既往地选择“Managed(v4.0)”引擎。在此调试器进程中,打开要开始调试的项目或目标文件。确保使用“open File”将其打开到XML编辑器中,而不是将其作为实际项目加载。这次调试可能不会在第一行自动开始,所以请在要开始的地方设置一个断点。我在XML编辑器中打开了之前使用的“WindowsFormsApplication1.csproj”文件,并在第一行设置了一个断点,以便在首次加载项目时命中它。现在在被调试对象中以正常方式打开您的一个或多个项目,您应该会看到您的断点被击中。再往前走一步,对我来说,VisualStudio会终止。

演练结束

现在我已经向您展示了MSBuild调试器的所有功能,希望您能试用它。如果你有反馈,请在这里发布。特别是,能够调试在VisualStudio中加载的项目有多重要?此外,正如您所看到的,MSBuild从启动时就必须处于“调试模式”-不可能进入正在进行的常规生成并附加到它。能够这样做很重要吗?最重要的是,这对您有多大用处,您遇到的错误和限制有多大问题?谢谢你的阅读Visual Studio项目和生成开发主管

帖子使用Visual Studio调试MSBuild脚本(3)首次出现于Visual Studio博客.

]]>
使用Visual Studio调试MSBuild脚本(2) https://devblogs.microsoft.com/visualstudio/debugging-msbuild-script-with-visual-studio-2/ 2010年7月8日星期四16:52:55+0000 https://blogs.msdn.microsoft.com/visualstudio/2010/07/08/debugging-msbuild-script-with-visual-studio-2/ 在我的上一篇文章中,我展示了如何为MSBuild脚本启用隐藏的VisualStudio调试器,并通过单步执行C#项目的求值来演示它。在本文中,我将继续调试该项目的实际构建。

帖子使用Visual Studio调试MSBuild脚本(2)首次出现于Visual Studio博客.

]]>
在我的上一个帖子,我演示了如何为MSBuild脚本启用隐藏的Visual Studio调试器,并通过单步执行C#项目的求值演示了它。在本文中,我将继续调试该项目的实际构建。

请注意,这个博客相当狭窄,所以有些截图可能很难看到–您可以单击它们来查看完整的版本。

从上一篇文章结束的地方开始,我将在Microsoft中设置一个断点。CSharp.targets位于<Csc>任务标记上。编译器将在那里运行。然后按F5向它跑去。

形象 

理想情况下,我可以在封闭的<Target>标记上设置断点,但不幸的是,这里有一个错误:您不能这样做。作为一种解决方法,当您到达目标主体中的第一个标记时,可以检查目标属性的值。如果目标的条件为假,或者如果它的输入和输出是最新的,因此它会跳过,那么就不那么简单了。你必须通过提前达到目标来解决这个问题。

我希望能够评估那里任务的情况,但因为它是可分批处理的它可能有多个结果:我以前使用的EvaluateCondition委托不会接受它。如果这是任务上的一个参数,我可能会单步进入任务的代码本身以查看值。由于这是一个条件,我可能会直接查看项目列表上的元数据,或者以某种方式查询对象模型。

不过,类似Sources的价值在这里很容易评估:

形象

现在我想进入任务实现。

你可能认为此时,你可以简单地介入(F11)。但是,您不能这样做——MSBuild将在另一个线程上运行此任务。要知道在这里正确地跳转线程,调试器必须支持这种调试所称的“因果关系”,因为它对MSBuild一无所知,所以它不知道。

不过,完成任务很容易——在任务中设置一个断点,然后运行直到命中为止。

我有Csc任务的源代码,所以我在WarningLevel属性的setter上设置了一个断点,并执行了Continue(F5)。我可以看到任务在这里获取“4”作为该属性的值。我可以像调试任何其他C#代码一样调试此代码,单步执行方法等等。

形象

为了使用XML,我将在其中设置一个断点并运行它,这与我进入C#时使用的方法相同,但使用的是相反的方法。这是任务完成后的下一个标记:

形象

我在这里以Csc为例,但您通常要调试自定义任务(或者可能是记录器)。只需确保程序集未优化:因为您启用了Just-My-Code,否则它将无法调试。如果您只能访问优化的代码,可以暂时关闭Just-My-Code。

这里有一个CallTarget标记:您可以单步执行这些标记,就像导入一样,它们看起来就像调用堆栈上的一个新框架——尽管与导入不同,但这是正确的语义。

现在调试器的最大限制(bug)可能是您无法看到目标中的项和属性更改。例如,由于上面的行,此时@(_CoreCompileResourceInputs)应该为空,但立即显示的窗口告诉我它不是:

形象

当你通过目标时,你可以看到变化。

场景2:调试包含多个项目的生成

通常,一个构建中有多个项目。我已将此项目的项目引用添加到另一个项目。我在该项目的顶部设置了一个断点,并运行到该断点:

形象

调用堆栈的底部是Microsoft中的点。Common.targets在构建WindowsFormsApplication1的早期调用WindowsFormsApplication2的位置。

在我的下一篇帖子中,我将报道

  • 调试多处理器版本
  • 调试加载到Visual Studio中的项目的内部版本

到时候见!

Visual Studio项目和生成开发主管

帖子使用Visual Studio调试MSBuild脚本(2)首次出现于Visual Studio博客.

]]>
使用Visual Studio调试MSBuild脚本 https://devblogs.microsoft.com/visualstudio/debugging-msbuild-script-with-visual-studio/ 2010年7月6日星期二15:44:08+0000 https://blogs.msdn.microsoft.com/visualstudio/2010/07/06/debugging-msbuild-script-with-visual-studio网站/ 当我们开始4.0开发时,我对MSBuild博客的读者进行了民意调查,以找出对他们来说最重要的功能。调试是第一位的,这让我们非常惊讶。仔细想想,这是有道理的。在我们的团队中,我们已经在阅读XML和理解日志方面变得非常熟练,以至于很容易忘记这有多么困难,尤其是对于新手来说。

帖子使用Visual Studio调试MSBuild脚本首次出现于Visual Studio博客.

]]>
当我们开始4.0开发时,我对MSBuild博客的读者进行了民意调查,以找出对他们来说最重要的功能。调试是#1这让我们感到非常惊讶。仔细想想,这是有道理的。在我们的团队中,我们在阅读XML和理解日志方面变得非常熟练,以至于很容易忘记这有多困难——尤其是对新人来说。调试大师约翰·罗宾斯,还请求了Visual Studio集成调试器.

快进到今年早些时候的4.0版本,我们解决了我统计的16个请求中的7个。我们必须平衡这些请求与VisualStudio本身对MSBuild的需求。它对MSBuild有两个主要要求:启用VC++将移至MSBuild(#5请求),并帮助实现更强大和更细粒度的多目标定位.

事实证明,这两个功能反过来又需要许多其他功能,其中大多数都是博客投票中受欢迎的请求。我们添加了使用内联代码定义任务的功能(#7–请参阅powershell示例)一个新的综合对象模型(分为三部分,,,),已改进性能在许多情况下具有可扩展性(#8-和在这里),财产项目功能(#9–尽管目前不可扩展),通过执行文件系统截取进行准确的自动依赖项检查(#11),再加上一些小的语法添加(标签、,导入组,通过通配符导入)和更可配置的构建引擎(如参见在这里,在这里,以及在这里),加上更容易构建扩展性还有一些性能诊断.

我们没有不幸的是,我们有时间解决将解决方案文件转换为MSBuild(#3)的问题亲爱的喜欢这样做–也不喜欢添加Visual Studio集成调试器(#1)。

至少,不支持!

迈克·斯塔尔向我们展示了一个独创的反射极限思想,这使得创建具有真正托管代码调试器的许多功能的MSBuild特定调试器变得更加可行。在休假期间,我编写并签入了代码来完成这项工作。不幸的是,我们无法及时完成这项任务,以制定4.0的时间表。

因此,它位于产品中,但默认情况下处于禁用状态。它确实有效,只是没有得到支持或文档记录,并且有一些限制和错误:它可能很慢,并不总是很漂亮,至少在一种情况下,它有点不准确。这篇博文是关于如何使用它的“非官方”文档,希望它会有用。虽然它不受支持,但我们欢迎Connect反馈,但它可能会转移到我们的积压工作中,而不是立即修复。在这篇博文的评论中添加任何错误报告和反馈也是一个好主意。

调试演练

我将依次浏览每个调试场景。

在开始之前,请短暂打开Visual Studio,并确保已启用“仅我的代码”。这一点至关重要:

形象

这里有很多截图,但这个博客很窄,所以有些截图被扭曲了——你可以点击它们查看完整的版本。

场景1–仅限命令行

首先,通过将HKEY_LOCAL_MACHINESOFTWAREMicrosoftMSBuild4.0键设置为debuggerenabled=true,在MSBuild.exe上启用未记录的“/debug”开关,就像我在提升的Visual Studio提示符中使用reg.exe所做的那样:

形象

假设C:是您的系统驱动器,您现在应该有这些键。

形象

运行MSBuild/?你会看到新的开关出现了。

新交换机

我们现在可以调试了。

通常,您会调试一些自定义或编写的构建过程,但为了便于说明,我将调试一个全新的C#Windows窗体项目。我将使用/debug开关构建它,它将立即停止:

形象

在我的情况下,我得到提示符提升,然后点击Yes:

形象

然后我得到了标准的JIT调试提示。确保选中“手动选择调试引擎”。

形象

这将导致出现一个对话框来选择调试引擎:您只需要“托管”。(混合会起作用,更笨重。)

形象

现在您正在调试!

形象

首先要注意的是,我们正好位于第一个项目文件的顶部,MSBuild的第一行就是求值。您在一开始就自动进入,就像您开始用“F11”调试常规应用程序一样。好了,几乎是最开始的:MSBuild已经在环境中读取了,以及它的其他初始设置:

形象

现在按F10,您将逐行执行:

形象

当您跨过属性时,您将看到局部变量窗口正在更新:

形象

形象

正如您可能知道的那样,MSBuild在通过。第一个过程仅计算属性,在遇到导入时将其拉入。现在尝试在item标记上设置断点(F9)-你不能!MSBuild此时不知道它们。

在底部的<Import>标记上设置一个断点并运行到它(F5):

形象

现在进入(F11)。您将输入要导入的文件,在本例中是Microsoft。C竖琴目标。

形象

Callstack窗口显示了像函数调用一样的跳转,包括文件中的位置:

形象

当然,<Import>根本没有函数调用的语义。与C++中的#include类似,它只是在逻辑上插入另一个文件的内容。但我选择了这样做,以便您可以在Callstack窗口中看到导入链并了解上下文。

通过在Imports上设置更多断点并执行step-in,我可以更深入地说明:

形象

为了通过属性传递,考虑到我还不能在项上设置断点,我将使用一个技巧。我将反复退出(Shift-F11),直到再次进入项目文件,然后再进入下一个步骤,即项目定义。C++构建过程经常使用项定义,但它们对C#来说不是很有趣,实际上只有一个:

形象

使用相同的技巧进入物品通行证,我们将进入第一个物品。然后我设置了一个断点来说明我现在可以做到这一点。

形象

条件断点也起作用,正如我认为的跟踪点一样。

再往前走一步,我可以看到局部变量窗口中的项,以及它们的元数据。这里有一个小错误-忽略红色消息,进入“非公共成员”查看名称和值:

形象

形象

有时,您会想知道当前条件的评估结果。为此,在即时窗口中,将条件传递给函数EvaluateCondition:

形象

如果要计算(展开)表达式,这与实际情况基本相同,但函数名为EvaluateExpression:

形象

这也是一种查看属性值或项目列表中内容的便捷方法,无需在局部变量窗口中导航。确保避开斜线,就像我在这里所做的那样。

“自动”窗口不工作,但“监视”可以:

形象

在即时窗口中,您可以使用新的对象模型在构建期间更改几乎任何项目状态。例如,我将在此处停止时修改此属性:

形象

你可以通过新的对象模型做很多事情,所以在这里调用它非常有用。

“我的手表”窗口更新为匹配:

匹配窗口

这就是我要展示的调试MSBuild求值的内容的结尾。

它是如何工作的

高层发生的事情(您可以从Mike的博客中找到更多信息)是MSBuild假装脚本实际上是VB或C#。它通过动态发出IL来实现这一点,这在语义上等同于它在XML中的实际操作。MSBuild本身的代码当然是经过优化的,所以“仅我的代码”将其隐藏,但很方便,IL没有进行优化,所以它显示了出来。在IL MSBuild内部,会发出指向项目文件中正确位置的行指令,从而完成任务。至于“局部变量”,它们实际上是传递给IL中函数的参数,以便它们出现。EvaluateCondition和Evaluate Expression只是以相同的方式传递的委托。

因此,常规VB/C#调试器的大部分基本功能都能正常工作;你不能只在即时窗口中使用“?”语法;线程和进程窗口没有意义;我怀疑Intellitrace是否有效。另外,我们的一些内部构件到处都在窗户里漏出。但通过使用这个技巧,获得集成调试器的基础知识所需的工作量大大减少。我相信我花了一两天时间整理Mike的示例代码,又花了三天时间将其直接连接到MSBuild中。创建一个真正的调试器引擎将花费更多;与您从C#获得的东西相比,它的成本会非常高,所以我预计从长远来看,这将是MSBuild调试的故事。我希望您会同意,这比盯着XML和日志或添加<Message>标记要好得多。

在我的下一篇文章中,我将报道
  • 在构建期间进行调试,即调试目标和项目引用内部发生的事情;
  • 调试多处理器构建;
  • 调试加载到Visual Studio中的项目的生成

到时见!

Visual Studio项目和生成开发主管

帖子使用Visual Studio调试MSBuild脚本首次出现于Visual Studio博客.

]]>
在MSBuild 4中使用YieldDuringToolExecution实现更好的并行性 https://devblogs.microsoft.com/visualstudio/better-parallelism-in-msbuild-4-with-yieldduringtool执行/ 2010年6月1日星期二13:47:42+0000 https://blogs.msdn.microsoft.com/visualstudio/2010/06/01/better-parallelism-in-msbuild-4-with-yieldduringtool执行/ 介绍
在MSBuild 4中,我们引入了一些性能改进,特别是对于大型相互依赖的构建。总的来说,它们是自动的,您无需对构建过程的编写方式进行任何更改即可获得它们的好处。然而,仍有一些情况下,我们无法做出最佳决定。 

帖子在MSBuild 4中使用YieldDuringToolExecution实现更好的并行性首次出现于Visual Studio博客.

]]>

介绍

在MSBuild 4中,我们引入了一些性能改进,特别是对于大型相互依赖的构建。总的来说,它们是自动的,您无需对构建过程的编写方式进行任何更改即可获得它们的好处。然而,仍有一些情况下,我们无法做出最佳决定。其中一种情况是,有一个特定的外部工具作为构建的一部分被调用,但需要花费大量时间。此类工具的一个示例是cl.exe,即C++编译器。本文讨论了如何使用外部工具的新收益机制来提高构建的性能。

工具任务

有几种方法可以使MSBuild执行外部命令行工具:

  1. 编写从ToolTask派生的任务。
  2. 使用Exec任务调用您的命令。
  3. 使用XamlTaskFactory。

所有这些方法最终都使用Microsoft中的ToolTask类。生成。Utilities.v4.0.dll用于处理命令行任务的执行并以MSBuild方式处理输出。然而,与所有任务一样,它们在执行时阻止MSBuild中发生任何其他工作。在任务很短的情况下,例如触摸日志文件或将文件从一个位置复制到另一个位置,这是完全可以接受的。但在调用C++编译器的原始示例中,MSBuild本身空闲的时间可能很长,在某些情况下,这可能会严重阻碍构建的良好并行化。

问题与MSBuild使用其辅助节点的方式有关。每当计划生成项目时,都会将其分配给其中一个工作节点。然后,此节点将从头到尾执行该项目,并且在项目完成或项目进行MSBuild调用(例如,为了满足项目对项目的引用)之前,不会接受更多工作。这在很大程度上是因为节点一次只能执行一个任务,因为必须保证任务的环境和当前目录在执行期间不会被修改。

然而,命令行工具不执行进程内,因此它们的环境不会因在同一节点上并行运行其他任务而受到污染。我们可以利用此行为让MSBuild节点在长时间运行的工具完成其工作的同时执行其他项目中的任务。这是使用YieldDuringToolExecution参数完成的。

工具执行期间的收益

为了允许MSBuild在一个项目中的命令行工具正在运行时继续生成其他项目,这很简单。只需在长时间运行的命令行工具上将YieldDuringToolExecution参数设置为“True”即可。这是一个布尔参数,因此任何解析为布尔值的有效MSBuild表达式都可以工作。以下是一个示例:

<属性组><YieldDuringToolExecution>真</YieldDuringToolExecution></PropertyGroup(属性组)><Exec CommandLine=“Sleep 10000”YieldDuringToolExecution=“$(YieldDuringToolExecution)”/>

执行Exec任务时,它通常会休眠10000秒,在此期间,节点上的其他工作无法继续。但是,如果启用了yield,Sleep命令仍将运行,但MSBuild节点将可以自由地执行其他工作。一旦Sleepe命令完成,只要节点可以自由执行,该节点就会继续生成启动它的项目。

是否应该为ToolTasks启用收益取决于它们的操作。一般来说,如果任务运行时间不到1秒,那么启用它可能不值得,因为放弃MSBuild节点的成本很小。然而,对于较长的工具,您可能会看到一些胜利,而且胜利可能会更大,您的构建越复杂,您在其中运行的任务也越多。同样,大型相互依赖的C++构建就是一个很好的例子,它们从应用于编译器中受益匪浅。您可以使用详细摘要MSBuild 4的功能。

屈服也能与MSBuild中的/m开关很好地交互。例如,如果您指定了/m:4以启用并行化,MSBuild将确保一次进行的并行操作不会超过四个,无论是定期生成项目还是生成工具。因此,启用屈服不会导致机器过载。相反,您的构建可能会改进它们的并行化,并更好地利用可用的CPU和I/O周期。

我们已经为几个工具任务启用了yield语义。其中包括:

  • CL,C++编译器
  • MIDL,IDL编译器
  • 链接,本机链接器–仅当LinkTimeCodeGeneration元数据设置为UseLinkTimeCode Generation时

也可以为Vbc和Csc任务启用它,因为它们也是ToolTasks,但Microsoft不提供这种支持。CSharp.目标和Microsoft。附带的VisualBasic.targets。Net 4.0。如果你愿意,你可以很容易地自己添加它们。一般来说,如果您包括Microsoft。Common.targets除非使用传递给MSBuild的参数/p:YieldDuringToolExecution=false覆盖Yield杜林ToolExection属性,否则它将被设置为true。我们将继续使用此属性作为选择同名刀具参数值的基础。

为什么它不是自动的?

不幸的是,对于MSBuild 4,我们没有机会使该系统像我们希望的那样自动化。在未来的版本中,如果ToolTask看起来持续时间超过某个阈值,我们希望在执行ToolTask时自动生成。这也将与我们计划的构建分析和调度的其他自动改进一起工作。

克利夫·哈德森–MSBuild开发人员

帖子在MSBuild 4中使用YieldDuringToolExecution实现更好的并行性首次出现于Visual Studio博客.

]]>