前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在 VisualStudio 中以 WSL 方式启动程序的过程纪实

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

作者头像
独立观察员
发布2023-10-08 09:17:55
4110
发布2023-10-08 09:17:55
举报

在 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 Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\Extensions\m0dgxku3.ps5\Scripts:

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

代码语言:javascript
复制
wsl.exe -- "/mnt/c/program files/microsoft visual studio/2022/enterprise/common7/ide/extensions/m0dgxku3.ps5/scripts/InstallDotNet.sh" aspnetcore 6.0

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

代码语言:javascript
复制
# 设置 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 脚本:

代码语言:javascript
复制
#!/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 查看,发现内容很多,就不看了。直接运行上面的最后一句,结果和之前差不多:

编辑 /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 程序》一文的启发,应当使用如下命令安装(注意相关文件的路径,按实际情况修改):

代码语言:javascript
复制
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 的命令如下:

代码语言:javascript
复制
# 安装 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

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)》

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-09-28 21:38,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 独立观察员博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在 VisualStudio 中以 WSL 方式启动程序的过程纪实
    • 一、安装 WSL
      • 二、安装 ASP.NET Core 运行环境
        • 三、安装调试组件 vsdbg
          • 3.1、方式一:使用脚本安装(失败)
          • 3.2、方式二:下载组件并手动安装
        • 四、安装 .NET SDK
          • 五、安装证书和启动调试
            • 六、总结和资源
              • 6.1、总结
              • 6.2、资源
              • 6.3、参考文章
          相关产品与服务
          远程调试
          远程调试(Remote Debugging,RD)在云端为用户提供上千台真实手机/定制机/模拟器设备,快速实现随时随地测试。运用云测技术对测试方式、操作体验进行了优化,具备多样性的测试能力,包括随时截图和记录调试日志,稳定的支持自动化测试, 设备灵活调度,用例高效执行, 快速定位产品功能和兼容性问题。云手机帮助应用、移动游戏快速发现和解决问题,节省百万硬件费用,加速敏捷研发流程。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档