nuget
文章平均质量分 94
walter lv
这个作者很懒,什么都没留下…
展开
-
在制作多框架项目的 NuGet 包时应该注意的问题(buildMultiTargeting TargetFrameworks)
制作一个 dll 引用的 NuGet 包简直是一键完成,无论是不是多框架项目;制作 dotnet-tools 也是如此。但如果需要自定义一些编译步骤,那么就需要在制作 NuGet 包时做很多的特殊处理了。本文介绍制作适用于多框架项目的 NuGet 工具包时应该注意的问题。本文内容背景知识NuGet 包内的文件夹结构制作有自定义功能的 NuGet 包执行时机1. 仅含 `build` 文件夹的 NuGet 包装到单框架项目中2. 仅含 `build` 文件夹的 NuGet 包装到多框架项目中3. 包含原创 2020-06-30 10:03:02 · 2954 阅读 · 0 评论 -
Unity3D 入门:如何管理 Unity 项目中的 NuGet 包?使用第三方 NuGet 包管理器——NuGetForUnity
Unity 项目虽然可使用 C# 项目作为脚本,却并没有提供一种类似 NuGet 的第一方包管理器。不过,还是有第三方包管理器可以用,为 C# 脚本应用现有的库提供方便。本文内容NuGetForUnity安装 NuGetForUnity使用 NuGetForUnity安装 NuGet 包还原 NuGet 包还有没有其他包管理方案?NuGetForUnity第三方适用于 Unity 的 NuGet 包管理器推荐:GlitchEnzo/NuGetForUnity: A NuGet Package M原创 2020-06-30 09:02:14 · 6161 阅读 · 12 评论 -
csproj 文件中那个空的 NuGetPackageImportStamp 是干什么的?
当我们在传统格式的 csproj 项目文件中安装 NuGet 包后,有时会在项目文件中发现空的 NuGetPackageImportStamp 节点。这个空的节点让我们这波强迫症患者觉得有点难以接受,关键是手工删除之后也没发现有什么副作用。那么为什么会出现这个节点?它究竟有什么作用?本文内容空的 NuGetPackageImportStamp 节点什么情况下会出现 NuGetPackageI...原创 2020-03-31 07:41:30 · 411 阅读 · 0 评论 -
在 Visual Studio 的解决方案资源管理器中隐藏一些文件
项目文件中有一些属性几乎是专门为 IDE 而准备的,不过考虑到 .NET 生态的开发者多数都使用 Visual Studio,所以基本上也只有 Visual Studio 对这些特性支持的最全面。(才不会透漏这些属性其实本就是为 Visual Studio 而准备的呢。)本文将介绍如何在 Visual Studio 的解决方案资源管理器中隐藏一些文件。本文内容原生支持原生不支持变通解决活学活...原创 2020-01-28 17:47:02 · 3565 阅读 · 0 评论 -
解读 Microsoft.NET.Sdk 的源码,你能定制各种奇怪而富有创意的编译过程
在 csproj 中,Project 中的 Sdk 属性是 MSBuild 15.0 开始支持的,也就是 Visual Studio 2017 开始支持。有了 Sdk 属性的存在,MSBuild 编译过程能够扩展得非常强大,而不止是过去 Import 的一个 props 和 targets 文件。本文将介绍 Microsoft.NET.Sdk 的源码,以及利用源码中的一些线索来完成官方文档中没有...原创 2020-01-28 17:45:00 · 1095 阅读 · 0 评论 -
阻止某个 NuGet 包意外升级
出于兼容性考虑,我们可能不再更新某个项目的 NuGet 包。典型的情况是软件版本进行了大规模的不兼容的升级,需要对旧格式的数据进行读取,以便迁移到新格式的数据。然而,团队开发的软件可能因为某个小伙伴不知道这样的历史问题,从而手抖将某个不应该更新的 NuGet 包更新了,于是迁移就挂了。本文提供了一种方法来避免某些特定 NuGet 包的升级。如果你只关心结果,请直接前往最后一节:终极解决方案...原创 2020-01-28 17:40:49 · 419 阅读 · 0 评论 -
将 .NET Core 项目打一个最简单的 NuGet 源码包,安装此包就像直接把源码放进项目一样
NuGet 原本就提供了生成源码包的功能。不过,NuGet 原生的源码包仅用于调试时自带调试信息和调试源码。本文将以最简单的方式制作一个源码引用包。安装 NuGet 包后,不会生成任何程序集引用,而是相当于将源码直接放入被安装的程序集中一样。本文内容准备工作将源码加入 NuGet 包安装 NuGet 包时引入源码准备工作我们需要一个可以用来打 NuGet 包的 .NET Core 项目,...原创 2020-01-28 17:36:05 · 660 阅读 · 1 评论 -
可集成到文件管理器,一句 PowerShell 脚本发布某个版本的所有 NuGet 包
要发布 NuGet 包,只需要执行命令 nuget push xxx.nupkg 即可,或者去 nuget.org 点鼠标上传。不过,如果你有很多的 NuGet 包并且经常需要推送的话,也可以集成到 Directory Opus 或者 Total Commander 中。本文内容NuGet 推送命令用 PowerShell 包装一下集成到 Directory OpusNuGet 推送命令...原创 2019-12-30 08:32:26 · 456 阅读 · 0 评论 -
通过 mklink 收集本地文件系统的所有 NuGet 包输出目录来快速调试公共组件代码
我们做的公共库可能通过 nuget.org 发布,也可能是自己搭建 NuGet 服务器。但是,如果某个包正在开发中,需要快速验证其是否解决掉一些诡异的 bug 的话,除了单元测试这种间接的测试方法,还可以在本地安装未发布的 NuGet 包的方法来快速调试。本文介绍如何本地打包发布 NuGet 包,然后通过 mklink 收集所有的本地包达到快速调试的目的。本文内容将本地文件夹作为 NuGet...原创 2019-10-19 09:02:20 · 318 阅读 · 0 评论 -
Visual Studio 2019 中使用 .NET Core 预览版 SDK 的全局配置文件在哪里?
本文介绍在使用 Visual Studio 2019 或者命令行执行 MSBuild dotnet build 命令时,决定是否使用 .NET Core SDK 预览版的全局配置文件。指定是否使用 .NET Core 预览版 SDK 的全局配置文件在:%LocalAppData%\Microsoft\VisualStudio\16.0_xxxxxxxx\sdk.txt其中 %Local...原创 2019-09-27 09:36:25 · 1286 阅读 · 0 评论 -
使用基于 Roslyn 的 Microsoft.CodeAnalysis.PublicApiAnalyzers 来追踪项目的 API 改动,帮助保持库的 API 兼容性
做库的时候,需要一定程度上保持 API 的兼容性本文内容第一步:安装 NuGet 包第二步:创建 API 记录文件第三步:添加 API 记录体验 API 的追踪将警告变成错误第四步:将 API 打包第一步:安装 NuGet 包首先打开你的库项目,或者如果你希望从零开始也可以直接新建一个项目。这里为了博客阅读的简单,我创建一个全新的项目来演示。然后,为主要的库项目安装 NuGet 包:...原创 2019-09-27 09:35:25 · 808 阅读 · 0 评论 -
找出 .NET Core SDK 是否使用预览版的全局配置文件在哪里(探索篇)
你是否好奇 Visual Studio 2019 中的 .NET Core SDK 预览版开关是全局生效的,那个全局的配置在哪里呢?本文将和你一起探索找到这个全局的配置文件。本文内容使用 Process Monitor 探索下载 Process Monitor打开 Process Monitor设置过滤规则捕获 devenv.exe捕获 MSBuild.exe验证结论其他反编译探索使用 P...原创 2019-09-27 09:31:55 · 569 阅读 · 0 评论 -
为 NuGet 指定检测的 MSBuild 路径或版本,解决 MSBuild auto-detection: using msbuild version 自动查找路径不合适的问题
使用 nuget restore 命令还原项目的 NuGet 包的时候,NuGet 会尝试自动检测计算机上已经安装的 MSBuild。不过,如果你同时安装了 Visual Studio 2017 和 Visual Studio 2019,那么 NuGet 有可能找到错误版本的 MSBuild。本文介绍如何解决自动查找版本错误的问题。本文内容问题使用命令行参数解决修改环境变量解决问题当我们...原创 2019-09-27 09:25:37 · 1967 阅读 · 0 评论 -
使用 Roslyn 分析代码注释,给 TODO 类型的注释添加负责人、截止日期和 issue 链接跟踪
如果某天改了一点代码但是没有完成,我们可能会在注释里面加上 // TODO。如果某个版本为了控制影响范围临时使用不太合适的方法解了 Bug,我们可能也会在注释里面加上 // TODO。但是,对于团队项目来说,一个人写的 TODO 可能过了一段时间就淹没在大量的 TODO 堆里面了。如果能够强制要求所有的 TODO 被跟踪,那么代码里面就比较容易能够控制住 TODO 的影响了。本文将基于 Rosl...原创 2019-09-27 09:23:34 · 637 阅读 · 0 评论 -
基于 Roslyn 同时为 Visual Studio 插件和 NuGet 包开发 .NET/C# 源代码分析器 Analyzer 和修改器 CodeFixProvider
Roslyn 是 .NET 平台下十分强大的编译器,其提供的 API 也非常丰富好用。本文将基于 Roslyn 开发一个 C# 代码分析器,你不止可以将分析器作为 Visual Studio 代码分析和重构插件发布,还可以作为 NuGet 包发布。不管哪一种,都可以让我们编写的 C# 代码分析器工作起来并真正起到代码建议和重构的作用。本文将教大家如何从零开始开发一个基于 Roslyn 的 C#...原创 2019-09-27 08:43:36 · 1298 阅读 · 0 评论 -
在项目文件 / MSBuild / NuGet 包中编写扩展编译的时候,正确使用 props 文件和 targets 文件
.NET 扩展编译用的文件有 .props 文件和 .targets 文件。不给我选择还好,给了我选择之后我应该使用哪个文件来编写扩展编译的代码呢?如果你不了解 .props 文件或者 .targets 文件,可以阅读下面的博客:理解 C# 项目 csproj 文件格式的本质和编译流程 - walterlv具体的例子有下面这些博客。不过大概阅读一下就好,这只是 .props 和 .ta...原创 2019-08-30 15:05:56 · 1157 阅读 · 0 评论 -
使用 GitVersion 在编译或持续构建时自动使用语义版本号(Semantic Versioning)
我们在之前谈过 语义版本号(Semantic Versioning),在项目中应用语义版本号能够帮助库的开发者在发布包时表明更多的语义信息。这是趋势,从微软的博客 Versioning NuGet packages in a continuous delivery world 三部曲中可以看出,从 NuGet 4.3.0 以及 Visual Studio 2017 15.3 以上版本开始支持语义版...原创 2018-04-15 10:38:42 · 2690 阅读 · 0 评论 -
自动将 NuGet 包的引用方式从 packages.config 升级为 PackageReference
在前段时间我写了一篇迁移 csproj 格式的博客 将 WPF、UWP 以及其他各种类型的旧样式的 csproj 文件迁移成新样式的 csproj 文件,不过全过程是手工进行的,而且到最后处理 XAML 问题也非常头疼。现在,我们可以利用工具自动地完成这个过程。当然,工具并不将 csproj 格式进行迁移,而是在不迁移格式的情况下,使用到 PackageReference 方式 NuGet 引...原创 2018-04-27 07:16:35 · 13710 阅读 · 0 评论 -
项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦)
知道了 csproj 文件中的一些常用 NuGet 属性,创建 NuGet 包时就可以充分发挥新 Sdk 自动生成 NuGet 包的优势,不需要 nuspec 文件啦。(毕竟 nuspec 文件没有 .csproj 和 .targets 文件强大而又有扩展性。)“项目文件中的已知属性系列”分为两个部分:项目文件中的已知属性(知道了这些,就不会随便在 csproj 中写死常量啦) - ...原创 2018-05-19 07:55:25 · 2758 阅读 · 2 评论 -
如何最快速地将旧的 NuGet 包 (2.x, packages.config) 升级成新的 NuGet 包 (4.x, PackageReference)
最近我将项目格式进行了升级,从旧的 csproj 升级成了新的 csproj;NuGet 包管理的方式也从 packages.config 升级成了 PackageReference。然而迁移完才发现,这个项目竟然还依赖了大量的从 NuGet 2.x 时代发布的 NuGet 包,这些包并不能在 PackageReference 下好好工作。于是,我准备将所有这些包都进行升级。本文将介绍最简单的...原创 2018-05-19 08:11:50 · 1736 阅读 · 0 评论 -
在制作跨平台的 NuGet 工具包时,如何将工具(exe/dll)的所有依赖一并放入包中
NuGet 提供了工具类型的包支持,生成一个基于 .NET Core 的 dll 或者基于 .NET Framework 的 exe 之后,你几乎可以对项目做任何事情。但是,默认情况下,NuGet 不会将这些工具的依赖一起打包进入 NuGet 包 nupkg 文件内,这就使得功能比较复杂的跨平台 NuGet 工具包几乎是无法正常工作的。本文将介绍将这些依赖加入 NuGet 包中的方法,使得复杂...原创 2018-07-19 19:56:04 · 1174 阅读 · 0 评论 -
预编译框架,开发高性能应用 - 课程 - 微软技术暨生态大会 2018
微软技术暨生态大会(Tech Summit),2018 年在上海世博中心召开。这是最后一次的 Tech Summit 了;明年开始,中国大陆地区就要和其他国家和地区一样,进行全球 Ignite Tour 了。我也有幸成为分会场讲师团队的一员,课程是《预编译框架 - 开发高性能应用》。内容就是我博客中与 MSBuild / Roslyn / dotnet / NuGet 相关的内容;我们将利用这些...原创 2018-10-15 08:45:47 · 856 阅读 · 0 评论 -
Visual Studio 2017 以前的旧格式的 csproj Import 进来的 targets 文件有时不能正确计算属性(PropertyGroup)和集合(ItemGroup)
我在之前的博客中有教大家如何编写 NuGet 工具包,其中就有编写 .targets 文件。我在实际的使用中,发现 Visual Studio 2017 带来的含 Sdk 的新 csproj 格式基本上没有多少坑;然而旧的 csproj 文件却总是不能完美的运行,总是出错。关键是,不是每台电脑都出错,不是每个时机都出错。本文将讲一些坑。本文内容本文的前置知识问题原因解决办法衍生知识本文的...原创 2018-12-23 15:16:54 · 1328 阅读 · 0 评论 -
全局或为单独的项目添加自定义的 NuGet 源
本文介绍如何添加自定义的 NuGet 源。包括全局所有项目生效的 NuGet 源和仅在某些特定项目中生效的 NuGet 源。你可以前往 我收集的各种公有 NuGet 源 以发现更多的 NuGet 源,然后使用本文的方法添加到你自己的配置中。本文内容使用命令行添加在 Visual Studio 中添加直接修改配置文件为单独的项目添加自定义的 NuGet 源使用命令行添加在使用命令行之前,你...原创 2019-03-25 15:20:29 · 1979 阅读 · 0 评论 -
我收集的各种公有 NuGet 源
本文收集我发现的各种公共 NuGet 源。本文内容如何添加本文介绍的 NuGet 源?官方 NuGet 源NuGet 镜像其他 NuGet 源私有 NuGet 源NuGet 网站如何添加本文介绍的 NuGet 源?请参见:全局或为单独的项目添加自定义的 NuGet 源官方 NuGet 源官方源https://api.nuget.org/v3/index.json官方离...原创 2019-03-25 15:23:04 · 6203 阅读 · 0 评论 -
如何使用 MyGet 这个激进的 NuGet 源体验日构建版本的 .NET Standard / .NET Core
很多库都会在 nuget.org 上发布预览版本,不过一般来说这个预览版本也是大多可用的。然而想要体验日构建版本,这个就没有了,毕竟要照顾绝大多数开发者嘛……本文介绍如何使用 MyGet 这个激进的 NuGet 源,介绍如何使用框架级别的库的预览版本如 .NET Standard 的预览版本。本文内容加入 MyGet 这个 NuGet 源使用 .NET Standard 的预览版本加入 M...原创 2019-04-06 10:00:38 · 2285 阅读 · 0 评论 -
从零开始制作 NuGet 源代码包(全面支持 .NET Core / .NET Framework / WPF 项目)
系。跟着本教程你也可以制作出来一个源代码包,只不过可能遇到了问题的时候不容易调试和解决。制作一个源代码包接下来,我们将从零开始制作一个源代码包。我们接下来的将创建一个完整的解决方案,这个解决方案包括:一个将打包成源代码包的项目一个调试专用的项目(可选)一个测试源代码包的项目(可选)第一步:创建一个 .NET 项目像其他 NuGet 包的引用项目一样,我们需要创建一个空的项目。不...原创 2019-08-30 14:47:24 · 845 阅读 · 0 评论 -
.NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
在为 .NET 项目扩展 MSBuild 编译而编写编译目标(Target)时,我们会遇到用于扩展编译目标用的属性 BeforeTargets AfterTargets 和 DependsOnTargets。这三个应该分别在什么情况下用呢?本文将介绍其用法。BeforeTargets / AfterTargetsBeforeTargets 和 AfterTargets 是用来扩展编译用的。...原创 2019-08-30 15:04:54 · 1108 阅读 · 0 评论 -
语义版本号(Semantic Versioning)
版本号格式不陌生吧,.NET 传统的版本号格式类似这样 1.5.1254.0。本文将推荐一种新的版本号格式——语义版本号,格式类似这样 1.4.6-beta。我推荐语义版本号是因为这样的版本号自包含语义,而且这样的语义能够在版本库中体现出来。传统的版本号如果你只是知道传统版本号由四个部分组成,那么建议去官方文档 Assembly Versioning 了解一下这种版本号的定义。...原创 2018-04-15 10:36:30 · 4576 阅读 · 0 评论