标签: packagereference

更新包运行时约束包引用升级版本

在 .NET 的packages.configNuGet旧系统下,我可以通过使用allowedVersionsPackage 元素上的属性来限制更新包时考虑的包的可能版本

<package id="Newtonsoft.Json" version="10.0.3" allowedVersions="[10.0.3]" />
Run Code Online (Sandbox Code Playgroud)

update-package在Visual Studio中运行,包括上述项目,将发生没有更新Newtonsoft.Json,因为我已经使用固定到10.0.3allowedVersions属性。

我怎样才能做到这一点PackageReference?将semver语法应用于 Version 属性只会影响恢复的版本- 它不会限制更新。因此,如果我指定以下内容PackageReference并运行update-package,例如,如果 11.0.1 在我的 NuGet 存储库中,我将升级到 11.0.1。

<PackageReference Include="Newtonsoft.Json" Version="[10.0.3]" />
Run Code Online (Sandbox Code Playgroud)

背景

我们依靠命令行工具来更新包,因为我们有快速移动的内部包(一天更新多次)和更稳定的低移动包(例如:ASP.NET)。在大型代码库中,手动更新.csproj文件中的每个依赖项对我们来说根本无法扩展(并且容易出错)。在下面,packages.config我们可以“固定”我们不想升级的第三方软件包,也可以更新到最新的快速移动依赖项。

c# nuget nuget-update .net-standard packagereference

6
推荐指数
1
解决办法
2557
查看次数

PackageReference 版本控制通配符 csproj

我的 NetStandard 项目中有以下内容

<ItemGroup>
<PackageReference Include="MyReference" Version="1.0.*" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

当我将它更改为使用通配符(而不是 1.0.1)时,我会在依赖项切换上看到一个感叹号,然后是 NuGet 切换,当然还有包本身。

当我签入时,CI 构建也在另一端失败,给我

无法找到包 MyReference。源中不存在具有此 ID 的包:Microsoft Visual Studio 离线包,nuget.org

使用没有通配符的实际版本 (1.0.1) 时,上述所有问题都会消失,但我想确保 .NET Core 还原任务始终还原到最新包,我希望一个简单的通配符可以做到.

注意 - 我正在使用我自己的私有 NuGet 存储库(包管理扩展)

请指教。

为什么在 CI 构建期间使用通配符会失败,表明它找不到包?

因此,假设我已将 project1 部署到我自己的 NuGet 存储库。Project2 依赖于 Project1,它已作为 NuGet 包添加到 Project2。Project1 包驻留在我自己的存储库中,没有问题也没有错误。

当我使用通配符并在本地构建时,它可以工作并恢复最新版本。当我签入代码更改(在 .csproj 中保留通配符)时 - CI Build 失败并显示上述错误消息。

azure-devops azure-pipelines-build-task azure-pipelines azure-pipelines-release-pipeline packagereference

6
推荐指数
1
解决办法
3678
查看次数

是否可以将 OctoPack 与新的 PackageReference NuGet 格式结合使用?

我们最近升级了我们的程序集以使用该PackageReference格式而不是packages.configNuGet 依赖项的格式。执行此操作后,其中一个软件包OctoPack停止工作。有什么方法可以OctoPack在仍然使用该PackageReference格式的情况下开始工作吗?

msbuild nuget octopack packagereference

5
推荐指数
1
解决办法
610
查看次数

如何在 csproj 构建输出中包含 Nuget 包中的 XML 文档

我有一个包含 XML 文档文件的 nuget 包。

packages/MyPackage.1.0.0/lib/net472/MyPackage.xml

但是,当我构建我的项目时,我想在输出中包含这个 xml 文件。

所以当我:

dotnet MyProj.csproj -c Release

我想得到:

> ls bin/Release/net472
MyProj.dll
MyPackage.dll
MyPackage.xml
Run Code Online (Sandbox Code Playgroud)

然而,它永远不会出现。我怎么才能得到它?

msbuild csproj nuget nuget-package packagereference

