首页
学习
活动
专区
圈层
工具
发布

解读 Microsoft.NET.Sdk 的源码,你能定制各种奇怪而富有创意的编译过程

解读 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 国际许可协议 进行许可。

1.6K30

如何创建一个基于 MSBuild Task 的跨平台的 NuGet 工具包

更新于 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 的支持是为了能让基于

1.9K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    如何创建一个基于命令行工具的跨平台的 NuGet 工具包

    NuGet 为我们提供了一种自动导入 .props 和 .targets 的方法,同时还是一个 .NET 的包平台;我们可以利用 NuGet 发布我们的工具并自动启用这样的工具。...制作这样的一个跨平台 NuGet 工具,我们能够为安装此工具的项目提供自动的但定制化的编译细节——例如自动生成版本号,自动生成某些中间文件等。...一篇介绍写基于 MSBuild Task 的 dll,一篇介绍写任意的命令行工具,可以是用于 .NET Framework 的 exe,也可以是基于 .NET Core 的 dll,甚至可以是使用本机工具链编译的平台相关的各种格式的命令行工具...:创建一个项目,用来写工具的核心逻辑 为了方便制作跨平台的 NuGet 工具,新建项目时我们优先选用 .NET Core 控制台项目。...我们要让我们写的 .NET Core 工具程序能够工作,所以我们将生成的输出程序放到 tools 目录下。

    1.5K20

    MSBuild的简单介绍与使用

    MSBuild 是 Microsoft 和 Visual Studio的生成系统。它不仅仅是一个构造工具,应该称之为拥有相当强大扩展能力的自动化平台。...其中最核心的就是执行引擎,它包括定义构造工程的规范,解释构造工程,执行“构造动作”;构造工程是用来描述构造任务的,大多数情况下我们使用MSBuild就是遵循规范,编写一个构造工程;MSBuild引擎执行的每一个...类似的方法把相关的Item放在ItemGroup里。...每个Project可以包括一个或多个Target,从而完成一系列定制的任务。...你可以通过Project的DefaultTargets属性指定MSBuild引擎从哪(几)个Target开始执行,也可以在调用MSBuild.exe时使用t开关来手动指定将要运行的Target,方法如下

    1.7K50

    项目文件中的已知属性(知道了这些,就不会随便在 csproj 中写死常量啦)

    中的各种 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

    1.9K10

    从零开始学习 dotnet 编译过程和 Roslyn 源码分析

    用法: 如何编写基于 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

    1.1K40

    .Net Core迁移到MSBuild的多平台编译问题

    虽然现在可以从无到有的使用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项目配置文件。

    1.2K20

    实现自定义的 msbuild logger

    实现并使用自定义的 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?

    23200

    Visual Studio Package 插件开发

    于是我想要不要自己定制个打包插件。   部分朋友可能会认为,有现成的可以去找一个,干嘛不用持续集成工具啊。   ...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 这个路径下,值得注意的是

    1.1K30

    如何针对ASP.NET Web项目实现自动化部署

    深度解析:让你的ASP.NET项目告别手动部署的痛苦,拥抱自动化的快乐! 1. 前言:告别手动部署的噩梦 还在半夜三更手动发布代码?还在为一个小bug修复而经历"编译→打包→上传→重启"的繁琐流程?...作为一个有追求的.NET开发者,是时候让自动化部署拯救你的睡眠时间了!...自动化部署的核心概念 2.1 CI/CD流水线架构 2.2 核心组件说明 持续集成(CI)阶段: 源码管理:Git仓库管理代码版本 自动构建:代码变更触发自动编译 质量把关:代码检查、单元测试、安全扫描...建立完善的日志和监控体系 ✅ 定期进行灾难恢复演练 9.3 持续改进 性能优化: 并行化构建任务 使用构建缓存 优化Docker镜像层 实施增量部署 团队协作: 制定部署规范文档 建立值班轮换制度 定期进行技术分享...愿每个.NET开发者都能拥有丝滑的部署体验,告别加班发版的苦逼日子! 关于作者 资深.NET开发工程师,专注于DevOps和云原生技术,曾帮助多家企业成功实施自动化部署方案。

    36410

    Unity 将是驱动 C# 增长的引擎吗 ?

    短期内,Unity中国将开始为游戏开发者构建其核心产品的本地定制版本,包括旗舰产品Unity编辑器的中国版。...Unity中国还将成为Unity全球产品和服务在中国地区的独家经销商,确保我们在中国的客户和创作者社区能够继续访问并使用所有他们目前已经熟悉并喜爱的Unity工具。...通过让创作者轻松访问 RT3D 模拟工具以及创建真实世界地点和对象的数字孪生的能力,Unity 为创作者提供了一条制作 RT3D 资产的便捷途径,无论是用于游戏还是非游戏世界。...,Unity 的工作将建立在.NET生态系统之上,而非开发定制解决方案。...为了让用户能享受新版.NET SDK/Runtime和MSBuild所带来的性能与生产力提高,我们将从Mono .NET Runtime转移到CoreCLR,即现代的.NET (Core) Runtime

    1K10

    ASP.NET Core基础补充08

    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项目:

    97310

    理解 C# 项目 csproj 文件格式的本质和编译流程

    在新的 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\。

    3.5K10

    .NET 基金会项目介绍-MSBuild

    MSBuild 是属于 .Net 基金会的一个项目,本文将简要介绍该项目相关的信息。 中文介绍 中文介绍内容翻译自英文介绍,主要采用意译、如与原文存在出入,请以原文为准。...MSBuild Microsoft Build Engine, 简称 MSBuild , 是一个构建应用程序的平台。...@microsoft.com 笔者简评 MSBuild 作为构建工具是.Net开发中的重要一环。...csproj/sln文件之所以能够工作,都是 MSBuild 在起作用。 在日常使用中除了使用 VS 一键调用 MSBuild 进行生成和发布之外。...在编写自动化脚本时也无法离开 MSBuild 的调用。 开发者可以自定义 MSBuild 的 Target 任务,实现在代码构建时进行代码生成、自动化调用、输出信息等等各种各样的操作。

    1.2K10

    WPF 讲讲 Microsoft.NET.Sdk.WindowsDesktop 的原理

    在使用 .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 项目,详细请看

    1.8K10

    正在将脚本编译迁移到MSBuild,并将实现对NuGet包的兼容

    本号已有原创文章250+篇,以软件工程为纲,DevOps为基,洞察研发效能全貌,涵盖从需求管理、应用开发、软件测试、发布部署到运营监控的完整流程。...NuGet,作为.NET生态系统中的核心包管理器,为开发者提供了一个便捷的平台,用于管理和分享代码库。它简化了依赖管理,使得开发者能够更快速地构建和部署应用程序。...二、Unity迁移至MSBuild:意义与影响 Unity决定将脚本编译迁移到MSBuild,这一决策的背后蕴含着深远的意义。...MSBuild是微软开发的一个构建工具,它提供了强大的项目构建和自动化管理能力。通过迁移到MSBuild,Unity将能够更好地与.NET生态系统整合,从而实现对NuGet包的兼容。...而NuGet作为.NET生态系统的重要组成部分,也为跨平台开发提供了强有力的支持。Unity与NuGet的结合,将进一步推动跨平台开发的便捷性和效率,使开发者能够更加轻松地打造出高品质的游戏作品。

    53410
    领券