在 VisualStudio 中以 WSL 方式启动程序的过程纪实

在 VisualStudio 中以 WSL 方式启动程序的过程纪实


独立观察员 2023 年 9 月 28 日


一、安装 WSL

WSL 是 “Windows Subsystem for Linux” 的缩写,也就是运行在 Windows 系统中的 Linux 子系统。如果我们的应用程序最终是会放在 Linux 系统中运行的话,那么在开发阶段就以这种方式启动和调试,就能提前发现在真实线上环境可能出现的问题,有利于增强程序的健壮性。

VS 中以 WSL 方式启动程序,会自动安装 WSL(本次我选择的是 Ubuntu,还可以选择 Debian):

二、安装 ASP.NET Core 运行环境

安好之后再次点击启动,会提示没有安装 ASP.NET Core 6.0 环境:

点击确定可安装,不过大概率会因为网络等原因失败,而且窗口一闪而过,看不到错误信息。可以在窗口刚出现时进行截图,能看到执行脚本的命令和路径:

我这次的路径为 C:Program FilesMicrosoft Visual Studio2022EnterpriseCommon7IDEExtensionsm0dgxku3.ps5Scripts:

完整命令为(大写都改为小写,除了文件名):

wsl.exe -- "/mnt/c/program files/microsoft visual studio/2022/enterprise/common7/ide/extensions/m0dgxku3.ps5/scripts/InstallDotNet.sh" aspnetcore 6.0

在执行前,可先临时(重启 cmd 后失效)设置代理:

# 设置 socks5 代理set http_proxy=socks5://dlgcy:w1xxx@d.dlgcy.com:10888# 验证curl -I www.google.com

返回 200 证明成功:

然后即可执行命令:

不过报了不支持代理错误,重开 cmd 进行清除 cmd 代理后,还是报代理不支持,说明是我之前在 WSL 中设置的不对:

之前是按照《如何在 Linux 系统环境下配置 s5 代理(socks5 代理)?》中说的:

如果你想在整个系统中使用 socks5 代理,你可以将代理配置添加到 /etc/environment 文件中:

http_proxy=”socks5://127.0.0.1:1080″

https_proxy=”socks5://127.0.0.1:1080″

ftp_proxy=”socks5://127.0.0.1:1080″

socks_proxy=”socks5://127.0.0.1:1080″

这样,所有的网络请求都将通过 socks5 代理进行连接。

先把它清除了,顺便演示一下进入和离开 WSL 的命令(进入 –wsl,离开 –exit):

再次在 cmd 中设置代理后执行命令,没有报错了,但是速度非常慢:

看来是 cmd 的代理对 wsl 不起作用,还得在 WSL 中设置代理才行。

按照《debian_ubuntu 配置 sock/socks5h/http/https 代理》(已记录笔记)的方法可成功设置代理:

速度有所改善(其实也差不了多少):

然后就安好了:

三、安装调试组件 vsdbg

在 VS 中以 WSL 方式启动还是不行(重启之后也不行):

3.1、方式一:使用脚本安装(失败)

按照文章《记一次 Visual Studio 启动 WSL 远程调试的方法》的方法,我们直接在 WSL 系统中找到脚本路径,我本次的为 [/mnt/c/program files/microsoft visual studio/2022/enterprise/common7/ide/extensions/m0dgxku3.ps5/scripts]:

然后就是执行脚本了(./UpdateDebugger.sh),但是开启代理提示无网络,关闭代理显示连接超时,太难了:

关闭代理后,再次尝试,又开始下载了,第二天一看,还是失败了:

看看 ./UpdateDebugger.sh 的脚本内容吧,发现主角是 getvsdbgsh.sh 脚本:

#!/bin/bash
#-----------------------------------------------------------------------------# Copyright (c) Microsoft Corporation. All rights reserved.#----------------------------------------------------------------------------- set -e curl -sSL https://aka.ms/getvsdbgsh -o /tmp/getvsdbgsh.shcat /tmp/getvsdbgsh.sh | /bin/sh /dev/stdin -v latest -l $HOME/vsdbg;

通过 vim /tmp/getvsdbgsh.sh 查看,发现内容很多,就不看了。直接运行上面的最后一句,结果和之前差不多:

编辑 /tmp/getvsdbgsh.sh,把 download () 方法中的网络检查注释掉:


重新执行命令,现在是提示无法下载 xxx 文件,经过排查,原来是不支持代理设置中的 “socks5h”(DNS 也走代理):

将代理改为 socks5,发现也不支持。然后发现 curl 命令应该是支持的:

所以再次编辑 /tmp/getvsdbgsh.sh 文件,直接使用 crul:

再次执行命令,还是下载不了(摔!):

3.2、方式二:下载组件并手动安装

通过浏览器也是下载不了的,看来只能祭出大杀器了 —— 直接登陆香港服务器下载:

然后再从服务器上下到本地,并放到 C 盘,然后拷贝到 /tmp 目录下,不对,有可能是 /root/vsdbg 目录,结果还是不行:

百度一下这个 vsdbg-linux-x64.tar.gz 文件如何安装吧。

