解读 Microsoft.NET.Sdk 的源码,你能定制各种奇怪而富有创意的编译过程 发布于 2018-06-30 05:55...关于 NuGet 包的目录结构,我在下面两篇文章中都有提到过: 如何创建一个基于 MSBuild Task 的跨平台的 NuGet 工具包 如何创建一个基于命令行工具的跨平台的 NuGet 工具包 官方对...Microsoft.NET.Sdk 的主要任务 在 Sdk 文件夹中搜索 Target 节点的个数,我得到了 174 个(随 .NET Core 2.1 发布);不过有一些是同名的,会被重写(类似于 C...#/.NET 中的继承和重写);核心的并没有那么多。...本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
更新于 2018-09-01 00:07 MSBuild 的 Task 为我们扩展项目的编译过程提供了强大的扩展性,它使得我们可以用 C# 语言编写扩展;利用这种扩展性,我们可以为我们的项目定制一部分的编译细节...NuGet 为我们提供了一种自动导入 .props 和 .targets 的方法,同时还是一个 .NET 的包平台;我们可以利用 NuGet 发布我们的工具并自动启用这样的工具。...一篇介绍写基于 MSBuild Task 的 dll,一篇介绍写任意的命令行工具,可以是用于 .NET Framework 的 exe,也可以是基于 .NET Core 的 dll,甚至可以是使用本机工具链编译的平台相关的各种格式的命令行工具...:创建一个项目,用来写工具的核心逻辑 为了方便制作跨平台的 NuGet 工具,新建项目时我们优先选用 .NET Core Library 项目或 .NET Standard Library 项目。...要点 1: - 加入 net47 的支持是为了能让基于 .NET Framework 的 msbuild 能够使用此工具编译; - 加入 netcoreapp2.0 的支持是为了能让基于
NuGet 为我们提供了一种自动导入 .props 和 .targets 的方法,同时还是一个 .NET 的包平台;我们可以利用 NuGet 发布我们的工具并自动启用这样的工具。...制作这样的一个跨平台 NuGet 工具,我们能够为安装此工具的项目提供自动的但定制化的编译细节——例如自动生成版本号,自动生成某些中间文件等。...一篇介绍写基于 MSBuild Task 的 dll,一篇介绍写任意的命令行工具,可以是用于 .NET Framework 的 exe,也可以是基于 .NET Core 的 dll,甚至可以是使用本机工具链编译的平台相关的各种格式的命令行工具...:创建一个项目,用来写工具的核心逻辑 为了方便制作跨平台的 NuGet 工具,新建项目时我们优先选用 .NET Core 控制台项目。...我们要让我们写的 .NET Core 工具程序能够工作,所以我们将生成的输出程序放到 tools 目录下。
MSBuild 是 Microsoft 和 Visual Studio的生成系统。它不仅仅是一个构造工具,应该称之为拥有相当强大扩展能力的自动化平台。...其中最核心的就是执行引擎,它包括定义构造工程的规范,解释构造工程,执行“构造动作”;构造工程是用来描述构造任务的,大多数情况下我们使用MSBuild就是遵循规范,编写一个构造工程;MSBuild引擎执行的每一个...类似的方法把相关的Item放在ItemGroup里。...每个Project可以包括一个或多个Target,从而完成一系列定制的任务。...你可以通过Project的DefaultTargets属性指定MSBuild引擎从哪(几)个Target开始执行,也可以在调用MSBuild.exe时使用t开关来手动指定将要运行的Target,方法如下
中的各种 Target 使用的配置属性,设置这些属性也影响到生成过程。...的源码,你能定制各种奇怪而富有创意的编译过程 和 Reading the Source Code of Microsoft.NET.Sdk, Writing the Creative Extension...) 启动 MSBuild 时的路径,类似于工作目录(输入 msbuild 命令时所在的那个文件夹) 工具 $(MSBuildToolsPath) MSBuild 工具所在的路径 $(MSBuildToolsVersion...) 此次编译锁使用的工具的版本 另外还有一些在新的 SDK 中几乎不会在日常开发中用到的全局属性: $(MSBuildBinPath): MSBuild 程序所在的路径 $(MSBuildExtensionsPath...MSBuild 程序所在的路径 $(MSBuildBinPath): MSBuild 程序所在的路径 $(MSBuildBinPath): MSBuild 程序所在的路径 如果希望了解在 csproj
用法: 如何编写基于 Microsoft.NET.Sdk 的跨平台的 MSBuild Target(附各种自带的 Task) - 吕毅 Roslyn 使用 WriteLinesToFile 解决参数过长无法传入...林德熙 当现有的知识和文档不足以帮助你完成现有功能的时候,也许你该考虑阅读官方源码了: 解读 Microsoft.NET.Sdk 的源码,你能定制各种奇怪而富有创意的编译过程 - 吕毅 Reading...中的代码文件 - 吕毅 为 Visual Studio 使用通配符批量添加项目文件 - 吕毅 Roslyn 使用 Directory.Build.props 管理多个项目配置 - 林德熙 Roslyn...nuget 统一管理信息 - 林德熙 Roslyn 通过 Nuget 管理公司配置 - 林德熙 现在,我们需要真的使用 NuGet 做一个自己的工具了: 如何创建一个基于 MSBuild Task 的跨平台的...NuGet 工具包 - 吕毅 如何创建一个基于命令行工具的跨平台的 NuGet 工具包 - 吕毅 在制作跨平台的 NuGet 工具包时,如何将工具(exe/dll)的所有依赖一并放入包中 - 吕毅 NuGet
虽然现在可以从无到有的使用VS2017来创建一个新的MSBuild项目,但是还是有好多遗留程序使用着以JSON格式存储的项目配置文件为基础的项目。...Scott Hanselman也在博客中发文教大家怎么使用新的.NET SDK RC4工具将project.json转换到MSBuild的.csproj项目系统。...当时ASP.NET Core的第一个版本为了使开源平台对开发者更具吸引力,ASP.NET Core采用了一种基于JSON的项目系统project.json文件定义,这是一种与Node.js类似的定义,这对于吸引...但是随着.NET Core的整体开源,非Web开发者如UWP和Xamarin,对这种JSON项目结构并不熟悉。这些开发者和社区都希望继续使用MSBuild的XML项目系统。...”命令,这个命令为了将JSON为基础的配置项目转换为.csproj项目配置文件。
实现并使用自定义的 msbuild logger Intro 最近想改一下项目,发现有很多警告,想把所有的 warning 导出到 JSON 以方便统计 warning 类型以及出现的次数,但是目前 dotnet...build 还不支持,于是想提一个 issue 希望支持一下,然后有大佬说可以自定义一个 msbuild logger 来实现,.NET SDK 里的 Terminal Logger 也是这种方式实现的...的时候将其导出到 json 文件中,代码搞好之后编译我们的项目,确保成功生成 dll 文件 然后在原来 dotnet build 的基础上添加 -logger 参数使用我们自定义的这个 logger,...ILogger 的实现 Logger, 也可以继承这个 Logger 来实现,实际要复用的话可以结合 msbuild 的一些参数和自己的需求进行改进和定制 除了自定义 msbuild logger 之外...为 json 文件,感谢热心帮忙的大佬们,希望对大家有所帮助 References https://github.com/dotnet/sdk/issues/43269?
于是我想要不要自己定制个打包插件。 部分朋友可能会认为,有现成的可以去找一个,干嘛不用持续集成工具啊。 ...1、Visual Studio Package 初步使用 2、.Net 执行Dos命令 3、MSBuild简单运用 4、File.Copy的使用 下载安装 Visual Studio 2013...恭喜,您的第一个插件程序就这么诞生了。 编译后,到生成目录下,执行.vsix文件,安装完后,重启VS,点击[工具]就会见到您的插件工具。同时你也可以在扩展与更新界面进行对您的插件进行卸载。 ?...传送门 MSBuild的使用 Microsoft Build Engine 是MSBuild的全称,是一个独立的存在生成平台,不需要依赖vs,但是vs的生成、发布等等功能都是基于MSBuild去构建的...这里就不做过多的介绍和深入,有需要可以点击这里进行查看文档 MSBuild.exe在C:\Windows\Microsoft.NET\Framework\v4.0.30319 这个路径下,值得注意的是
深度解析:让你的ASP.NET项目告别手动部署的痛苦,拥抱自动化的快乐! 1. 前言:告别手动部署的噩梦 还在半夜三更手动发布代码?还在为一个小bug修复而经历"编译→打包→上传→重启"的繁琐流程?...作为一个有追求的.NET开发者,是时候让自动化部署拯救你的睡眠时间了!...自动化部署的核心概念 2.1 CI/CD流水线架构 2.2 核心组件说明 持续集成(CI)阶段: 源码管理:Git仓库管理代码版本 自动构建:代码变更触发自动编译 质量把关:代码检查、单元测试、安全扫描...建立完善的日志和监控体系 ✅ 定期进行灾难恢复演练 9.3 持续改进 性能优化: 并行化构建任务 使用构建缓存 优化Docker镜像层 实施增量部署 团队协作: 制定部署规范文档 建立值班轮换制度 定期进行技术分享...愿每个.NET开发者都能拥有丝滑的部署体验,告别加班发版的苦逼日子! 关于作者 资深.NET开发工程师,专注于DevOps和云原生技术,曾帮助多家企业成功实施自动化部署方案。
我们有几个类似计划,但希望知道此类信息是否对你有帮助。 ? 一点历史 .NET Core 项目始于 3 多年前,与传统的微软项目相比,这是一个重大转变。...我们的官方版本位于 Azure DevOps(当时称为 VSTS)和 TeamCity(由ASP.NET核心使用),其中存在签名和其他关键运输基础结构。...ASP.NET核心的仓库 有 aspnet/KoreBuild 使用 Repo Toolset 的各种仓库,如dotnet/symreader 其他几个孤立的仓库具有独立的实现。..."软件包的构建方式不同),但生成它们的步骤相当类似。...它将通用仓库"语言"定义为一组脚本(请参阅 eng/common)、通用仓库布局以及作为 MSBuild SDK 推出的通用生成目标集。
短期内,Unity中国将开始为游戏开发者构建其核心产品的本地定制版本,包括旗舰产品Unity编辑器的中国版。...Unity中国还将成为Unity全球产品和服务在中国地区的独家经销商,确保我们在中国的客户和创作者社区能够继续访问并使用所有他们目前已经熟悉并喜爱的Unity工具。...通过让创作者轻松访问 RT3D 模拟工具以及创建真实世界地点和对象的数字孪生的能力,Unity 为创作者提供了一条制作 RT3D 资产的便捷途径,无论是用于游戏还是非游戏世界。...,Unity 的工作将建立在.NET生态系统之上,而非开发定制解决方案。...为了让用户能享受新版.NET SDK/Runtime和MSBuild所带来的性能与生产力提高,我们将从Mono .NET Runtime转移到CoreCLR,即现代的.NET (Core) Runtime
在本文中,您将了解 .NET SDK、.NET CLI 和 .NET 运行时使用的环境变量。某些环境变量由 .NET 运行时使用,而其他环境变量仅由 .NET SDK 和 .NET CLI 使用。...ARM64 时,每个引擎的核心数设置为8,否则为30。...使用确定的每个引擎核心数,1或Environment.ProcessorCount 中每个引擎核心数的最大值。...要不是全球性的工具添加到路径,设置为0,false或no。 DOTNET_CLI_TELEMETRY_OPTOUT 指定是否收集有关 .NET 工具使用情况的数据并将其发送给 Microsoft。...在 .NET CLI 中配置 MSBuild 要执行的MSBuild外的过程中,设置DOTNET_CLI_RUN_MSBUILD_OUTOFPROC环境变量要么1,true或yes。
ASP.NET Core (.NET CLI) CLI (Command Line Interface) .NET Core CLI(命令行界面)是一个新的跨平台工具,用于创建,还原程序包,构建,运行和发布...其他高级IDE,编辑器和工具,例如Visual Studio Code使用这些CLI命令来支持创建,还原,发布和运行.NET Core应用程序。...(用于安装.NET Core CLI工具和共享运行时的脚本) 使用.NET Core CLI命令创建一个新项目 让我们在不使用Visual Studio的情况下,使用命令行界面创建,还原,构建和运行...以下命令使用TEMPLATE创建一个新的dotnet核心项目: dotnet new 您可以使用以下方法找到模板列表: dotnet new-l 键入dotnet new -l并按Enter后...使用 .NET 核心 CLI 命令生成项目 为了构建一个新的或现有的项目,我们需要使用以下“ dotnet build”命令来构建您的.NET Core项目:
在新的 csproj 格式中,编译过程会使用 TargetFrameworks 属性来决定编译应该使用的目标框架(是 net47 还是 netstandard2.0)。...当然如果你非常感兴趣,还可以阅读我另外几篇关于 Target 使用相关的文章: 如何编写基于 Microsoft.NET.Sdk 的跨平台的 MSBuild Target - 吕毅 如何创建一个基于命令行工具的跨平台的...NuGet 工具包 - 吕毅 如何创建一个基于 MSBuild Task 的跨平台的 NuGet 工具包 - 吕毅 每次都要重新编译?..." /> 而引入的这份 .targets 文件便包含了 msbuild 定义的各种核心编译任务。...当我使用 msbuild 编译时,我的地址:C:\Program Files\dotnet\sdk\2.1.300\Sdks\Microsoft.NET.Sdk\build\。
MSBuild 是属于 .Net 基金会的一个项目,本文将简要介绍该项目相关的信息。 中文介绍 中文介绍内容翻译自英文介绍,主要采用意译、如与原文存在出入,请以原文为准。...MSBuild Microsoft Build Engine, 简称 MSBuild , 是一个构建应用程序的平台。...@microsoft.com 笔者简评 MSBuild 作为构建工具是.Net开发中的重要一环。...csproj/sln文件之所以能够工作,都是 MSBuild 在起作用。 在日常使用中除了使用 VS 一键调用 MSBuild 进行生成和发布之外。...在编写自动化脚本时也无法离开 MSBuild 的调用。 开发者可以自定义 MSBuild 的 Target 任务,实现在代码构建时进行代码生成、自动化调用、输出信息等等各种各样的操作。
对于这些简单任务,可以使用 MSBuild 自带的 Task。...PS 如果在修改代码之后,在编译 Task 项目时,发现输出目录的 dll 被占用,直接结束掉 msbuild.exe 进程。推荐使用 PowerToys 的 File Locksmith 工具。...为 netstandard2.0,支持输出 nuget 包供外部使用。...- 博客园 如何创建一个基于 MSBuild Task 的跨平台的 NuGet 工具包 - walterlv 如何编写基于 Microsoft.NET.Sdk 的跨平台的 MSBuild...Target(附各种自带的 Task) - walterlv 使用 MSBuild 代码编写自己的任务 - MSBuild | Microsoft Learn 使用 MSBuild 创建自定义任务
我们这里说的编译任务是 MSBuild 的 Target。...---- 本文需要理解的前置知识是: 解读 Microsoft.NET.Sdk 的源码,你能定制各种奇怪而富有创意的编译过程 - walterlv 而使用 Visual Studio 编译的时候,会自动帮我们设置...BuildingInsideVisualStudio 的值为 True,所以实际上我们可以使用这个值进行判断。...我们可以在 Microsoft.NET.Sdk 中找到不少使用此属性的编译任务。...可以阅读我的另一篇博客: 解读 Microsoft.NET.Sdk 的源码,你能定制各种奇怪而富有创意的编译过程 - walterlv 本文会经常更新,请阅读原文: https://blog.walterlv.com
在使用 .NET Core 3.0 和以上版本,可以使用新的 SDK 版本支持的 csproj 项目文件,这个 SDK 格式的项目文件可以支持 .NET Core 以及 .NET Framework 版本的...这个文件的引用有以下要求 存在这个 App.xaml 文件夹 用户没有设置 EnableDefaultApplicationDefinition 为false也就是不添加默认的文件 这个项目是 csproj...的自动生成代码两次 接下来是一个 Target 用来提示构建项重复,核心是用到 CheckForDuplicateItems 这个 Task 做的逻辑,关于 Task 的使用和定义请看 如何创建一个基于...MSBuild Task 的跨平台的 NuGet 工具包 - walterlv 最后一部分就是 NetSdkWarning 用来提示版本警告 通过了解 Microsoft.NET.Sdk.WindowsDesktop...的原理可以知道,可以通过自己设置 ApplicationDefinition 和 Page 内容再加上 引用框架 就可以不引用 SDK 使用 Microsoft.NET.Sdk 创建 WPF 项目,详细请看
本号已有原创文章250+篇,以软件工程为纲,DevOps为基,洞察研发效能全貌,涵盖从需求管理、应用开发、软件测试、发布部署到运营监控的完整流程。...NuGet,作为.NET生态系统中的核心包管理器,为开发者提供了一个便捷的平台,用于管理和分享代码库。它简化了依赖管理,使得开发者能够更快速地构建和部署应用程序。...二、Unity迁移至MSBuild:意义与影响 Unity决定将脚本编译迁移到MSBuild,这一决策的背后蕴含着深远的意义。...MSBuild是微软开发的一个构建工具,它提供了强大的项目构建和自动化管理能力。通过迁移到MSBuild,Unity将能够更好地与.NET生态系统整合,从而实现对NuGet包的兼容。...而NuGet作为.NET生态系统的重要组成部分,也为跨平台开发提供了强有力的支持。Unity与NuGet的结合,将进一步推动跨平台开发的便捷性和效率,使开发者能够更加轻松地打造出高品质的游戏作品。