问题标签 [packagereference]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
172 浏览

msbuild - 还原旧包(net40、netframework40)时,较新版本的 NuGet.exe 无法解析框架匹配

在这上面花了两天的大部分时间之后,是时候寻求一些帮助了。

我正在修改我们的 CI 构建,并且在 .net 4.6.1 上有一个 VS2017 解决方案,使用 packages.config 样式的 nuget refs,TeamCity 使用 NuGet runner v3.4.4 来恢复包。它最初可能使用 VS2008 或 10 构建,然后在 2018 年转换为 2017。有人检查了 packages 目录,多年来一直如此。

是时候让它达到更现代的标准了。我将项目转换为使用 packageReference,现在正在使用 msbuild 和 restore;build 目标来恢复我的包并构建解决方案。除了这个包外,效果很好。

即使在 VisualStudio 2017 15.8.7 中,构建(当然会进行还原)也无法使用 packageReference 还原 smtp-impostor 包,并出现以下错误:

在搜索“network40”时,我无法让 Google 找到一个有用的帖子。

如果我使用 nuget3.4.4 CLI,它工作正常(它似乎调用 msbuild 4.0)。如果我使用 nuget 5.6 CLI,我会收到错误消息;它使用 Visual Studio 2017 附带的 msbuild。

我看到很多关于如何让 nuget 使用不同版本的 msbuild 的帖子,但我看不到如何告诉 msbuild 使用早期版本的 nuget!

我试过了:

  1. 将解决方案重新定位到 v4.0 - 发生同样的错误 - 错误的第一部分只是更改为 net40
  2. 将 csproj 文件标签中的 ToolsVersion 设置为 14.0
  3. 将 csproj 文件中的 PlatformToolsVersion 属性设置为 14.0。

没有骰子。

我真的不想为这个项目保留 packages.config(以及额外的 CI 构建步骤),也不想将包的单个 DLL 签入到我的 repo 中。它看起来更像是我将不得不放弃 packageReference 升级并坚持使用旧式 nuget runner 包恢复。

有人见过这个吗?“netframework40”来自哪里的任何想法以及为什么较新的nuget无法与net40匹配?

先感谢您!

0 投票
1 回答
701 浏览

visual-studio - 具有核心项目依赖项的 NuGet 框架包

我正在尝试从 .NET Core 3.1 项目中引用,这是一个仅net40通过 NuGet 兼容性 shim 定位的 NuGet 包。该包已添加到我的项目中,但net40依赖项未添加。

包的结构如下:

Visual Studio 的包管理器列出了依赖项,但是安装时,VS 的“预览更改”窗口没有列出依赖项,并且确实没有安装。PackageB还针对net40

如果我这样做,它确实有效:

  • 将依赖项包含在“任何”(空白)依赖组中以及下net40
  • 移除net40依赖组并将包直接列在<dependencies>平面列表下
  • 删除net40下面lib\并使用平面列表

这些并不理想,因为它混淆了目标框架的真实性质。最后两个产生NU5128pack。为了将来的参考,我应该提一下,即使是这些场景也需要从本地缓存中删除依赖项才能正常工作(肯定是一个错误?)。

关于如何从此类包中提取依赖项的任何想法?这根本不支持吗?一个很好的测试示例是“Polly.Net40Async”包。

(VS:16.6.5,dotnet:3.1.302,PackageReference,Windows 10)

0 投票
2 回答
36 浏览

c# - (Nuget PackageReference)即使我不添加对 Xamarin.Forms 的引用,Xamarin 应用程序也会构建

我有一堆 Xamarin.Forms 跨平台应用程序的解决方案。我正在进行重构,我正在将东西迁移到 Nuget PackageReferences。这样做时,我在引用 Xamarin.Forms 的便携式应用程序项目中遇到了一些问题,因此我决定从这些应用程序中卸载包并重新安装,然后一切正常。但是,在这样做时,我意识到如果我没有在便携式应用程序包上重新安装 Xamarin.Forms,事情仍然可以编译和工作。

有人可以向我解释一下,其中包含 Xamarin.Forms 代码的 C# 项目如何可能不需要引用 Xamarin.Forms 包来编译?这与 Nuget PackageReferences 有关系吗? 在此处输入图像描述

0 投票
2 回答
203 浏览

visual-studio - 使用“包引用”为项目重新添加“内容”的工具或方法

  1. 将项目(原始 VS 格式)转换为使用包引用。伟大的。

  2. 项目参考“不支持内容”。有问题的选择,虽然这里没有辩论。

  3. 一些使用过的包包含“内容”,不能或不会更新为使用“内容文件”。唔..

可以使用哪些半自动化工具/方法从“不支持 contentFiles” +的 NuGet 依赖项中复制“内容” ?只适用于直接包裹是可以的。


