c# - 有没有办法为每个项目进行 NuGet 包源设置?

标签 c# .net asp.net-core .net-core nuget

如何在 Net core 的 csproject 中设置 Nuget 位置?

我们有微软官方的 nuget 包,应该引用 Nuget.org。

应引用 C:\NugetFileShare 的其他包(Nuget 用于私有(private) Nuget 存储库中的公司类库)

目前,我们正在使用包引用格式。

项目 xml 文件中是否有说明每个的 Nuget 位置以及需要 Private Nuget 位置的位置?

解决方案级别的以下名称,好奇是否可以从项目级别范围内完成?
Referencing NuGet packages from directory in solution

<?xml version="1.0" encoding="utf-8"?>
  <configuration>
    <config>
      <add key="globalPackagesFolder" value=".\packages" />
    </config>
</configuration>

其他资源:

Is there a way to make NuGet Package Source settings per solution?

最佳答案

有办法吗?是的。它会按你的意愿工作吗?可能不是。

也不完全清楚您真正想要什么(这感觉就像 XY-problem 的情况。如果您确实需要每个项目的源,您没有解释原因),因为您提供的 nuget.config 片段设置了NuGet 将下载并解压缩包。 NuGet 搜索要下载的包的位置位于 packageSources section 中。 .为什么您希望每个项目的来源不同?如果您错误地认为只能有一个来源,那是不正确的。一个解决方案有多个包源是很正常的。甚至 .NET 基类库代码 (corefx) 也使用 3 package sourcesNuGet itself uses 7 sources .

所以,你可能想要的是 nuget.config看起来像这样的文件,与您的 .sln 在同一目录中文件,或在您的 repo 根目录中:

<configuration>
  <packageSources>
    <clear /> <!-- clear to make sure that everyone uses the same sources -->
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
    <add key="company packages" value="C:\NugetFileShare" />
  </packageSources>
</configuration>

现在,如果确实有充分的理由需要每个项目的包源,那么首先要注意的是它在 Visual Studio 中可能不起作用。

一种方法是简单地使用 nuget.config项目目录中的文件(这在 VS 中肯定行不通)。然后,当您直接恢复该项目时(恢复解决方案文件不会考虑此配置),它将使用该配置文件。

由于你标记了.NET Core,而.NET Core只能使用SDK风格的项目,而SDK风格的项目只能使用PackageReference,而PackageReference是用MSBuild恢复的,我们可以看看NuGet's MSBuild restore task看看有没有什么东西可以用来实现这个目标。 This line使用名为 RestoreAdditionalProjectSources 的属性.不幸的是,我猜不出它想要的语法,但你可以尝试使用 <RestoreAdditionalProjectSources>C:\NugetFileShare</RestoreAdditionalProjectSources>在任何 <PropertyGroup>在您的项目文件中。由于该属性的名称是“附加项目源”,因此从命令行恢复时它听起来肯定可以工作,即使在恢复解决方案时也是如此。我不知道它是否适用于 Visual Studio。此 MSBuild 属性不适用于使用 packages.config 的项目.

关于c# - 有没有办法为每个项目进行 NuGet 包源设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58481966/

相关文章:

c# - 自长时间操作开始以来,很难确定 ASP.Net 中的数据缓存是否已更改

.net - 如何在不处理子控件事件的情况下检查鼠标单击是否在用户控件中?

.net - 我们可以像 String.Empty 一样拥有 Class.Empty 对象吗

azure - NET Core应用程序无法访问Azure Key Vault

docker - IdentityServer4 + Docker : The remote certificate is invalid according to the validation procedure

c# - C# 中的日期时间分析器错误

c# - 逗号分隔的字符串到通用列表

C# 发布 .exe 并使用 cmd 向其发送参数

.net - Jenkins .Net和Docker?

c# - ValidateAntiForgeryToken 是否使用 POST 自动实现?