离线模式下的Dotnet run/restore(运行/还原)

3
我有一个 Windows 服务器,在该服务器上已成功安装和恢复了我的 dotnet core 项目(当时该服务器具有出站互联网连接)。现在应用程序实例正在良好运行。
现在,由于数据中心政策的原因,已撤销了对外部互联网的访问权限。尽管如此,我仍然拥有 VPN 和远程桌面访问权限。现在,我正在尝试将我的工作项目克隆到一个单独的文件夹中,并创建另一个实例(位于不同的端口)。
但是,当在新的项目文件夹上使用 `dotnet run` (除了一些设置之外,所有内容都相同)时,我遇到了以下错误:
$ dotnet run
C:\Program Files (x86)\dotnet\sdk\2.2.102\NuGet.targets(114,5): error :  
Unable to load the service index for source https://api.nuget.org
/v3/index.json. [C:\xxxx\xxxx\xxxx.csproj]
C:\Program Files (x86)\dotnet\sdk\2.2.102\NuGet.targets(114,5): error :   
A connection attempt failed because the connected party did not properly 
respond after a period of time, or established connection failed because 
connected host has failed to respond [C:\xxxx\xxxx\xxxx.csproj]

The build failed. Please fix the build errors and run again.

我检查了 C:\Users\xxxxxx\.nuget\packages,所有需要的软件包都可用。

这两个项目都在相同的Windows用户配置文件下运行。

我查看了关于这个问题的各种Stackoverflow问题,但它们都涉及代理设置,而这不是我的使用情况。

我如何防止 dotnet 查找远程nuget服务器,因为所有软件包都已经存在于本地缓存中。

是在本地构建dll并在服务器上运行是唯一的选项吗?我不能在我的服务器上离线模式下构建它吗?


为什么在其他地方构建并仅在服务器上运行预先构建的二进制文件是不可取的? - zivkan
在这种特定情况下(没有互联网),我希望确保二进制文件的构建源代码,以便查看异常堆栈跟踪更容易。如果我在其他地方构建,源代码和二进制文件可能很快不同步,特别是如果我有多个同时版本。可能,紧密的二进制版本编号可以帮助,但目前来看,我认为在服务器上构建效果很好。如果服务器有互联网,我们通过在服务器上进行git pull来进行构建自动化。因此,即使在这里,在服务器上构建似乎是最佳选择。 - user1880957
3个回答

3

好的。通常情况下,我在SO上发布问题后就解决了。

致谢:https://blog.bigfont.ca/dotnet-restore-without-an-internet-connection/

以下是简要说明:

dotnet nuget locals all --list

info : http-cache: C:\Users\bigfo\AppData\Local\NuGet\v3-cache  
info : global-packages: C:\Users\bigfo\.nuget\packages\         
info : temp: C:\Users\bigfo\AppData\Local\Temp\NuGetScratch  

然后,在 dotnet restore 过程中使用其中一个源。
dotnet restore --source C:\Users\bigfo\.nuget\packages\
dotnet build --no-restore
dotnet run --no-restore 

一个小的改进是使用 dotnet run --no-build。由于你在运行之前刚刚构建了应用程序,因此你可以缩短应用程序启动所需的时间。dotnet bin\Debug\<TFM>\<assemblyName>.dll仍然更快,但你可能需要 dotnet publish 并从发布目录而不是构建目录运行 dll。 - zivkan

1
一个替代你发现的解决方案的方法是创建一个nuget.config文件,该文件会删除所有nuget源:
<configuration>
 <packageSources>
    <clear />
 </packageSources>
</configuration>

这样,您就不需要使用特殊的命令行参数来恢复或构建。

我想我之前尝试过,但是没有成功。会再试一次。 - user1880957

0

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