5
推荐指数
2
解决办法
1170
查看次数

Visual Studio 2022 在哪里存储 nupkg 文件

我使用 Visual Studio 2022。我看到,它将 NuGet-Packages-Reference 作为 PackageReference 存储在 csproj-File 中。现在我正在搜索 nupkg 文件。它们存储在 Visual Studio 2022 中的哪里?我没有找到他们。

visual-studio nuget packagereference visual-studio-2022

5
推荐指数
1
解决办法
5678
查看次数

VS2017 nuget 不断在错误的位置搜索包

所以我从 nuget packages.config 迁移到 PackageReference 并发现存在一些兼容性问题。我将项目恢复到它的工作状态(在 PackageReference 之前),现在我的项目没有编译。

我收到以下错误:

严重性代码描述项目文件行抑制状态错误在 C:\Users\user.nuget\packages 中找不到版本为 6.2.0 的包 EntityFramework。运行 NuGet 包还原以下载包。数据库管理器

这发生在多个包上。由于某种原因,Nuget 似乎正在 user.net\package 目录中搜索包。最初,项目中有一个包含所有包的文件夹。

我通过编辑 NuGet.Config 文件强制全局路径位于项目内的文件夹中。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
    <add key="repositoryPath" value="C:\Projects\App\App Source\packages\" />
    <add key="globalPackagesFolder" value="C:\Projects\App\App Source\packages\" />
  </config>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
  </packageSources>
  <packageRestore>
    <add key="enabled" value="True" />
    <add key="automatic" value="True" />
  </packageRestore>
  <bindingRedirects>
    <add key="skip" value="False" />
  </bindingRedirects>
</configuration>
Run Code Online (Sandbox Code Playgroud)

我不知道为什么 Nuget 一直在那个位置寻找包裹。它应该查看项目中的包文件夹。

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="EntityFramework" version="6.2.0" targetFramework="net46" />
  <package id="EntityFramework6.Npgsql" version="3.1.1" targetFramework="net46" …
Run Code Online (Sandbox Code Playgroud)

visual-studio nuget-package nuget-package-restore packagereference

4
推荐指数
1
解决办法
3018
查看次数

切换回packages.config - 答案说明

根据规则,我必须提出一个新问题,以澄清另一个问题/答案。

这个答案是这个:https : //stackoverflow.com/a/45964469/305916

然后呢?刚刚做了接受的答案,但packages.config 文件没有填充包(我知道它没有这么说)。

如果包自动出现在packages.config 中,或者我需要再次安装它们,我会错过下一步该怎么做...

我倾向于后者,但我觉得答案不完整:)

但是该怎么办呢?

nuget packages.config visual-studio-2017 packagereference

2
推荐指数
1
解决办法
3486
查看次数

PackageReference 不将 dll 复制到使用者(测试)项目输出,其中 ExcludeAssets =“runtime”且 PrivateAssets =“none”

这里简单设置:

  • 项目A - .NET 4.7.2框架库项目
    • 封装参考SeriLog 2.9.0
      • 排除资产=“运行时”,
      • PrivateAssets=“none”,这是可选的,因为默认情况下它应该复制 DLL(设置=“运行时”)
  • TestProject B - .NET 4.7.2框架单元测试项目
    • 项目 A 添加为 ProjectReference
    • SeriLog DLL 和所有依赖项应复制到此处

输出: SeriLog DLL不会复制到ProjectA的输出文件夹,也不会复制到TestProject B从我的角度来看, TestProjectB应该包含 SeriLog.dll。我错过了什么吗?或者还有其他选择可以实现这一目标吗?

备注: 据我从PackageReference 格式规范中理解,我正确使用了属性。

ExcludeAssets属性控制已定义该属性的项目的资产PrivateAssets控制使用项目 A 的项目的流量。

c# msbuild nuget packagereference

2
推荐指数
1
解决办法
5645
查看次数

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

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

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

c# nuget xamarin xamarin.forms packagereference

0
推荐指数
1
解决办法
34
查看次数