如何让dotnet publish命令使用私有Nuget源

3

我正在公司内部使用VS2019 (16.4)。我更改了VS Nuget源,经过多次向我们内部基础架构申请Nuget包的批准后,我的解决方案编译并运行成功。

现在我正在尝试使用dotnet publish命令,但它失败了,出现了许多错误,例如:error NU1605: 检测到软件包降级:System.Runtime.Extensions从4.3.0降级到4.1.0。直接从项目引用软件包以选择不同的版本。

我想这可能与私有Nuget源无关......所以我四处搜索,解决方案似乎是在解决方案根目录包含一个NuGet.Config文件:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="Company Artifactory" value="https://repo.comany.com/artifactory/api/nuget/comany-nuget" />
    <add key="Company Eval Artifactory" value="https://repo.comany.com/artifactory/api/nuget/comany-nuget-eval" />
  </packageSources>
</configuration>

这并没有帮助。看起来有一个新的dotnet命令可以通过CLI添加源:https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-nuget-add-source,但不幸的是我们的版本是3.1.100,而新命令适用于3.1.200......是的,需要行动才能让新版本进入我们的公司。

非常感谢任何帮助。


1
还有一个全局的NuGet配置,您也可以向其中添加软件包源。此外,如果我没记错的话,Artifactory需要自定义访问令牌,您也应该管理它。 - Pavel Anikhouski
谢谢!@omajid 实际上,我还没有完全理解 dotnet nuget。它似乎只有三个命令:deletelocalspush。这些都不能帮助我提供 Nuget 源... 我错了吗? - Khaled Hikmat
@omajid 好的...是的...但我添加了一个 NuGet.Config 文件(似乎它是大小写敏感的),我可以看到 VS 认识新添加的源...但是当我从命令行运行时却不行。有没有办法知道当前配置的 Nuget 源来自 dotnet CLI? - Khaled Hikmat
dotnet restore -v:n 将显示正在使用的 nuget.config 文件以及除 nuget.org 之外使用的任何其他源。 - omajid
如果我添加它,就会引起所有的问题...如果我删除它,它会说“在未指定 RuntimeIdentifier 的情况下将应用程序发布到单个文件”!! - Khaled Hikmat
显示剩余4条评论
1个回答

4

感谢 @omajid 的帮助。以下是适合我的方法:

在每个项目根目录下执行如下命令:

  • dotnet restore
  • dotnet build --configuration Release
  • dotnet publish --no-restore -r win-x64 -c Release -o c:\somwhere /p:PublishSingleFile=true /p:DebugType=None

以上需要在项目文件中添加运行时标识符:

<PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <RuntimeIdentifier>win-x64</RuntimeIdentifier>
    <IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
    <AssemblyVersion>0.0.2.0</AssemblyVersion>
</PropertyGroup>

很遗憾,使用运行时标识符进行还原没有起作用(与我的原始问题中的错误相同),这可能意味着项目文件中不需要运行时标识符:
dotnet restore --runtime win-x64 我最初的观察是不正确的!Nuget源并没有导致publish中的还原问题... 是运行时标识符。我仍然不知道为什么错误会以这种方式显示,但使用--no-restore开关调用dotnet publish似乎对我有帮助。
问题仍然存在,即dotnet restore --runtime win-x64失败的原因是什么。

默认情况下,build 命令也会执行 restore 操作,因此在这种情况下,您需要同时使用 --no-restore 参数来调用 build。此外,publish 命令也会执行 buildrestore 操作。 - HellBaby

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接