如何在我的 .Net Core 项目中包含 NuGet 包?

6

在传统的.Net项目中,如果我添加了一个NuGet包引用,它会被下载到一个“packages”文件夹中,然后我可以将其与我的代码一起检入源代码控制。这允许任何开发人员下载代码以及NuGet包,而无需设置单独的包源来下载包。但是,在.Net Core项目中,情况并非如此。该解决方案中似乎没有“packages”文件夹,每个开发人员需要设置自定义的包源并在获取代码时下载包。是否有一种方法可以配置.Net Core项目,使其像传统的.Net项目一样管理“packages”文件夹呢?


Packages.config已经合并到csproj中。请参阅.NET Core csproj格式的添加内容。现在您可以使用PackageReference XML元素。Visual Studio包管理器仍然可用。 - Dustin Kingen
你的问题是引用了包缓存中的内容还是缺乏一个 NuGet 源来托管(私有)包? - Martin Ullrich
1个回答

16

许多NuGet行为可以通过NuGet.Config文件进行控制(有关更多详细信息,请参见此参考资料)。

如果您在解决方案旁边放置一个NuGet.Config文件,并具有以下内容,则可以覆盖软件包将被还原到的位置:

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

如果问题是你需要在每台机器上设置额外的源,那么你也可以通过在代码库中添加NuGet.Config来添加这些源,这样当打开解决方案时,VS将会选择要使用的馈线:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="CompanyFeed" value="https://my.company.com/private/nuget" />
  </packageSources>
</configuration>
如果您没有要托管软件包的源,并且需要将软件包与解决方案一起包含,那么您可以在NuGet.Config中使用包含.nupkg文件的目录:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="local" value=".\NuGetPackages" />
  </packageSources>
</configuration>

我分别尝试了<add key="repositoryPath" value=".\packages" />和<add key="globalPackagesFolder" value=".\packages" />,但我无法看出它们之间的区别。它们似乎都能完成相同的任务。我曾希望 NuGet 包可以自动添加到源代码控制中,就像以前在 .Net 项目中一样。我尝试使用<add key="disableSourceControlIntegration" value="false"/>来明确设置,但似乎没有起到作用。我必须手动将文件添加到源代码控制中,但至少现在它们在解决方案目录下,这是可能的。 - Eric
1
不要在值中加入“.\”,因为这不是跨平台的(在Windows上也无法工作)。 - knownasilya
1
@knownasilya 你试过了吗?Nuget通常会规范化路径。如果这个功能停止工作,我们应该报告这个错误。 - Martin Ullrich
是的,它在 macOS 上可以运行但在 Windows 上不行。它创建了那个文件夹的原样拷贝。 - knownasilya
1
根据链接文档(https://learn.microsoft.com/en-us/nuget/reference/nuget-config-file#config-section)显示:dependencyVersion和repositoryPath仅适用于使用packages.config的项目。globalPackagesFolder仅适用于使用PackageReference格式的项目。通常,PackageReference用于较新的.NET Core应用程序,这些应用程序定义为微型应用程序,因此依赖于比.NET Framework库更多的外部引用,后者可以依赖于.NET Framework提供此类功能。 - CJBS

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