+当然,可以手动打开每个单独的 NuGet 文件并复制内容。这个问题不是关于“为什么”进行切换和/或任何优点或权衡和/或如何“应该”编写包。问题是关于能够将“内容”恢复到项目源代码树中的自动化或半自动化方法。

0 投票
1 回答
1083 浏览

c# - Visual Studio References 显示未引用的 NuGet 包

我通过右键单击 VS 2019 中的 packages.config 文件将 .NET Framework 4.7.2 项目从 packages.config 转换为 PackageReferences 格式。

从那时起,Visual Studio 会显示我从“引用”节点中的项目中卸载的 NuGet 包的蓝色图标。真正奇怪的是,如果没有这个包,构建应该会失败,因为它在代码中使用,但构建成功!

  1. .csproj 文件中没有对此 NuGet 包的包引用。
  2. 项目目录下没有packages.config文件
  3. 我删除了 .vs 文件夹和旧包文件夹
  4. 重新启动 Visual Studio
  5. 问题依然存在
  6. 在 Visual Studio 中触发的 uninstall-package 命令表示未安装包。
  7. 然而,参考(蓝色图标)已显示并且项目已构建!

问题

  1. 如何从项目中完全删除这个包?
  2. 我现在如何阻止 Visual Studio 引用这个包?
0 投票
0 回答
100 浏览

.net - .net 标准旧 csproj,迁移到 packageReference

我想将 packages.config 迁移到 packagesReference。我有由 46 个项目组成的解决方案,对于 ASP.NET,无法迁移整个 .SLN,因此我们需要使用此解决方法逐个进行一个项目 -> asp.net 的 packageReference 问题

我已经成功了。但是当我尝试构建这个项目时,我遇到了多个错误,如下所示:

似乎项目没有看到包含的 NuGet。也许我们需要将它升级到新的 csproj?它仍然是旧的 2013/2015 版本。

第一个属性组如下所示:

下一个项目组是ProjectReference和其他控制器、内容等。

谢谢, 拉法尔

0 投票
1 回答
23 浏览

visual-studio - 如何从 Xamarin (VS) 项目中导入的 nuget 包中排除某些目录

我正在使用某些第三方 nuget 包的 xamarin 移动应用程序,我想阻止该 nuget 包中的某些目录包含在最终版本中,但我找不到任何有关如何的信息从导入的第三方 nuget 包中排除特定文件/文件夹。(特别是我希望包中的一些本地化文件夹不被复制到输出目录)

我正在使用包参考格式。

0 投票
1 回答
151 浏览

c# - Visual Studio:将文件与其包一起复制到输出中

我有一个名为“A”项目的项目,它包含一些文件(如 dll 或其他文件)。

在我的主项目中,我使用“项目引用”来引用这个项目,并在 A 的 .csproj 中添加一些上下文,如下所示:

它看起来很好,文件总是被复制到我的主项目的输出文件夹中。

但是在我将A项目变成Nuget包并且我的主项目使用“包引用”来引用它之后,A项目中的文件就在我的主项目的输出文件夹中消失了。

有什么办法处理吗?

谢谢!

0 投票
1 回答
77 浏览

c# - Nuget 包在安装时会从其参考项目中复制静态文件

我有一个名为“A”项目的项目,它包含一些静态文件(如 dll 或其他文件)。

它的 csproj 如下

所以根据内容,无论我使用项目引用还是包引用来引用A,静态文件都会一直复制到输出文件夹。

然后我有一个名为“B”的项目,它使用项目引用来引用 A。

B的csproj部分如下:

现在我将 B 设为 Nuget 包,并由 C 项目(包参考)引用。

但是来自 A 的静态文件似乎没有出现在 C 的输出文件夹中。

有什么办法处理吗?

谢谢!

0 投票
2 回答
235 浏览

visual-studio - MSBuild 条件未评估

我有一个可以采用 3 种“风味”之一的应用程序,风味仅取决于项目中引用的 NuGet 包。为了简化构建,我想使用自定义属性来定义风味,然后在包引用上使用条件。应该可以使用 Visual Studio 或使用 MSBuild 命令行来构建应用程序。我将此添加到 PropertyGroup:

我可以看到自定义属性设置正确,只是忽略了条件这是我尝试过的:

  1. 如下所述设置 PackageReference 本身的条件:https ://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files#adding-a-packagereference-condition
  2. 将条件包放在单独的 ItemGroup 中并在那里设置条件
  3. 与 #2 相同,但使用 Choose+When

只有 #3 有效,并且仅在 Visual Studio 中我需要一个可以在 Visual Studio 和 MSBuild 命令行中工作的解决方案

#1 看起来像这样:

#2 看起来像这样:

#3 看起来像这样:

我正在使用 VS2019 和 MSBuild 16 我错过了什么?