我分为两篇可以减少完成单个任务的理解难度: 如何创建一个基于 MSBuild Task 的跨平台的 NuGet 工具包 如何创建一个基于命令行工具的跨平台的 NuGet 工具包 第零步:前置条件 第一步.../ // 用来放引用程序集 .dll,文档注释 .xml 和符号文件 .pdb 的 + lib/ // 用来放那些与平台相关的 .dll/.pdb/.pri 的 + runtimes/ // 任意种类的文件...我们要让我们写的 dll(也就是那个 Task)能够工作,但是以上任何预定义的文件夹都不能满足我们的要求,于是我们建一个自定义的文件夹,取名为 tasks,这样 NuGet 便不会对我们的这个 dll...让我们自定义的 Task 开始工作,并能够进入断点 最简单能够让 DemoTool 这个自定义的 Task 进入断点的方式当然是加上 Debugger.Launch(); 了,就像这样: // DemoTool.cs...这一节我会说一些 Task 在 C# 代码和 .targets 文件中的互相操作。
查看项目属性,【生成】-->“常规”-->“条件编译和符号”中输入自定义内容。选择 “定义DEGUG常数” 与 “定义TRACE常量”,保存项目。 ?...关于预处理指令请参考《C# 预处理器指令》 使用预处理指令编写条件代码的实现方式如下: /// /// 判断字符串是否为null、空或者空白...使用 SDK 样式项目时,生成系统可识别预处理器符号,这些符号表示支持的目标框架版本表中所示的目标框架。....NET 目标框架的预处理器符号的完整列表如下: ? 除此之外,开发者可以通过配置自定义常量的方式达到与.NET目标框架中预定义的预处理符号相同的功能。...在编写C#代码时能够自动智能感知到自定义的常量 ? 上面是定义的统一的全局变量,也可以在每个条件编译分组中自定义常量 <!
以下是这部分的性能数据: C# 程序集数量对软件启动性能的影响 - 林德熙 不过,程序集中的类的数量对启动性能没有影响: C# 直接创建多个类和使用反射创建类的性能 - 林德熙 SourceFusion...使用通配符批量添加项目文件 - 吕毅 Roslyn 使用 Directory.Build.props 管理多个项目配置 - 林德熙 Roslyn 使用 Directory.Build.props 文件定义编译...管理公司配置 - 林德熙 现在,我们需要真的使用 NuGet 做一个自己的工具了: 如何创建一个基于 MSBuild Task 的跨平台的 NuGet 工具包 - 吕毅 如何创建一个基于命令行工具的跨平台的...- 林德熙 如果你的 NuGet 格式是旧的,或者说引用方式是旧的,推荐升级: 自动将 NuGet 包的引用方式从 packages.config 升级为 PackageReference - 吕毅...如何最快速地将旧的 NuGet 包 (2.x, packages.config) 升级成新的 NuGet 包 (4.x, PackageReference) - 吕毅 学会这些 NuGet 技能之后的一些应用
写在前面 其实很多公司或者资深的开发都有自己快速创建项目的脚手架的,有的是魔改代码生成器实现,有的直接基于T4,RazorEngine等模板引擎打造;但无论如何,其最终目的其实就是搭建一个自定义项目模板...今天我们聊聊:如何基于官方的cli donet new 命令创建自己的项目模板。..."identity": "HeinerFunction", //项目唯一id "shortName": "hfunc", //项目简写 "tags": { "language": "C#...="5.9.0" /> <PackageReference...这步的--Source参数,如果你有搭建好自己的nuget服务端的话改成你自己的; 如何使用一个模板 模板有了,怎么用这个就简单了; vs使用 在创建项目时直接选择自定义模板 不过这样的话,自定义参数都是用默认值
C# VSCode M1 C# 如何连接本地数据库? 1. 安装MySQL 下载MySQL软件,傻瓜式安装即可,安装完之后,在系统偏好号设置里会出现一个MySQL的图标。...Nvicate点击Connection,选择MySQL 填入数据库名,输入密码连接就可以了 连接上之后可以创建一个数据库Test 然后我们在数据库Test里面创建表,之后就可以使用C#...C# 连接本地MySQL 我们本地创建一个控制台命令程序Demo,然后完整代码如下 // 定义连接字符串。...="MySql.Data.MySqlClient" /> <PackageReference...info : 包“MySql.Data”(版本为 8.0.28)的 PackageReference 已添加到文件“/Users/morris/Desktop/Demo/Demo.csproj”。
请求 - Guide2IT - 博客园 创建 nuget 源代码 、符号包 参考: 从零开始制作 NuGet 源代码包及个人总结(全面支持 .NET Core / .NET Framework / WPF...项目) - jack_Meng - 博客园 如何使用新的符号包格式“.snupkg”发布 NuGet 符号包 | Microsoft Docs 让你发布的nuget包支持源代码调试 - czd890...你可以使用符号包 (.snupkg) 来分发这些符号,并改善 NuGet 包的调试体验。 请注意,符号包并不是使调试符号可用于库使用者的唯一策略。...nuget SetApiKey Your-API-Key 将主包发布到 nuget.org 后,按如下方式推送符号包。...备注 如果没有发布符号包,请检查是否已将 NuGet.org 源配置为 https://api.nuget.org/v3/index.json。 只有 NuGet V3 API 才支持符号包发布。
更新于 2018-09-07 04:40 写过 .NET Standard 类库或者 .NET Core 程序的你一定非常喜欢微软为他们新开发的项目文件(对于 C#...自动迁移 自动迁移的方法我写了一篇新的博客,请阅读 自动将 NuGet 包的引用方式从 packages.config 升级为 PackageReference。...不过,如果这是一个启动项目(exe),那么还需要添加应用程序定义 ApplicationDefinition 和其他启动属性。...ProjectTypeGuid 这个属性标志着此项目的类型,比如指定为 WPF 自定义控件库的项目新建文件的模板有自定义控件,而普通类库则不会有。 特别注意!...Studio 2017 upgrade guide Using the new .Csproj without .Net core · Issue #1688 · Microsoft/msbuild c#
如何最快速地将旧的 NuGet 包 (2.x, packages.config) 升级成新的 NuGet 包 (4.x, PackageReference) 发布于...然而迁移完才发现,这个项目竟然还依赖了大量的从 NuGet 2.x 时代发布的 NuGet 包,这些包并不能在 PackageReference 下好好工作。 于是,我准备将所有这些包都进行升级。...关于自动迁移 NuGet 包管理方式,可以阅读:自动将 NuGet 包的引用方式从 packages.config 升级为 PackageReference - 吕毅。...install.ps1 的存在是因为 packages.config 不支持 PackageReference 中的一些新特性(例如 NuGet 包中新的目录结构,例如包中自带的 msbuild targets...如果你不清楚 props 或者 targets 是什么意思,或者不知道怎么写它们,可以阅读我的另一篇文章理解 C# 项目 csproj 文件格式的本质和编译流程 - 吕毅。
Blazor WebAssembly是什么首先来说说WebAssembly是什么,WebAssembly是一个可以使C#,Java,Golang等静态强类型编程语言,运行在浏览器中的标准,浏览器厂商基于此标准实现执行引擎...需要注意的是,Blazor WebAssembly是一个完完全全的前端框架,只是逻辑代码不再使用JS编写,而是使用C#编写。...代码演示GrpcServer首先需要新建一个Grpc Server 然后为其引入 Grpc.AspNetCore.Web Nuget包,并开启grpc webapp.UseGrpcWeb(); // Must...linkid=2086909");app.Run();Blazor WebAssembly现在新建一个WebAssembly项目 为其引入以下nuget包 <PackageReference
关于 NuGet 包的目录结构,我在下面两篇文章中都有提到过: 如何创建一个基于 MSBuild Task 的跨平台的 NuGet 工具包 如何创建一个基于命令行工具的跨平台的 NuGet 工具包 官方对...Microsoft.NET.Sdk 的主要任务 在 Sdk 文件夹中搜索 Target 节点的个数,我得到了 174 个(随 .NET Core 2.1 发布);不过有一些是同名的,会被重写(类似于 C#...CollectPackageReferences 用于收集 PackageReference 收集到的所有依赖(也就是 NuGet 包依赖) CoreCompile 核心的编译过程 GenerateAssemblyInfo...Remove="LiteDB" /> </Target...欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布
For the Sdk attribute, the C# project file whose file extension is csproj becomes much more powerful...compiling Target is not so many and I pick up some core Target here: CollectPackageReferences: Collect the PackageReference...Target Name="ReferenceStaticLegacyPackage" BeforeTargets="CollectPackageReferences"> </Target...欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布
二、利用命令行创建.NET Core程序 通过.NET Core SDK在本地安装的dotnet 工具提供了基于预定义“脚手架(Scaffolding)”创建初始应用的命令(new)。...对于传统的.NET Framework应用来说,即使是一个空的C#项目,定义该项目的.csproj文件在内容和结构上显得比较复杂。...如下所示的代码片段给出了定义在这个文件的整个C#代码的定义,我们可以看到它定义了代表程序入口点的Main方法,并在这个方法中将字符串“Hello World”打印在控制台上。...如下所示的代码片段代表“Microsoft.AspNetCore.Hosting”这个NuGet包被成功安装后的内容,可以看出针对某个NuGet包的引用总是对应着.csproj文件中的某个节点,那么我们完全可以直接通过修改此文件的方式来完整针对NuGet包的安装。
当然,工具并不将 csproj 格式进行迁移,而是在不迁移格式的情况下,使用到 PackageReference 方式 NuGet 引用带来的好处。...相比于之前写的手工迁移,自动迁移方式没有改变 csproj 的格式,而只是将 NuGet 的引用方式改成了 PackageReference。...具体有哪些好处,可以阅读 将 WPF、UWP 以及其他各种类型的旧 csproj 迁移成基于 Microsoft.NET.Sdk 的新 csproj。...检查升级后的兼容性问题 packages.config 的 NuGet 包的管理方式有些功能是 PackageReference 没有的。...除非你在创建 NuGet 包时有自定义操作在根目录放了程序集。 解决升级后的编译错误 最可能出现的编译问题是 NuGet 包引用的版本冲突。
宣布 NuGet PackageReference 支持针对.NET Core 和.NET 5 或更高版本的 C++/CLI MSBuild 项目 - C++ Team Blog https://devblogs.microsoft.com.../cppblog/announcing-nuget-packagereference-support-for-c-cli-msbuild-projects-targeting-net-core/ 宣布...NuGet PackageReference 支持 Visual Studio 2022 17.3 版或更高版本中针对.NET Core 或.NET 5 或更高版本的 C++/CLI MSBuild 项目...使用.NET 7 的 Blazor 自定义元素来渲染动态内容 https://jonhilton.net/blazor-custom-elements/ 关于如何使用自定义元素在 Blazor 中构建动态元素的文章...bchavez/Bogus: 一个用于 C#、F#和 VB.NET 的简单的假数据生成器。基于著名的 faker.js,并从其移植。
并且,这些包即便安装到本来就有此类型的新框架上也能正常运行而不会出现多处类型定义的问题。 这些类型是如何做到框架内定义了,包里也定义了,却能像同一个类型一样作为参数和返回值传递?...netstandard2.0;netcoreapp2.0;netcoreapp3.1 接下来,我们的研究都将基于此项目。...结论 框架(.NET)和语言(C#)现在已是独立升级了,因此在使用旧框架的情况下,也可以使用新语言的特性; 旧框架使用的是完整功能的 dll(由 NuGet 包来决定使用正确的 dll); 新框架使用的是...欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://blog.walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
要以 NuGet 包的形式来使用 ILMerge,需要首先安装 ILMerge 的 NuGet 包: [NuGet Galleryilmerge](https://www.nuget.org/packages.../ilmerge) 或者直接在你的项目的 csproj 文件中添加 PackageReference: 1 2 3 <PackageReference Include="...需要注意 如果使用新的基于 Sdk 的项目文件,那么默认生成的 PDB 是 Portable PDB,但是 ILMerge 暂时不支持 Portable PDB,会在编译时提示错误: 1 2 3 4 5...args) 目前,GitHub 上有 issue 在追踪此问题: Support for portable PDBs · Issue #11 · dotnet/ILMerge ---- 参考资料 [C#...欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://blog.walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
---- 定义 Item 的元数据 就像下面这样,当引用一个 NuGet 包时,可以额外使用 Version 来指定应该使用哪个特定版本的 NuGet 包。...这里的 Version 和 PrivateAssets 就是 PackageReference 的元数据。.../" /> 引用元数据 引用元数据使用的是 % 符号...关于使用 exe 进行自定义编译的部分可以参考我的另一篇博客: 如何创建一个基于命令行工具的跨平台的 NuGet 工具包 - walterlv 关于写文件的部分可以参考我的另一篇博客: 在 MSBuild...欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://blog.walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
如何:编写简单的 Parallel.ForEach 循环 本文档使用 lambda 表达式在 PLINQ 中定义委托。...如果不熟悉 C# 或 Visual Basic 中的 lambda 表达式,请参阅 PLINQ 和 TPL 中的 Lambda 表达式。...系统上的处理器越多,并行方法的运行速度就越快。 对于一些源集合,有序循环可能会更快,具体视源大小以及该循环要执行的工作类型而定。 有关性能的详细信息,请参阅数据和任务并行的潜在问题。...对于.NET Core 项目,必须引用 System.Drawing.Common NuGet 包。 在 Visual Studio 中,使用 NuGet 包管理器安装该包。...或者,也可以在 *.csproj 或 *.vbproj 文件中添加对包的引用: XML复制 <PackageReference Include="System.Drawing.Common
本文来安利大家一个超强的库,这个库可以让你的 C# 代码利用上 GPU 显卡的性能,进行一些并行计算。这个库是基于 DirectX12GameEngine 的 ComputeSharp 库。...这个 ComputeSharp 库能支持的 .NET Standard 2.1 和以上的版本 通过 NuGet 安装 ComputeSharp 库,在 NuGet 包命令行输入下面代码 Install-Package...ComputeSharp 或者在 csproj 文件上添加下面代码 下面使用一个并行给一个 float 数组设置顺序值的例子告诉大家如何使用这个库 先定义 Shader 的实现,请看下面代码 public readonly...欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
> 或者这样: 不区分大小写。... 如果你希望了解 Reference PackageReference...以及上面 @ 的含义,可以阅读我的另一篇文章:理解 C# 项目 csproj 文件格式的本质和编译流程 - walterlv。...---- 参考资料 NuGet pack and restore as MSBuild targets - Microsoft Docs NuGet PackageReference format (package...欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布
领取专属 10元无门槛券
手把手带您无忧上云