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

MSBuildRoslyn 和 NuGet 的 100 个坑

不存在的版本(新版本已修复) 如果某个包的特定版本在所有源中不存在,那么安装此包的项目再也无法更新或者卸载此包了(也就别想再编译通过了)。...编译不通过后无法安装和更新 NuGet 包 有些情况下,会因为项目没有办法完成编译导致无法安装和更新某些 NuGet 包;但编译不通过其实就是这个 NuGet 包导致的(比如某个测试包)。...其中的 NuGet 原生支持是非常清爽的。 升级时很清爽,降级就不爽了!这种情况会发生在新分支中进行了项目文件升级,随后切换回之前的分支;这时相当于在降级。...其实这是只有新的项目文件才会出现的编译错误,而错误原因是 NuGet 的缓存文件中与包引用相关的信息已经不正确了,需要运行 nuget restore 或者 dotnet restore 重新更新此文件才行...但是,只有使用了 Sdk 风格的 csproj 文件才会在执行了此命令后重新生成正确的包引用缓存文件;原来的格式并不会生成此文件,也就是说,无法修复。

60430

MSBuildRoslyn 和 NuGet 的 100 个坑

不存在的版本(新版本已修复) 如果某个包的特定版本在所有源中不存在,那么安装此包的项目再也无法更新或者卸载此包了(也就别想再编译通过了)。...编译不通过后无法安装和更新 NuGet 包 有些情况下,会因为项目没有办法完成编译导致无法安装和更新某些 NuGet 包;但编译不通过其实就是这个 NuGet 包导致的(比如某个测试包)。...其中的 NuGet 原生支持是非常清爽的。 升级时很清爽,降级就不爽了!这种情况会发生在新分支中进行了项目文件升级,随后切换回之前的分支;这时相当于在降级。...其实这是只有新的项目文件才会出现的编译错误,而错误原因是 NuGet 的缓存文件中与包引用相关的信息已经不正确了,需要运行 nuget restore 或者 dotnet restore 重新更新此文件才行...但是,只有使用了 Microsoft.NET.Sdk 的新 csproj 文件才会在执行了此命令后重新生成正确的包引用缓存文件;原来的格式并不会生成此文件,也就是说,无法修复。

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

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

    总览 csproj 文件 相信你一定见过传统的 csproj 文件格式。就算你几乎从来没主动去看过里面的内容,在版本管理工具中解冲突时也在里面修改过内容。...不过,既然这篇文章的目标是理解 csproj 文件格式的本质,那我当然不会把这么复杂的文件内容直接给你去阅读。 我已经将整个文件结构进行了极度简化,然后用思维导图进行了分割。...dll 文件从 MSTest 的 NuGet 包中以链接的形式包含到项目中,并且此文件在 Visual Studio 的解决方案列表中不可见。...原因显而易见了——为了在多个项目中使用,一处更新,到处生效。所以有没有觉得很好玩——如果把版本号单独放到 props 文件中,就能做到一处更新版本号,到处更新版本号啦!...NuGet 包时自动为我们在 csproj 中插入了以上代码。

    3K10

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

    ... 15 任务3:向项目添加项目引用... 16 任务4:将NuGet包添加到项目或更新它... 17 概述 开源和跨平台开发是Microsoft 的当前和将来至关重要的策略。....八、 我们现在配置一下这个新生成的task.json吧。也就是在tasks配置项中添加如下内容,指定一下任务在build时的直接命令对象。...十、 下面我们演示给项目添加一个Nuget包 利用我们前面安装的VS code 的Nuget 包扩展插件,我们选中HelloWorld.Web 项目,使用UI菜单查看- 命令面板: ?...0 个警告 0 个错误 任务4:将NuGet包添加到项目或更新它 假设我们要将NuGet包添加到我们的一个项目中,我们可以使用该add package命令来执行此操作。...或者,我们可以使用版本参数指定要安装的版本: dotnet add package shouldly -v 2.8.3 更新NuGet包 将NuGet软件包更新到最新版本也是一样简单,只需使用相同的命令而不使用版本参数

    4.1K90

    阻止某个 NuGet 包意外升级

    阻止某个 NuGet 包意外升级 2018-06-29 09:59 出于兼容性考虑,我们可能不再更新某个项目的 NuGet 包。...然而,团队开发的软件可能因为某个小伙伴不知道这样的历史问题,从而手抖将某个不应该更新的 NuGet 包更新了,于是迁移就挂了。 本文提供了一种方法来避免某些特定 NuGet 包的升级。...---- 如果你只关心结果,请直接前往最后一节:终极解决方案 准备工作 本文提供的方法仅适用于使用了 Microsoft.NET.Sdk 的新 csproj 项目文件。...LiteDB 是一个不应该被升级的 NuGet 包,但是最新版本已经是 4.1.4 了,很容易被团队中的其他小伙伴误升级。 ?...并且在安装了新版本的包后,将因为多次引用不同版本而导致编译不通过。 所以,方案否决。 最终解决 既然无法阻止发现这个 NuGet 包,那思路就换成无论如何更新,都无效好了。

    1.5K20

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

    更新于 2018-06-29 08:52 在前段时间我写了一篇迁移 csproj 格式的博客 将 WPF、UWP 以及其他各种类型的旧 csproj...所以,如果 NuGet 包在发布时满足目录要求,那么即便 install.ps1 不用执行也能保证包的行为正常。...XDT 变换将失效 使用 PackageReference 后,在安装和写在的过程中 XDT 转换将不会执行,并且会忽略 .xdt 文件。 在 Web 应用开发中会更留意这个问题。...packages.config 方式的包引用要求在 csproj 文件中显式指定一个依赖的包的版本,于是无论依赖使用了哪个版本,最终都由显式指定的版本来指定。...这时需要将项目的依赖方式改为之前的方式。 当然,在制作和发布 NuGet 包时,尽量使用非特定版本的依赖包,能够极大地避免这种问题带来的影响。

    1.9K20

    帮助官方 NuGet 解掉 Bug,制作绝对不会传递依赖的 NuGet 包

    那么,除非我在 B 包安装完之后,明确在 B 的 csproj 文件中写以下代码,否则 B 包发布出去后,安装 B 包的项目 C 就会同时安装上 A 包。...然而我们希望做出来的 A 包具备这样的特点: 小伙伴给 B 安装 A 包的时候,不用额外为 A 包写配置依赖的代码; 小伙伴为 C 安装 B 的时候,不会出现 A 乱入的情况。...更新: 官方的 NuGet 在更新到 4.9 及以上之后,此属性再次生效。...添加方法是在 csproj 文件中添加一行属性: 添加后,如果开发者安装了此 NuGet 包,将自动生成以下代码...▲ 项目的结构 以下是 A 项目的 csproj 文件,包含将 Package.targets 在打包 NuGet 包时改名的部分。

    1.2K50

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

    一旦您安装了 NuGet 项目管理器, 您还将使用它来安装 NuGet 包。 ? 练习2:使用命令行界面构建....八、 我们现在配置一下这个新生成的task.json吧。也就是在tasks配置项中添加如下内容,指定一下任务在build时的直接命令对象。...十、 下面我们演示给项目添加一个Nuget包 利用我们前面安装的VS code 的Nuget 包扩展插件,我们选中HelloWorld.Web 项目,使用UI菜单查看- 命令面板: ?...0 个警告 0 个错误 任务4:将NuGet包添加到项目或更新它 假设我们要将NuGet包添加到我们的一个项目中,我们可以使用该add package命令来执行此操作。...或者,我们可以使用版本参数指定要安装的版本: dotnet add package shouldly -v 2.8.3 更新NuGet包 将NuGet软件包更新到最新版本也是一样简单,只需使用相同的命令而不使用版本参数

    5.7K102

    nuget服务器搭建,以及如何发布一个Nuget包

    下载nuget.exe nuget.exe下载地址:https://www.nuget.org/downloads。 下载完成后,不需要安装。请将nuget.exe复制到需要打包的项目文件夹中 2....注意 此类库更新版本之后,再打包成.nuget文件,是不会重新生成.nuspec文件。...,默认创建的dll是没Version, AssemblyVersion, FileVersion节点,需要自己手动添加;以及在更新版本后 .nuspec文件会根据版本重新创建一个: 1.3 配置nuget...,也就是包含.csproj文件的目录 dotnet pack 命令成功后,会在bin/Debug目录下创建.nupkg文件 发布包 必须进入到.nupkg包所在位置 ..\.....引用包 在vs中的引用 在vscode中的引用 配置nuget.config配置文件 <?xml version="1.0" encoding="utf-8"?

    4.9K90

    .net core迁移实践:项目文件csproj的转换

    随着net core的不断更新和生产可用,越来越多的人把现有的应用迁移和部署到net core平台。本文将分享迁移过程中的一个环节,给大家做一下参考。...然而由于传统.net framework的csproj文件内容繁杂,可读性和操作性较差,因此微软重新定义了新样式的csproj文件内容样式。...其中包含了项目的编译配置、调试生成配置、大量的nuget文件依赖、大量的cs源代码文件路径等,造成了此文件内容的非常繁多,阅读和分析都有比较大的困难。...由以上对比可见,SDK样式的csproj内容精简的一大原因就是文件的依赖(cs源码和nuget包文件)不需要在csproj中明确写明。...另外针对nuget包依赖的文件也是如此,csproj不再维护nuget包内的文件明细,而改为PackageReference以nuget包为单位来管理依赖。

    1.5K30

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

    ,在这个文件夹中的文件会在编译时拷贝到输出目录(保持文件夹结构) + content/ // 这里放 .props 和 .targets 文件,会自动被 NuGet 导入,成为项目的一部分(要求文件名与包名相同...(如果你想了解更多 csproj 中的 NuGet 属性,可以阅读我的另一篇文章:项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦) - 吕毅)...第三步:编写 Target .targets 文件是对项目功能进行扩展的关键文件,由于安装 NuGet 包会自动导入包中的此文件,所以它几乎相当于我们功能的入口。 现在,我们需要徒手编写这个文件了。...更多 MSBuild 全局参数,可以参考我的另一篇文章项目文件中的已知属性(知道了这些,就不会随便在 csproj 中写死常量啦) - 吕毅。...,就不会随便在 csproj 中写死常量啦) - 吕毅 项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦) - 吕毅 当然,还有一些正在编写,过一段时间可以阅读到

    1.7K10

    将 .NET Core 项目打一个最简单的 NuGet 源码包,安装此包就像直接把源码放进项目一样

    安装 NuGet 包后,不会生成任何程序集引用,而是相当于将源码直接放入被安装的程序集中一样。...将源码加入 NuGet 包 在 项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦) 中,我说到了项目文件中的各种 NuGet 属性。...这样,生成的 dll 将只会放入 tools 文件夹中,而不会被引用。...安装 NuGet 包时引入源码 为了让源码能随着包的安装加入到目标项目,我们需要 targets 文件来将源码引入。 在项目中新建 Assets 文件夹,这将用来放即将存入 NuGet 包中的文件。...新建 Assets\build\Package.targets 文件,这个文件会被自动引入到被安装的项目中。 ? 于是我们在 csproj 中额外添加一些代码将这个文件在打包时改名为正确的名称。

    1.1K20

    帮助官方 NuGet 解掉 Bug,制作绝对不会传递依赖的 NuGet 包

    更新于 2018-08-18 03:04 如果你希望做一个 NuGet 工具包,那么这个包一定不能作为依赖传递给下一个包。...那么,除非我在 B 包安装完之后,明确在 B 的 csproj 文件中写以下代码,否则 B 包发布出去后,安装 B 包的项目 C 就会同时安装上 A 包。...然而我们希望做出来的 A 包具备这样的特点: 小伙伴给 B 安装 A 包的时候,不用额外为 A 包写配置依赖的代码; 小伙伴为 C 安装 B 的时候,不会出现 A 乱入的情况。...▲ 项目的结构 以下是 A 项目的 csproj 文件,包含将 Package.targets 在打包 NuGet 包时改名的部分。...于是 B 项目的 csproj 文件全文内容如下: netcoreapp2.1

    99220

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

    简单了解项目根目录的 sln 文件和 csproj 文件将有助于你理解为什么要像本文一样引用 dll 和安装 NuGet 包,因此如果你不了解,建议先阅读: Unity3D 入门:使用 Visual Studio...开发 Unity C# 脚本,说说根目录的那些 sln 和 csproj 文件 - walterlv 如何引用 dll 或者安装 NuGet 包 在 Unity 中,是给 C# 脚本引用 dll 或者安装...因为 Unity 编辑器生成了 sln 和 csproj,所以在 Visual Studio 里安装也是可以的,不过这里的安装并不会真实生效,而是我们在 Unity 项目的根目录的 Packages 文件夹中能找到我们安装的...NuGet 包,也是从对应的文件夹中取出来 dll 丢到 Plugins 文件夹中。...IL2CPP 平台时不会删除必要的数据。

    4.2K20

    .net 知新:【4】NuGet简介和使用

    通常,此类代码捆绑到“包”中,其中包含编译的代码(如 DLL)以及在使用这些包的项目中所需的其他内容。...PackageReference 仅列出那些直接安装在项目中的 NuGet 包,不会显示引用包所包含的低级依赖更加简洁。 比如我们使用nuget安装NPOI包,它的依赖如下: ?...可以进行程序包的查找和安装的包管理,对包进行卸载更新。 在右上角有一个程序包源,可以进行包源设置,设置包源地址。默认是将 NuGet.org 用作 NuGet 客户端的包存储库。...在包的 NuGet.org 页面上所示的包说明可以在 .csproj 文件中的 设置,或者通过 .nuspec 文件中的 $description 拉取。....nuspec 文件是包含包元数据的 XML 清单,.nuspec 当你创建包时将生成。

    2.5K40

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

    本文整理 dotnet 打包 CBB 组件为 NuGet 包时可以使用的配置的各个属性 本文将会持续更新,可以通过搜 《dotnet 打包 NuGet 的配置属性大全整理 林德熙》 找到我主站的博客,避免各个备份地址陈旧的内容误导...了解这部分知识减少一些奇怪的问题和奇怪的决策 基本上使用 dotnet 打包 NuGet 包时,都是通过配置 csproj 项目文件来完成实现功能。...- walterlv 一些前置知识博客: 理解 C# 项目 csproj 文件格式的本质和编译流程 - walterlv 项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要...此时构建时生成的 PDB 文件里面将包含项目的所有生成相关的源代码。...如果需要特殊指定某些文件,请参阅 Roslyn 打包自定义的文件到 NuGet 包 虽然将 PDB 打包到 NuGet 包里面,有些版本的 VisualStudio 不会自动拷贝 PDB 文件,解决方法请看

    1.7K20

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

    ,它也是Nuget包,其中包含了一堆系统库的NuGet程序包,包含.netcore的基础运行时和基础类库。...在安装VS2015 Update3时,.NET Core所需的官方依赖包都已经安装在了(默认安装)C:\Program Files (x86)\Microsoft SDKs\NuGetPackages目录下...,在nuget管理中也可以看到这是默认的离线包目录,我们需要什么样的包只要把它复制到这个目录,在nuget管理中的程序包源选择离线的源即可。...它的工作方式 和 npm以及 RubyGems非常相似,你可以把这个文件签入版本库,也可以不签入,但此文件不存在时,将运行 NuGet restore 还原以重新创建。...否则,会加载包文件夹中编译的二进制程序。

    2.5K80

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

    dotnet build 基础 你需要先了解 csproj 文件的结构,以便进行后续的学习: 理解 C# 项目 csproj 文件格式的本质和编译流程 - 吕毅 项目文件中的已知属性(知道了这些,就不会随便在...MSBuild.Sdk.Extras - 吕毅 接着,csproj 中的重要内容 Target 对理解编译过程非常重要,因为它决定了如何编译这个项目: Roslyn 如何使用 MSBuild Copy...基础 项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦) - 吕毅 可以使用 NuGet 做一些不是传统 dll 引用的功能: Roslyn 通过...NuGet 工具包 - 吕毅 如何创建一个基于命令行工具的跨平台的 NuGet 工具包 - 吕毅 在制作跨平台的 NuGet 工具包时,如何将工具(exe/dll)的所有依赖一并放入包中 - 吕毅 NuGet...NuGet 源码包,安装此包就像直接把源码放进项目一样 - 吕毅 Roslyn 如何基于 Microsoft.NET.Sdk 制作源代码包 - 林德熙 Roslyn 基础 Roslyn 由于其丰富且易用的

    78140
    领券