对于经典的.Net项目,如果我添加了对NuGet包的引用,它将被下载到packages文件夹,我可以将其与我的其余代码一起检查到源代码控制中.这允许任何开发人员下载代码以及NuGet包,而无需设置包源来单独下载包.这不是.Net Core项目的工作方式.似乎没有解决方案的包文件夹,每个开发人员都可以设置自定义包源并在获取代码时下载包.有没有办法配置.Net Core项目像经典的.Net项目那样管理一个包文件夹?
我有一个 .net core 3.1 解决方案,其中包含多个 Web 和类库项目。所有包都使用文件中的<PackageReference>格式.csproj。
我正在使用 Azure DevOps Pipelines 构建解决方案,我想通过缓存 Nuget 包而不是在每次运行时从 nuget.org 恢复它们来减少我的构建时间。
按照文档和博客文章的一些指导,我已经:
将此nuget.config文件添加到我的解决方案中,以便始终从 nuget.org 恢复包:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
</packageSources>
</configuration>
Run Code Online (Sandbox Code Playgroud)
Directory.Build.props在我的解决方案中添加了一个文件,以便为每个项目packages.lock.json在构建时生成一个。
<Project>
<PropertyGroup>
<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
<DisableImplicitNuGetFallbackFolder>true</DisableImplicitNuGetFallbackFolder>
</PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
将生成的packages.lock.json文件添加到 git。
将Cache@2任务集成到我的azure-pipeline.yml文件中,如下所示:
trigger:
- master
- users/*
pool:
vmImage: 'windows-latest'
variables:
buildConfiguration: 'Debug'
NUGET_PACKAGES: $(Pipeline.Workspace)/.nuget/packages
steps:
- task: Cache@2
displayName: Cache nuget packages …Run Code Online (Sandbox Code Playgroud)