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

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

独立观察员  2023 年 9 月 28 日

f0d73cbf64d6f6a17aafb582abb7044e.png


一、安装 WSL

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

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

882e4ea1b0e4ae11a422f6f010968add.png

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

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

a63025296bc8fd3cec2777c3cef4845b.png

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

967f706c6e1eaec6d08886505e341488.png

我这次的路径为 C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\Extensions\m0dgxku3.ps5\Scripts:

0fa0797d55208930e6cc42a0c437b85c.png

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

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 证明成功:

cf9091a765a14b83e62506771950ed50.png

然后即可执行命令:

56ad33847e6ef13b1f37932696f28cf1.png

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

bc381702c6434d762a67e4bce5b5560c.png

之前是按照《如何在 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):

dce4250d2b3222dadcec4d4041fa2e90.png

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

93ea750d1e8085d033d12f4c0a774de4.png

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

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

0b8c454e6d08d3a442cc73e531ec6159.png

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

ede528f4a4de791b7466ec03edf91424.png

然后就安好了:

0f26bb08dec59a83970ed6a5f2a55621.png

三、安装调试组件 vsdbg

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

c12424cfa3444498af229a54befb4941.png

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

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

88def582201eddc6f344d7237254d8d2.png

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

a0d119d1a23e105766f474f52cea5404.png

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

c9e8640b46785330d8d6fe357e7b8e6c.png

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

#!/bin/bash


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

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

6fb8dfa81e3d9dc16fb399e8b08bcfc8.png

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

3917211030760a36e1627b37a43bf583.png

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

62052e42dd321b314270140474013f91.png

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

d843d76c88b033254a6593b072bf75c7.png

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

70bea4de042c3f20e1ef64dec2ebebb5.png

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

1e2dfbcf5f8d5226a35b16733ead5f0d.png

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

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

a7a5a35677bda8c43bfc29ef760c7052.png

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

a05c41810bcc340d693edf52e763e48c.png

百度一下这个 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

果然成功:

4e3a004d8c16b356ac922cd39b36e945.png

四、安装 .NET SDK

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

b0a053af0f67cd1e25829d951fb3e4bf.png

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

362b841996e39b1cb5271c6f9f01d477.png

按照给出的链接,最终定位了这个在 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 分钟之后下载好了:

5f4fe0d179b528ca87e81b31b05b1f18.png

后续自动安装和欢迎语:

61ef1673d62966251c184805d675e08d.png

五、安装证书和启动调试

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

1ac603c9149e6fd9722a5a22f61908d6.png

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

a6925eb22e30b0db2091519c68c36271.png

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

d7f2d68a26c49dfa71d70e61fe052336.png

六、总结和资源

6.1、总结

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

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

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

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

cf27d2cb130815d87bf19b69f48678cc.png

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

25ae780f65209bde0fed44907ba26d20.png

打开 Linux 的目录是可以的:

34c26fb5bb1de1814a29f41dd49a19ae.png

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) 第一时间获取最新文章

143cf746304d94fbe5ef989408d6f0e4.png

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 实现电子邮件安全

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值