在 shell 脚本中恢复 Nuget 包时 Dotnet 命令失败

Dotnet commands fail when restoring Nuget packages in shell script

上下文

我目前正在扩展我的公司 shell 脚本以在构建服务器上构建 .net 解决方案。 该解决方案由多个项目组成,有些需要构建和发布,有些则不需要。 这些项目的框架也各不相同,因为有些是用 .net Framework 编写的,而最新的是用 .net Core 编写的。 我已将 shell 脚本扩展为以下内容:

msbuild.exe VirtualLaundry.sln

#Build .net framework projects 

for project in Planbord Webportal WebportalCentraal RFIDReader
do
    mkdir -pv publish/$project
    msbuild.exe /t:"Build" /p:PipelineDependsOnBuild=False /p:UseWPP_CopyWebApplication=True /p:PrecompileBeforePublish=True /p:OutDir="$(cygpath -aw $project/bin)" /p:WebProjectOutputDir="$(cygpath -aw publish/$project)" $project/$project.csproj
    rm -rf publish/$project/App_GlobalResources
    rm -f $project.zip
    
    mkdir -pv publish/$project/Config
    cp -v source/$project/Web.config publish/$project/Config

    echo "test" > publish/$project/versie.txt
    if [[ ${shortversion:0:1} == [0-9] ]]
    then
            echo ${shortversion} > publish/$project/versie.txt
    fi
    
    (cd publish/$project && zip -r ../../$project.zip .)
done

# Build .net Core projects
echo Building .Net Core projects
for project in VL.API
do
    echo $PWD
    dotnet publish $project/$project.csproj -o publish 
done

# Zip .net Core projects and remove old build output
for project in VL.API
do
    echo $PWD
    cd publish
    zip -r ../VL.API.zip ./
    cd ..
rm -r publish
done

问题

执行此 shell 时 returns 出现以下错误:

+ echo Building .Net Core projects
Building .Net Core projects
+ for project in VL.API
+ echo /home/90105-091/build/p-019-220/release/source
/home/90105-091/build/p-019-220/release/source
+ dotnet publish VL.API/VL.API.csproj -o publish
Microsoft (R) Build Engine version 16.7.0+7fb82e5b2 for .NET
Copyright (C) Microsoft Corporation. All rights reserved.

  Determining projects to restore...
C:\Program Files\dotnet\sdk.1.403\NuGet.targets(128,5): error : Unable to load the service index for source https://api.nuget.org/v3/index.json. [C:\home105-091\build\p-019-220\release\source\VL.API\VL.API.csproj]
C:\Program Files\dotnet\sdk.1.403\NuGet.targets(128,5): error :   Value cannot be null. (Parameter 'path1') [C:\home105-091\build\p-019-220\release\source\VL.API\VL.API.csproj]

起初我以为是 Nuget API 地址 (https://api.nuget.org/v3/index.json) 被服务器阻止了,但我已经解决了这个问题。 我已经在堆栈溢出和互联网上的其他地方搜索了解决方案,但这些解决方案不起作用或不适用于我的问题。

参考:

我怀疑可能存在 CLI 未显示的其他问题,但坦率地说,我不确定。

但我的问题是什么(可能)导致这个问题?

经过大量调整后,我发现脚本中抛出的错误是由 NuGetScratch 文件夹的访问权限引起的,我的 Windows 帐户没有该文件夹的访问权限。由于 Nuget 从该锁定文件夹恢复它的包,因此它无法恢复任何包,因此构建失败。更改访问权限后,错误消失了,所以我唯一的猜测是“值不能为空。(参数 'path1')”错误是一个有点通用的错误,并没有真正显示潜在的问题。