有没有一种方法可以使NuGet包源设置针对每个项目?

4
如何在Net Core的csproject中设置Nuget位置?
我们有微软官方Nuget包,应该引用Nuget.org。
其他应引用C:\NugetFileShare(公司私有Nuget存储库中用于类库的Nuget),目前我们使用的是Package Reference格式。
在项目xml文件中是否有方法来指定每个Nuget位置,以及需要私有Nuget位置的Nuget?
以下指示从解决方案级别开始,不知道是否可以从项目级别范围内完成? 从解决方案中的目录引用NuGet包
<?xml version="1.0" encoding="utf-8"?>
  <configuration>
    <config>
      <add key="globalPackagesFolder" value=".\packages" />
    </config>
</configuration>

其他资源:

是否有一种方法使NuGet软件包源设置针对每个解决方案?


只要NuGet包不在两个位置都存在,您可以定义这两个位置,它将从任何地方获取NuGet包。至少在我的上一个项目中,我们为内部NuGet包使用了一个单独的BaGet服务器,这种方法是可行的。请问您遇到了哪些问题需要在项目级别上定义源呢? - monty
你有尝试过你上次发布的链接中的建议吗?Nuget.config 仍然可以基于每个项目工作,它并不真正绑定或关联 csproj 或 .NET Core。也许你把它和 packages.xml 混淆了? - Tseng
1个回答

4
有没有办法?是的。它会按照您的意愿工作吗?可能不会。

另外也不是很清楚您到底想要什么(这感觉像 XY 问题的一种情况。如果您真的需要每个项目的源,那您没有解释为什么),因为您提供的nuget.config片段设置了NuGet下载和提取软件包的位置。NuGet搜索软件包下载的位置在 packageSources 部分中。您为什么希望每个项目的源不同?如果你错误地认为只有一个来源是正确的,那是不正确的。一个解决方案通常具有多个包源是非常正常的。即使.NET基类库代码(corefx)使用3个软件包源NuGet本身使用7个源

所以,您可能需要一个看起来像这样的 nuget.config 文件,位于与您的 .sln 文件相同的目录中,或者在您的存储库根目录中:

<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的MSBuild还原任务,看看是否有任何东西可用于实现此目标。 这一行使用了一个名为RestoreAdditionalProjectSources的属性。不幸的是,我无法猜测它想要的语法,但您可以尝试在任何<PropertyGroup>中使用<RestoreAdditionalProjectSources>C:\NugetFileShare</RestoreAdditionalProjectSources>在你的项目文件中。由于该属性的名称是“附加项目源”,听起来当从命令行还原时,它肯定可以正常工作,即使还原解决方案时也是如此。我不知道它是否适用于使用packages.config的项目。


这是RestoreAdditionalProjectSources属性如何工作的示例:https://www.meziantou.net/defining-nuget-sources-in-the-csproj.htm - Angel Yordanov

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