如何在 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 sources和 NuGet 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/