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

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

我分为两篇可以减少完成单个任务的理解难度: 如何创建一个基于 MSBuild Task 的跨平台的 NuGet 工具包 如何创建一个基于命令行工具的跨平台的 NuGet 工具包 第零步:前置条件 第一步...要点 2: 注意,我们使用 NuGet 包来依赖 Task 框架,但此 NuGet 包要求的最低 .NET Framework 版本为 4.6。...表示这一项打包到 NuGet 中的路径。...当写在外面时,要特别留意可能某些属性没有初始化完全,你应该只使用那些肯定能确认存在的属性或文件。...总结 不得不说,制作一个跨平台的基于 MSBuild Task 的 NuGet 工具包还是比较麻烦的,我们总结一下: 准备项目的基本配置(设置各种必要的项目属性,安装必要的 NuGet 依赖) 建立好

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

    .Net在Windows上使用Jenkins做CICD的那些事

    背景   最近入职了一家新公司,公司各个方面都让我非常的满意,我也怀着紧张与兴奋的心情入职后,在第一天接到了领导给我的第一个任务——把整个项目的依赖引用重新整理并实施项目的CI/CD。   ...中间还遇到Jenkins使用本机账号执行的权限问题。所有“坑”的我在下面步骤尽可能给大家规避了。 引用整理 ?   ...项目(包含所以依赖的项目)依赖引用丢失,主要体现以下几点: 官方依赖包没有使用NuGet 内部项目引用通过本地引用,项目没有拉取则编译失败 NuGet包多个版本的引用 同属一个解决方案,但是项目分散到各个仓库...实现组件库的自动发布到私有Nuget 整理API项目的依赖,抛弃以前本地依赖的方式,统一使用Nuget 实现API项目的自动发布到IIS 工具准备 工具名称 下载地址 描述 jdk-8u261-windows-i586...https://dist.nuget.org/win-x86-commandline/latest/nuget.exe 发布、还原.Net依赖包 MsBuild https://visualstudio.microsoft.com

    2.4K31

    dotnet pack

    将被打包项目的 NuGet 依赖项添加到 .nuspec 文件,以便在安装包时可以进行正确解析。 如果打包的项目具有对其他项目的引用,则不会将其他项目包含在包中。...目前,如果具有项目到项目的依赖项,则每个项目均必须包含一个包。 默认情况下,dotnet pack 先构建项目。 如果希望避免此行为,则传递 --no-build 选项。...可向 dotnet pack 命令提供 MSBuild 属性,用于打包进程。 有关详细信息,请参阅 NuGet 包目标属性和 MSBuild 命令行引用。...示例部分介绍了如何在不同的情况下使用 MSBuild -p 开关。 默认情况下,Web 项目不可打包。...--force 强制解析所有依赖项,即使上次还原已成功,也不例外。 指定此标记等同于删除 project.assets.json 文件。 -?|-h|--help 打印出有关如何使用命令的说明。

    2.2K20

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

    我分为两篇可以减少完成单个任务的理解难度: 如何创建一个基于 MSBuild Task 的跨平台的 NuGet 工具包 如何创建一个基于命令行工具的跨平台的 NuGet 工具包 第零步:前置条件 第一步...所以,我们需要进行“一番配置”,使得这个项目编译成一个NuGet 工具,而不是一个依赖包。...表示这一项打包到 NuGet 中的路径。...有两种不同的方式: 直接传数据,这些数据可以被捕获成属性或者项,具体可以阅读我的另一篇博客: 如何使用 MSBuild Target(Exec)中的控制台输出 报告编译警告和编译错误,具体可以阅读我的另一篇博客...当写在外面时,要特别留意可能某些属性没有初始化完全,你应该只使用那些肯定能确认存在的属性或文件。

    1.5K20

    MSBuild 中的特殊字符($ @ % 等):含义、用法以及转义

    特殊字符 MSBuild 中有这些特殊字符: $ @ % ' ; ? * 含义和用法 $ 引用一个属性或者环境变量。...: 在 Target 中获取项目引用的所有依赖(dll/NuGet/Project)的路径 在制作跨平台的 NuGet 工具包时,如何将工具(exe/dll)的所有依赖一并放入包中 % 引用集合中某一个项的某个属性...: 在项目文件 csproj 中或者 MSBuild 的 Target 中使用 % 引用集合中每一项的属性 ' 在形成一个字符串的时候,会使用到此字符。...下面这篇博客列出了此字符的一些使用: MSBuild 如何编写带条件的属性、集合和任务 Condition? ; 如果存在分号,那么在形成一个集合的时候,会被识别为集合中的各个项之间的分隔符。...和 * 作为通配符使用。一个 * 表示文件或者文件夹通配符,而 ** 则表示任意层级的文件或文件夹。

    1.4K20

    dotnet build

    列出了应用程序或库的依赖项的 .deps.json 文件。 用于指定应用程序的共享运行时及其版本的 .runtimeconfig.json 文件。...项目通过项目引用或 NuGet 包引用所依赖的其他库。 对于目标版本低于 .NET Core 3.0 的可执行项目,通常不会将 NuGet 中的库依赖项复制到输出文件夹。...如果未指定项目或解决方案文件,MSBuild 会在当前工作目录中搜索文件扩展名以 proj 或 sln 结尾的文件并使用该文件。...此标记关闭增量编译,并强制完全重新生成项目依赖项关系图。 --no-restore 在生成期间不执行隐式还原。 --nologo 不显示启动版权标志或版权消息。...示例 生成项目及其依赖项: .NET CLI复制 dotnet build 使用“发布”配置生成项目及其依赖项: .NET CLI复制 dotnet build --configuration Release

    2.7K20

    .NET Core系列 : 2 、project.json 这葫芦里卖的什么药

    Frameworks 和 dependencies dependencies此部分列出了你的项目所依赖的各个 NuGet 包,包括所述依赖项的版本号。...对于.NET Core来说,所有使用到的程序集都被打包成一个NuGet包,所以针对程序集的直接依赖转变成针对某个NuGet包的依赖。...他们是可以嵌套的,在最高一级的依赖项,将是所有的Frameworks所依赖的,也可以针对一个具体的Framework 构建它的依赖关系,不同的Framework使用不同版本的依赖项。...关于project.json 的更多信息 .NET Core项目依赖全部使用NuGet,要求使用NuGet 3.0版本,默认使用nuget.org 作为源。...要在项目中对其进行添加和调试,你需要下载(可能使用 git clone 或 git submodule 命令)源代码。

    3K80

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

    ---- “项目文件中的已知属性系列”分为两个部分: 本文:项目文件中的已知属性(知道了这些,就不会随便在 csproj 中写死常量啦) - 吕毅 项目文件中的已知 NuGet 属性(使用这些属性,创建...-- 以下属性是当引用的 dll 出现版本冲突时,用于自动生成绑定重定向的。...文件路径 项路径 写在 csproj 文件中 ItemGroup 组中的每一个元素即“项”。...) 此次编译锁使用的工具的版本 另外还有一些在新的 SDK 中几乎不会在日常开发中用到的全局属性: $(MSBuildBinPath): MSBuild 程序所在的路径 $(MSBuildExtensionsPath...): 自定义 targets 所在的路径 $(MSBuildExtensionsPath32): 自定义 targets 所在的路径 $(MSBuildExtensionsPath64): 自定义 targets

    1.9K10

    MSBuildRoslyn 和 NuGet 的 100 个坑

    MSBuild 不愧是强大的编译器,它提供的扩展机制让你几乎可以编译任何类型的文件或项目;Roslyn 是全新编写的一套编译器,不过它保留了 MSBuild 的大部分机制;NuGet 是 .NET 生态系统中的包管理机制...其实这是只有新的项目文件才会出现的编译错误,而错误原因是 NuGet 的缓存文件中与包引用相关的信息已经不正确了,需要运行 nuget restore 或者 dotnet restore 重新更新此文件才行...但是,只有使用了 Sdk 风格的 csproj 文件才会在执行了此命令后重新生成正确的包引用缓存文件;原来的格式并不会生成此文件,也就是说,无法修复。...唯一的解决办法就是清除项目中的所有 NuGet 缓存,使用 git clean -xdf。...依赖的项目会自动转为依赖的 NuGet 包 如果你给一个项目 A 打 NuGet 包,但这个项目引用此解决方案中的另一个项目 B。那么这时打包,NuGet 会认为 A 包依赖于 B 包。

    99330

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

    基础 项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦) - 吕毅 可以使用 NuGet 做一些不是传统 dll 引用的功能: Roslyn 通过...NuGet 工具包 - 吕毅 如何创建一个基于命令行工具的跨平台的 NuGet 工具包 - 吕毅 在制作跨平台的 NuGet 工具包时,如何将工具(exe/dll)的所有依赖一并放入包中 - 吕毅 NuGet...的坑很多,有些可以解,有些需要规避: 帮助官方 NuGet 解掉 Bug,制作绝对不会传递依赖的 NuGet 包 - 吕毅 MSBuild/Roslyn 和 NuGet 的 100 个坑 - 吕毅 Roslyn...通过 Nuget 引用源代码 在 VS 智能提示正常但是无法编译 - 林德熙 如果你的 NuGet 格式是旧的,或者说引用方式是旧的,推荐升级: 自动将 NuGet 包的引用方式从 packages.config...UWP 程序 - 吕毅 dotnet core 通过修改文件头的方式隐藏控制台窗口 - 林德熙 使用 GitVersion 在编译或持续构建时自动使用语义版本号(Semantic Versioning

    1.1K40

    .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖

    打包成一个程序集可以避免分发程序的时候带上一堆依赖而出问题。 ILMerge 可以用来将多个程序集合并成一个程序集。本文介绍使用 ILMerge 工具和其 NuGet 工具包来合并程序集和其依赖。...这个程序引用了一个 NuGet 包 Ben.Demystifier。为此带来了三个额外的依赖。...(注意到项目文件中我有额外引用一个其他的 NuGet 包 Ben.Demystifier,这是为了演示将依赖进行合并而添加的 NuGet 包,具体是什么都没有关系,我们只是在演示依赖的合并。)...以封装的 NuGet 包来使用 ILRepack 安装 NuGet 包: 之后,你就能直接使用 ILRepack 这个编译任务了,而不是在 MSBuild 中使用 Exec 来间接执行 ILRepack...的任务。

    4.7K30

    MSBuildRoslyn 和 NuGet 的 100 个坑

    更新于 2018-09-04 13:08 MSBuild 不愧是强大的编译器,它提供的扩展机制让你几乎可以编译任何类型的文件或项目;Roslyn 是全新编写的一套编译器,不过它保留了...其实这是只有新的项目文件才会出现的编译错误,而错误原因是 NuGet 的缓存文件中与包引用相关的信息已经不正确了,需要运行 nuget restore 或者 dotnet restore 重新更新此文件才行...但是,只有使用了 Microsoft.NET.Sdk 的新 csproj 文件才会在执行了此命令后重新生成正确的包引用缓存文件;原来的格式并不会生成此文件,也就是说,无法修复。...唯一的解决办法就是清除项目中的所有 NuGet 缓存,使用 git clean -xdf。...依赖的项目会自动转为依赖的 NuGet 包 如果你给一个项目 A 打 NuGet 包,但这个项目引用此解决方案中的另一个项目 B。那么这时打包,NuGet 会认为 A 包依赖于 B 包。

    1.7K20

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

    但是我们依然有一些常见的项可以先介绍介绍: Reference 引用某个程序集 PackageReference 引用某个 NuGet 包 ProjectReference 引用某个项目 Compile...只要引入了这个 .targets 文件,便能使用 msbuild 自带的编译任务完成绝大多数项目的编译。...它帮我们导入了公共的属性、公共的编译任务,还帮我们自动将项目文件夹下所有的 **\*.cs 文件都作为 ItemGroup 的项引入进来。...如果你希望看看 Microsoft.NET.Sdk 都引入了哪些文件,可以去本机安装的 msbuild 或 dotnet 的目录下查看。...随后根据 PropertyGroup 里面设置的属性正确显示属性面板中的状态,根据 ItemGroup 中的项正确显示解决方案管理器中的引用列表、文件列表。

    3.5K10

    dotnet 命令

    deps.json 文件包含依赖项、编译依赖项和用于解决程序集冲突的版本信息列表。 有关详细信息,请参阅 GitHub 上的运行时配置文件。....deps.json 文件是一个配置文件,其中包含有关运行应用程序所需的依赖项的信息。 此文件由 .NET SDK 生成。...dotnet msbuild 提供对 MSBuild 命令行的访问权限。 dotnet new 为给定的模板初始化 C# 或 F# 项目。 dotnet pack 创建代码的 NuGet 包。...dotnet publish 发布 .NET 依赖于框架或独立应用程序。 dotnet restore 还原给定应用程序的依赖项。 dotnet run 从源运行应用程序。...dotnet test 使用测试运行程序运行测试。 项目引用 命令 函数 dotnet add reference 添加项目引用。 dotnet list reference 列出项目引用。

    2.2K20

    如何在 MSBuild 中正确使用 % 来引用每一个项(Item)中的元数据

    MSBuild 中写在 中的每一项是一个 Item,Item 除了可以使用 Include/Update/Remove 来增删之外,还可以定义其他的元数据(Metadata)...使用 % 可以引用 Item 的元数据,本文将介绍如何正确使用 % 来引用每一个项中的元数据。...---- 定义 Item 的元数据 就像下面这样,当引用一个 NuGet 包时,可以额外使用 Version 来指定应该使用哪个特定版本的 NuGet 包。...引用元数据使用的是 % 符号。...关于使用 exe 进行自定义编译的部分可以参考我的另一篇博客: 如何创建一个基于命令行工具的跨平台的 NuGet 工具包 - walterlv 关于写文件的部分可以参考我的另一篇博客: 在 MSBuild

    1.9K10

    .net framework 4.0的NuGet包制作

    为啥做这个呢,因为要将公司内部的老的.NET程序所引用的DLL进行统一管理。这里服务端使用了一个叫做NuGetServer(官网:NuGet Server)的开源工具,部署在内部的Web服务器上。...试过直接通过DLL生成,但是会遇到包描述、版本等信息不自动更新的问题,最重要的DLL所引用的NuGet.org的包,不能自动包含进去。...NuGet.Org的包没问题。 最后呢使用Tools>External Tools(工具>外部工具)定义了一个命令。...要确保MSBUILD和NUGET好用,需要找到系统环境变量,添加路径(记得重启电脑,以便生效)。...找到Path项 1、增加:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin 2、增加:E

    2K50
    领券