首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

以下是这部分的性能数据: C# 性能分析 反射 VS 配置文件 VS 预编译 - 林德熙 额外的,如果不是收集而单单只是使用的话,这里是性能数据: C# 直接创建多个类和使用反射创建类的性能 - 林德熙...csproj 中写死常量啦) - 吕毅 Roslyn 在项目文件使用条件判断 - 林德熙 在了解 csproj 文件结构之后,你可以通过迁移一些项目,并确保他们编译通过来练习: 将 WPF、UWP...MSBuild.Sdk.Extras - 吕毅 接着,csproj 中的重要内容 Target 对理解编译过程非常重要,因为它决定了如何编译这个项目: Roslyn 如何使用 MSBuild Copy...通过 nuget 统一管理信息 - 林德熙 Roslyn 通过 Nuget 管理公司配置 - 林德熙 现在,我们需要真的使用 NuGet 做一个自己的工具了: 如何创建一个基于 MSBuild Task...欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://blog.walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布

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

    包治百病 | 如何将一个.NET Core类库发布NuGet

    登录以后,建议大家先去搞一套API Key,并记在OneNote里,虽然本文讨论的范围内不需要使用这套Key,但如果以后你希望通过NuGet CLI或自动化工具(如Azure DevOps)发布NuGet...使用 VS2019 创建NuGet包 以我的一个类库Edi.Blog.Pingback为例,开发完成以后,在项目文件上点右键,打开属性对话框。 ?...Package id 是最重要的,即最终用户安装你的NuGet包时,使用的ID。这和Product是不一样的。...其实在VS界面上进行的这些操作,最终是反映工程文件里的(Edi.Blog.Pingback.csproj),也就是说,如果你是个VSCode党,也可以通过手工编辑工程文件的方式来完成这一系列的设置。...使用Release是因为面对的是生产环境,希望最终用户使用编译器优化过的dll。 // 其实,一个NuGet包可以同时包含Release和Debug两个版本的dll,不在本文讨论范围内。 ? ? ?

    97330

    MSBuildRoslyn 和 NuGet 的 100 个坑

    MSBuild/Roslyn 和 NuGet 的 100 个坑 发布于 2018-07-04 13:29...我摘取了一些入门系列文章,也许你可以通过阅读这些来了解下: 理解 C# 项目 csproj 文件格式的本质和编译流程 迁移 csproj 文件基于 Microsoft.NET.Sdk 创建基于 MSBuild...将 WPF、UWP 以及其他各种类型的旧 csproj 迁移成基于 Microsoft.NET.Sdk 的新 csproj 一文讲述了如何为项目文件添加 Sdk 属性,以便项目能够体验最新的 Microsoft.NET.Sdk...唯一的解决办法就是清除项目中的所有 NuGet 缓存,使用 git clean -xdf。...欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布

    1.3K20

    dotnet 打包 NuGet 的配置属性大全整理

    了解这部分知识减少一些奇怪的问题和奇怪的决策 基本上使用 dotnet 打包 NuGet 包时,都是通过配置 csproj 项目文件来完成实现功能。...其中 csproj 文件有多个版本,当前主力推荐使用的是 SDK 风格的 csproj 格式。...- walterlv 一些前置知识博客: 理解 C# 项目 csproj 文件格式的本质和编译流程 - walterlv 项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要...如何设置图标 现在推荐将图标作为文件放入包里面,而不是使用外链图片下载地址,解决一些奇怪的地方无法拉到包或泄露隐私 GeneratePackageOnBuild 生成的时候,构建出 NuGet 包。...进行 NuGet 发布的时候,将注释的 XML 文件带到 NuGet 包里面,可以方便让引用此 NuGet 包的项目获取到库的代码注释 EmbedAllSources 将源代码嵌入 PDB 文件里面,

    1.5K20

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

    如何创建一个基于命令行工具的跨平台的 NuGet 工具包 发布于 2018-05-12 01:09 更新于...-- 作者的 Id,如果要发布 nuget.org,那么这里就是 NuGet 用户 Id。...(如果你想了解更多 csproj 中的 NuGet 属性,可以阅读我的另一篇文章:项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦) - 吕毅)...有两种不同的方式: 直接传数据,这些数据可以被捕获成属性或者项,具体可以阅读我的另一篇博客: 如何使用 MSBuild Target(Exec)中的控制台输出 报告编译警告和编译错误,具体可以阅读我的另一篇博客...本地测试 NuGet 包 在发布 NuGet 包之前,我们可以先在本地安装测试。

    1K20

    MSBuildRoslyn 和 NuGet 的 100 个坑

    我摘取了一些入门系列文章,也许你可以通过阅读这些来了解下: 理解 C# 项目 csproj 文件格式的本质和编译流程 迁移 csproj 文件基于 Microsoft.NET.Sdk 创建基于 MSBuild...将 WPF、UWP 以及其他各种类型的旧 csproj 迁移成 Sdk 风格的 csproj 一文讲述了如何为项目文件添加 Sdk 属性,以便项目能够体验最新的 Microsoft.NET.Sdk 编译体验...但是,只有使用了 Sdk 风格的 csproj 文件才会在执行了此命令后重新生成正确的包引用缓存文件;原来的格式并不会生成此文件,也就是说,无法修复。...唯一的解决办法就是清除项目中的所有 NuGet 缓存,使用 git clean -xdf。...欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://blog.walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布

    37830

    csproj 文件中那个空的 NuGetPackageImportStamp 是干什么的?

    而传统的 csproj 由于没有指定 Sdk 特性,所以很多的特性如果需要执行,需要先 Import csproj 中,或者不断地修改 csproj 文件的内容以添加新的功能。...如果你使用新格式的 csproj 文件,那么无论你如何安装 NuGet 包,都是不会看到 NuGetPackageImportStamp 节点出现的。...它会在某些 NuGet 包安装完后出现在 csproj 文件中。...由于新的 csproj 文件能够识别到外部 Import 文件的改变,所以其实并不需要这样的机制来让 Visual Studio 感知文件的改变。...欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://blog.walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布

    27820

    如何最快速地将旧的 NuGet 包 (2.x, packages.config) 升级成新的 NuGet 包 (4.x, PackageReference)

    如何最快速地将旧的 NuGet 包 (2.x, packages.config) 升级成新的 NuGet 包 (4.x, PackageReference) 发布于...然而迁移完才发现,这个项目竟然还依赖了大量的从 NuGet 2.x 时代发布NuGet 包,这些包并不能在 PackageReference 下好好工作。 于是,我准备将所有这些包都进行升级。...如果你并没有迁移过 csproj 文件,只是升级了 NuGet 的包管理方式,也可能会遇到问题。...所以,如果 NuGet 包在发布时满足目录要求,那么即便 install.ps1 不用执行也能保证包的行为正常。...欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布

    73210

    win10 uwp 上传Nuget 让别人用我们的库 Nuget下载打包Nuget上传命令行使用Nuget

    Nuget 我们的开发经常使用别人的dll,那么我们需要每次都从网上下载,然后复制到我们的项目, 而不知道我们的dll是否安全?...当我们的库更新的时候,我们又需要从网上搜索,这样不好,于是我们就用NugetNuget可以 让我们把我们做出来的东西发在网上让别人下载,需要搜索名称就可以下载,然后更新会通知 本文主要讲我们如何制作一个库上传...Nuget,让别人可以使用,做法很简单,先下载软件后制作,上传。...打包Nuget 我们用MSBuild命令进入项目文件夹,如果找不到MsBuild就用cmd 项目文件夹就是我们要打包项目*.csproj所在文件夹 我的工程文件smms,打开smms.csproj所在文件夹...安装完搜索就可以搜索 ?

    93110

    如何从零开发一个NuGet软件包?

    但是,您是否曾经尝试并创建过一个nuget包呢?Nuget软件包比较容易引入类库中。因此,可以使用NuGet软件包管理器将nuget软件包添加到任何项目中。...例如,如果您的.csproj文件是多目标的,您可以像我一样看到每个目标框架的文件夹。 package: 此文件夹包含有关您的包的更多元数据文件。...在本文中,我不会谈论如何构建库。我将展示如何将它们转换为可移植的nuget包。因此,让我们从第一步开始。 1-选择目标框架 选择目标框架是非常重要!只需计划你的项目并定义依赖项即可。...转到nuget.org并登录到你的帐户。然后导航发布”选项卡,并将您的.nupkg文件拖放到该页面中。填写有关包裹的信息字段并提交。仅此而已!这是在nuget.org上发布软件包的最简单方法。...dotnet pack --configuration Release -o .packages/ 这意味着在发布模式下构建项目,并将输出文件放置“ .packages”文件夹中。

    1.3K30

    自动将 NuGet 包的引用方式从 packages.config 升级为 PackageReference

    当然,工具并不将 csproj 格式进行迁移,而是在不迁移格式的情况下,使用到 PackageReference 方式 NuGet 引用带来的好处。...当然,没有这些功能是因为“不需要”,而不是“还没支持”;所以大部分的迁移都不会发生问题(除非发布使用的是特别老旧的 nuget.exe,或者发布者利用了一些丧心病狂的黑科技)。...当然,在制作和发布 NuGet 包时,尽量使用非特定版本的依赖包,能够极大地避免这种问题带来的影响。...关于如何指定非特定版本的依赖包,可以阅读 Version ranges and wildcards 版本范围和通配符。...欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布

    1.7K20

    windows右键菜单自动打包发布nuget,没有CICD一样方便!

    来试试使用windows右键菜单吧 先看右键效果图 有时候我们可能没有CI/CD的条件来自动发布nuget包,这个时候文件夹右键菜单就显得十分高效了 如图所示,直接在文件夹右键可以看到又nuget publish...的菜单按钮 如何实现 具体的操作是修改 windows 的注册表,具体可以参考 windows 下如何修改右键菜单 一文 这里我写了2个注册表脚本分享一下 bata版发布: Windows...{$_.psiscontainer -eq $true} | Where-Object {Test-Path (join-path $_.fullname *) -include '*.csproj'...-s http://192.168.1.24:8080;del $nupkg\"" 搞定 将文本另存为 xxx.reg(注意,文件编码需要UTF-16 LE, 不然右键菜单点击会报错),双击即可导入系统...最后 欢迎大家体验评论,使用后欢迎各位给出更好的脚本方案评论

    19020

    dotnet 用 NuGet 将自己的工具作为 dotnet tool 分发

    我写了一个有趣的工具,我如何将这个工具给小伙伴予力众生呢?只需要设定这个工具是 dotnet tool 工具就可以通过 NuGet 分发出去啦。...注意要能双击进去编辑 csproj 要求使用 SDK Style 格式的项目文件,本文也只对此格式的项目文件生效 ?...而 azureblobsync 就是在上方给 csproj 设置的工具启动名了 如果觉得上面步骤太繁琐,也可以忽略,毕竟这只是测试使用而已。...作为自信的程序员,代码不用测试就能发布(这是说笑的,小朋友不要模仿 分发工具 接下来我如何将我这个库上传到 NuGet 官方网站?...欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布

    1.1K20

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

    (所谓隐式地 Import,只不过是被间接地引入,在 csproj 文件中看不到这个文件名而已。至于如何间接引入,因为涉及 Targets,所以后面一起说明。) <?...当然如果你非常感兴趣,还可以阅读我另外几篇关于 Target 使用相关的文章: 如何编写基于 Microsoft.NET.Sdk 的跨平台的 MSBuild Target - 吕毅 如何创建一个基于命令行工具的跨平台的...NuGet 工具包 - 吕毅 如何创建一个基于 MSBuild Task 的跨平台的 NuGet 工具包 - 吕毅 每次都要重新编译?...让跨平台的 MSBuild/dotnet build 的 Target 支持差量编译 - 吕毅 如何最快速地将旧的 NuGet 包 (2.x, packages.config) 升级成新的 NuGet...欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布

    2.6K10

    Unity3D 入门:为 Unity 的 C# 项目添加 dll 引用或安装 NuGet

    简单了解项目根目录的 sln 文件和 csproj 文件将有助于你理解为什么要像本文一样引用 dll 和安装 NuGet 包,因此如果你不了解,建议先阅读: Unity3D 入门:使用 Visual Studio...开发 Unity C# 脚本,说说根目录的那些 sln 和 csproj 文件 - walterlv 如何引用 dll 或者安装 NuGet 包 在 Unity 中,是给 C# 脚本引用 dll 或者安装...选 Mono 那么使用 Mono 虚拟机运行,选 IL2CPP 那么会编译 IL 静态的 cpp 文件不依靠 Mono VM。...使用第三方 NuGet 包管理器——NuGetForUnity 特别注意:反射需要额外支持 如果你前面的脚本后端(Script Backend)选择了 IL2CPP,那么小心 dll 的元数据会丢失,依赖于反射的功能也将崩溃...欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://blog.walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布

    2.5K20

    阻止某个 NuGet 包意外升级

    典型的情况是软件版本进行了大规模的不兼容的升级,需要对旧格式的数据进行读取,以便迁移到新格式的数据。...---- 如果你只关心结果,请直接前往最后一节:终极解决方案 准备工作 本文提供的方法仅适用于使用了 Microsoft.NET.Sdk 的新 csproj 项目文件。...(当然并不是说旧的 csproj 不能使用这种方法,只是写法上会有差别,我没有去研究如何编写。)...如果你的项目还在使用旧的 csproj 格式,推荐阅读 将 WPF、UWP 以及其他各种类型的旧 csproj 迁移成基于 Microsoft.NET.Sdk 的新 csproj 迁移成新格式之后再开始...欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布

    1.3K20

    【实验手册】使用Visual Studio Code 开发.NET Core应用程序

    本实验将介绍如何开发.NET Core跨平台应用程序,以及如何在 Linux、OS X 和 Windows 上的 Visual Studio Code (code.visualstudio.com) 中编写代码...一旦您安装了 NuGet 项目管理器, 您还将使用它来安装 NuGet 包。 ? 练习2:使用命令行界面构建....这意味着,当你学会如何使用工具,你可以从任何支持的平台上以同样的方式使用它。...首先导航要添加NuGet软件包的项目: PS D:\WorkTest\piedpiper\src> cd ....或者,我们可以使用版本参数指定要安装的版本: dotnet add package shouldly -v 2.8.3 更新NuGet包 将NuGet软件包更新到最新版本也是一样简单,只需使用相同的命令而不使用版本参数

    3.3K90

    Roslyn 通过 Nuget 引用源代码 在 VS 智能提示正常但是无法编译

    本文告诉大家如果在 Nuget 引用源代码的方式引用源代码,在 VisualStudio 的智能提示和 Resharper 的智能提示都能找到对应的类,但是在 VisualStudio 编译或使用命令行...msbuild 编译时提示找不到类 这个问题是 msbuild 的一个坑,主要是没有主动引用 .nuget.g.props 和 .nuget.g.targets 文件,使用 Microsoft.NET.Sdk...作为 Sdk 的项目文件会自动在 obj 文件夹下生成 project.assets.json、$(ProjectName).csproj.nuget.cache、$(ProjectName).csproj.nuget.g.props...具体请看MSBuild/Roslyn 和 NuGet 的 100 个坑 - walterlv 但是在使用 Nuget 引用源代码的时候,因为此时源代码还没加入编译,在编译的时候 msbuild 找不到类...欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://lindexi.gitee.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布

    87220

    win10 uwp 上传Nuget 让别人用我们的库

    Nuget 我们的开发经常使用别人的dll,那么我们需要每次都从网上下载,然后复制到我们的项目, 而不知道我们的dll是否安全?...当我们的库更新的时候,我们又需要从网上搜索,这样不好,于是我们就用NugetNuget可以 让我们把我们做出来的东西发在网上让别人下载,需要搜索名称就可以下载,然后更新会通知 本文主要讲我们如何制作一个库上传...Nuget,让别人可以使用,做法很简单,先下载软件后制作,上传。...打包Nuget 我们用MSBuild命令进入项目文件夹,如果找不到MsBuild就用cmd 项目文件夹就是我们要打包项目*.csproj所在文件夹 我的工程文件smms,打开smms.csproj所在文件夹...version 版本号:必须的三段式的版本号,注意每次发布必须大于上一次的版本号,否则将会被nuget驳回。

    52110
    领券