经过《[VS Code] 附加到 Docker 容器中调试 .NET 程序》一文的启发,应当使用如下命令安装(注意相关文件的路径,按实际情况修改):

source /tmp/getvsdbgsh.sh -v latest -l /root/vsdbg -e /tmp/vsdbg-linux-x64.tar.gz

果然成功:

四、安装 .NET SDK

再次使用 WSL 模式在 VS 中启动程序试试,发现报错了:


按照提示执行命令 dotnet dev-certs https,好像又说缺少了 .NET SDK:

按照给出的链接,最终定位了这个在 Ubuntu 中安装 .NET 的链接:

https://learn.microsoft.com/zh-cn/dotnet/core/install/linux-ubuntu-2204#install-the-sdk

(手动安装可参考:https://learn.microsoft.com/zh-cn/dotnet/core/install/linux-scripted-manual#manual-install)

具体安装 .NET 6.0 的命令如下:

# 安装 SDK(如果安装 .NET SDK,则无需安装相应的运行时)sudo apt-get update && sudo apt-get install -y dotnet-sdk-6.0 # 安装运行时sudo apt-get update && sudo apt-get install -y aspnetcore-runtime-6.0

经过 2 小时 52 分钟之后下载好了:

后续自动安装和欢迎语:

五、安装证书和启动调试

此时如果再次直接运行程序,就还是会报那个证书的错误,所以还要执行一下那个安装证书的命令:

此时再次启动程序就不会报错了,没有命令行窗口弹出,信息是在 VS 的输出窗口中展现:

直接访问给出的链接即可:

六、总结和资源

6.1、总结

本文记录了 VS 开启 WSL 调试支持的全过程,过程中走了一些弯路,感觉最大的阻碍还是网络问题(而且纵观本次实践过程和结果,开不开启代理都差不多)。

能分享给大家的可能就是我下载下来的可在 Linux 中使用的 VS 调试组件了(获取方式见下一小节)。

至于网络问题,不知道这个情况下使用镜像站有没有帮助,比如清华的镜像站([Ubuntu 软件仓库镜像使用帮助](https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/)), 有兴趣的朋友们可以试试。

另外,可以看出,微软这个 Linux 子系统的设计还是很巧妙的,相当于把整个 Windows 的磁盘分区目录都挂载到 Linux 子系统的 /mnt 路径下了,这样无论是查找文件还是相互访问,都是很方便的。给大家看看,在 Windows 中是可以直接查看 Linux 子系统的文件目录的:

打开 mnt,也是能看到 Windows 的盘符的(不过打不开,这个可以理解):

打开 Linux 的目录是可以的:

6.2、资源

vsdbg-linux-x64.tar.gz 下载:微信公众号 “独立观察员博客” 后台回复 “vsdbg” 获取下载链接。


6.3、参考文章

1、《[debian_ubuntu 配置 sock/socks5h/http/https 代理](https://www.cnblogs.com/yucloud/p/ubuntu_set_proxy.html)》

2、《[记一次 Visual Studio 启动 WSL 远程调试的方法](https://www.cnblogs.com/ACDIV/p/17369166.html)》

3、《[[VS Code] 附加到 Docker 容器中调试 .NET 程序](https://www.jianshu.com/p/c46088a0275f)》


原创文章,转载请注明: 转载自 独立观察员 (dlgcy.com)

本文链接地址: [在 VisualStudio 中以 WSL 方式启动程序的过程纪实](https://dlgcy.com/vs-wsl/)

关注微信公众号 独立观察员博客(DLGCY_BLOG) 第一时间获取最新文章



WordPress

WordPress 网站使用 “微信机器人高级版” 插件连通微信公众号

WordPress 在侧边栏添加显示相关文章功能

自用 WordPress 插件推荐 Ⅱ


Windows

移除 Win11 的文件夹标签功能

Win11 桌面快捷方式未全部显示的诡异现象及解决方法

Windows 中支持 DLNA 媒体库的视频播放器推荐

Windows 11 及其安卓子系统折腾记

IIS 错误解决:当前标识没有对 Temporary ASP.NET Files 的写访问权限

Windows 端最稳定的 DLNA音乐播放器推荐

Windows可登陆的本地账户忘记密码的解决方法


Linux

在 CentOS 上搭建 MinIO 对象存储服务并配置 HTTPS

在树莓派系统中安装和使用远程桌面软件 TightVNC

在香蕉派的树莓派系统上配置 Syncthing 自启动(暨 Linux 软件自启服务配置)


网络

移动联通电信手机卡网速浅测

在 Linux(树莓派)系统的 Chromium 浏览器上连接代理网络

台式机插 4G上网卡后供给其它设备内外网

搭建 Frp 来远程内网 Windows 和 Linux 机子

使用 ngrok 从外网连接内网的远程桌面

『网络安全』使用 PGP 实现电子邮件安全


展开阅读全文

页面更新:2024-02-14

标签:方式   程序   观察员   子系统   纪实   脚本   路径   命令   过程   文件   系统   网络

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top