本站点文档内容均翻译自code.visualstudio.com,仅供个人学习,如有差异请以官网为准。

C# 开发工具包常见问题

使用这个常见问题 (FAQ) 主题来了解更多关于 C# Dev Kit 扩展的信息,并解决您可能遇到的问题。

一般

什么是 C# Dev Kit?

C# Dev Kit 是一个扩展,旨在增强你在 Visual Studio Code 中的 C# 开发体验。它的目标是为 VS Code 带来更广泛、更高效和更可靠的 C# 体验。C# Dev Kit 不会取代 现有的 C# 扩展,而是在此基础上增加功能。开发人员可以选择继续使用现有 C# 扩展的更新版本,或者通过添加 C# Dev Kit 来提升他们的体验。

当前支持哪些项目类型?

C# Dev Kit 支持构建 .NET Core(也常称为 .NET)的网络应用、控制台应用、类库项目和测试项目。 .NET MAUI 扩展Unity 扩展 基于 C# Dev Kit,并为构建 .NET 多平台应用用户界面 (MAUI) 应用和 Unity 应用提供额外支持。这些扩展支持现代 .NET 项目格式,也称为 "sdk-style" 项目。如果您正在构建非 SDK 格式的项目,例如 .NET Framework 应用和 Xamarin 应用,请参阅 项目系统 部分。

C# Dev Kit 包含哪些扩展?

今天,C# Dev Kit 家族包含的扩展有:

这些扩展的使用受 C# Dev Kit 扩展族的 EULA管辖。

这些扩展也有自己的许可的依赖项——例如,C# Dev Kit 依赖于 C# 扩展.NET 安装工具

为什么C#开发工具包无法激活 / 无法找到C#开发工具包命令?

有几个原因可能导致在尝试编辑 C#Files时 C# Dev Kit 无法激活。

  1. C# 扩展的 2.0+ 版本未安装。C# Dev Kit 需要 C# 扩展的 2.0 或更高版本。请检查是否已安装 C# 扩展,并且版本为 2.0 或更高。
  2. 工作区偏爱 C# 扩展。C# Dev Kit 不支持 .NET Framework 项目,如果你已经设置了 dotnet.preferCSharpExtension将此设置设置为 true,将禁用该工作区的 C# Dev Kit。如果项目不是 .NET Framework 项目,请确保禁用此设置。
  3. 使用只读操作系统。C# Dev Kit 需要对其自己的扩展文件夹和 VS Code 提供的扩展文件夹有写权限,以便在操作系统内写入任意状态,因此,如果您使用的是完全只读的操作系统,C# Dev Kit 将无法工作。

如果您已经检查了这些,但仍然无法找到 C# Dev Kit 命令,请提交问题并提供 C# Dev Kit 输出Windows中的信息。

许可和贡献

谁可以使用C# Dev Kit?

C# Dev Kit 可通过社区许可证提供给符合条件的用户,并且作为现有 Visual Studio 订阅的另一个补充。这意味着拥有有效 Visual Studio 订阅的开发人员今天就可以使用 C# Dev Kit。

对于个人、学术和开源项目,C# Dev Kit 可以免费使用。对于商业用途,最多可以有 5 个团队成员免费使用 C# Dev Kit。对于 6 名以上的开发人员,这些用户将需要 Visual Studio Professional(或更高版本)订阅。C# Dev Kit 还包含在 GitHub Codespaces 和 Microsoft Dev Box 中,因此这些产品的用户可以免费使用 C# Dev Kit。

我应在何处提交反馈和建议?

用户可以通过 VS Code 的 帮助 > 报告问题 来报告问题或建议。选择是错误、功能请求还是性能问题,提交到 一个扩展,并在扩展列表中选择 C# Dev Kit

帮助 > 报告问题 图片

C# 开发工具包是开源的吗?为什么不呢?

No. C# Dev Kit 是闭源的,但它依赖于 VS Code 扩展的 C#,该扩展是开源的,两者都与开源组件(例如 RoslynRazor)通信。我们 C# Dev Kit 的一个目标是为使用 VS Code 的 C# 开发人员提供更好的生产力体验。为了实现这一目标,C# Dev Kit 包括一些与我们其他工具共享的专有闭源功能。为了向 VS Code 用户提供这些体验,我们需要将 C# Dev Kit 作为闭源扩展引入。

我怎样才能做出贡献?

C# 扩展是 C# Dev Kit 的一部分,是完全开源的,并受 这些许可条款约束。此扩展的源代码可在 https://github.com/dotnet/vscode-csharp 上获取,并根据 MIT 许可证授权。

该项目采用了贡献者契约定义的行为准则,以明确我们社区的期望行为。更多信息,请参见.NET 基金会行为准则。通过签署贡献者许可协议(CLA),社区可以自由地将您的贡献用于 .NET 基金会项目。

.NET SDK

安装脚本超时

请注意,根据您的网络速度,安装 .NET Core 运行时可能需要一些时间。默认情况下,如果安装花费的时间超过 4.5 分钟,则会终止不成功。如果您认为允许下载的时间太短(或太长),可以通过设置更改超时值dotnetAcquisitionExtension安装超时值到自定义值。

了解更多关于配置 VS Code 设置的信息 并在下面查看一个自定义超时的示例 settings.json文件。在这个例子中,自定义的超时值是180秒,即3分钟:

{
  "dotnetAcquisitionExtension.installTimeoutValue"180
}

获取 .NET SDK 时出错

获取 .NET SDK 时出错

注意:如果您位于中国,您的 .NET SDK 下载可能会被阻止并导致超时。

您需要确保已安装 .NET SDK。作为临时解决方案,您可以将 .NET 运行时获取扩展指向现有的 .NET 安装:

将 .NET 运行时获取扩展指向现有的 .NET SDK 安装

如何手动安装 .NET?

如果 .NET 安装失败,或者您想重新使用现有的 .NET 安装,您可以使用dotnetAcquisitionExtension.existingDotnetPath 设置。.NET 可以从 C# Dev Kit Walkthrough.NET 网站 手动安装。要指示扩展到该安装,使用下面示例更新您的设置,包括扩展 ID 和路径:

Windows

{
  "dotnetAcquisitionExtension.existingDotnetPath": [
    {
      "extensionId": "msazuretools.azurerm-vscode-tools",
      "path": "C:\\Program Files\\dotnet\\dotnet.exe"
    }
  ]
}

macOS

{
  "dotnetAcquisitionExtension.existingDotnetPath": [
    {
      "extensionId": "msazuretools.azurerm-vscode-tools",
      "path": "/usr/local/share/dotnet/dotnet"
    }
  ]
}

扩展认为我处于离线状态,错误响应为400或407,并且我有一个代理。

如果您的系统使用代理并且禁用了注册表访问,您需要在扩展设置中明确设置代理URL。当通过环境变量和注册表设置代理时,代理会自动检测,但如果您的代理仅通过注册表键管理且注册表访问被禁用,扩展将无法找到它。要设置代理URL,请添加以下扩展设置:

{
  "dotnetAcquisitionExtension.proxyUrl": "https://你的代理网址:端口"
}

项目系统

解决方案资源管理器报告我的项目在C#开发工具包中不受支持。

这通常是由于项目针对的是 .NET Framework 而不是 .NET Core/.NET。目前,C# Dev Kit 不支持 .NET Framework 项目。

项目在解决方案资源管理器中不受支持

为了解决这个问题,你有两种选择。

你可以更新你的项目到一个SDK风格的项目,以访问所有可用的C# Dev Kit功能。

或者,您可以将项目和解决方案的加载委托给C#扩展,使用首选CSharp扩展工作区设置。请注意,此设置将无法使用某些C# Dev Kit功能。要访问此设置,请打开设置编辑器并选择工作区选项卡。然后,在搜索栏中搜索“首选CSharp”,并检查首选CSharp扩展设置旁边的复选框。如果您尝试加载.NET Framework项目,C# Dev Kit将自动显示通知,要求您将项目更新为SDK样式项目,或者选择使用C#扩展 从通知中。此选项将自动选择 Prefer CSharp Extension 设置。请注意,您需要重新加载 VS Code 以使此设置生效。

我点击了“创建 .NET 项目”按钮,但没有发生任何事情。

这通常发生在扩展版本不匹配时。C# Dev Kit 需要 C# 扩展的 2.0 或更高版本。如果你使用的是 C# 扩展的 v1,C# Dev Kit 和相关的 C# Dev Kit 命令将无法正常工作。要解决此问题,请将 C# 扩展升级到最新版本。

项目系统报告说它遇到了一个问题

当发生内部项目系统错误时,您通常会在 VS Code 的角落弹出这样的通知:

无法恢复解决方案

选择打开日志按钮以打开显示问题发生位置的堆栈跟踪视图。选择并复制日志中的所有文本。通过 VS Code 报告问题,并确保包含从日志中复制的文本。

当我打开我的解决方案时,我收到通知“解决方案恢复失败”

选择显示错误。这将打开NuGet的输出面板。阅读错误信息,以确定包恢复无法完成的原因。如果无法解决问题,请通过VS Code报告该问题。

解决方案资源管理器显示“未找到兼容的 .NET SDK”

这个错误最可能的原因是aglobal.json文件指定的SDK与系统上安装的SDK不同。

未找到兼容的 .NET SDK

打开输出Windows并切换到项目窗格以查找更多信息。您应该会看到如下内容:

输出Windows 项目窗格

要解决此问题,请更新global.json 指定已安装的SDK或从 下载 .NET 页面安装指定的SDK。

接下来,关闭并重新打开工作区。

也有可能SDK没有安装在C# Dev Kit已知的位置。例如,如果SDK是通过包管理器而不是通过微软提供的安装程序安装的,就会发生这种情况。要解决此问题,请通过包管理器卸载SDK,然后通过下载.NET重新安装。

测试探索者

我的测试为什么没有出现在测试浏览器面板中?

确保你的解决方案包含一个测试项目。只有属于打开的解决方案的测试项目才会被包含。要查看测试项目是否属于解决方案,请在文件资源管理器中打开解决方案资源管理器视图,并查看项目是否出现在树中。右键单击解决方案节点以添加现有的测试项目,或在解决方案中创建一个新的测试项目。

C# Dev Kit 还要求在测试出现在测试资源管理器面板之前成功构建您的项目。此外,如果对您的项目/解决方案进行清理,测试 dll 将从测试资源管理器面板中移除。

一旦你已验证测试项目是解决方案的一部分,通过在解决方案资源管理器中右键单击解决方案并选择构建或使用⇧⌘B(Windows, Linux Ctrl+Shift+B进行构建。构建完成后,你的测试将出现在测试资源管理器面板中。

如果您的测试仍然无法显示,请考虑进行以下额外检查:

  • 支持的 .NET Core SDK:确保您正在使用支持的 .NET Core SDK,适用于您的平台和机器。一些 SDK 在特定的操作系统或架构上无法工作。有关更多信息,请访问官方 .NET 下载页面:https://dotnet.microsoft.com/en-us/download
  • 有效的SDK安装:验证是否检测到有效的SDK安装。您可以启用诊断日志记录来检查您的.NET项目检测到哪个SDK。请注意,通过像ASDF或Mise这样的不受支持的工具安装的.NET SDK可能不会被检测到,因为它们偏离了Microsoft的官方安装方法。我们建议按照官方说明进行操作。
  • 生成输出:确认构建已完成并生成了相应的输出二进制文件,例如 .dll.exe文件。
  • 项目加载:确保所有项目都已加载完成。在解决方案资源管理器中,查看测试项目旁边的测试图标以确认它们已被检测到。

我的测试出现在测试资源管理器中,但我无法调试它们

确保你的测试针对 NET Core。C# Dev Kit 不支持 .NET Framework 项目,尽管 .NET Framework 项目可能加载并似乎可以正常工作。VS Code 的调试器不支持 .NET Framework。

我刚刚在我的测试项目中添加了新的测试,它们没有出现在测试资源管理器面板中?

C# Dev Kit 要求在测试出现在测试资源管理器面板之前,已经成功构建了您的项目。

通过在解决方案资源管理器中右键单击解决方案并选择构建⇧⌘B(Windows, Linux Ctrl+Shift+B来构建你的解决方案。构建完成后,你的测试将出现在测试资源管理器面板中。

如何收集日志以解决测试资源管理器的问题?

如果您在使用测试资源管理器时遇到问题,您可以启用诊断日志记录以收集更多用于故障排除的信息:

  1. 增加测试浏览器的详细程度: 导航到 C# Dev Kit 设置并增加测试浏览器的详细程度设置从最小的诊断这将生成更详细的日志。
  2. 查看输出Windows:在Visual Studio Code中打开输出Windows,并从下拉菜单中选择C# Dev Kit - 测试浏览器。诊断消息将显示为[开发]前缀。
  3. 收集以下信息: 在报告问题时,请确保包括:
    • 输出Windows的诊断日志。
    • 您的操作系统和版本(例如,Windows 10,macOS 13)。
    • 您正在使用的 C# Dev Kit 扩展版本。转到扩展视图,并将鼠标悬停在扩展上以查看版本信息。

这些信息将有助于更高效地诊断和解决该问题。

调试器

当我按F5时,什么也没有发生

确保你有一个 C# 项目打开或当前文档是一个.cs.razor文件。如果调试器仍然无法加载,请确保已激活 C# Dev Kit 和 C# 扩展。

当我按F5时,它要求我“选择一个调试器”。我该如何知道该选择哪一个?

如果您正在尝试调试 .NET 控制台应用程序、Blazor 服务器应用程序、Blazor WebAssembly 或 Web 应用程序,请确保选择 C# 选项。其他选项可能是其他扩展的一部分,例如 Node 用于 JavaScript 调试或 Python 用于 Python 调试,而不是 C# Dev Kit 的一部分。

当我按F5时,系统提示我输入密码(仅限macOS)

macOS默认禁用了开发者模式,并且如果一个程序想要被用作调试器,会提示输入密码以保护用户。

如果您希望禁用这些提示,可以运行以下命令:

  • DevToolsSecurity --启用
  • 请将以下文本翻译成中文: sudo dscl . append /Groups/_developer GroupMembership $USER

为什么调试不工作?

如果你正在尝试调试一个库或测试项目,你可能需要采取一些额外的步骤来确保你的代码能够正确地调试。要调试一个库,你可以创建一个与该库交互的控制台或网络应用程序。对于测试项目,你可以使用测试资源管理器有效地调试你的代码。

在调试时,我的断点无法绑定

你正在调试的进程不是以调试模式构建的,请确保在调试进程之前以调试模式构建。

C# 编辑器

如何让IntelliSense正确工作?

确保你有一个项目或解决方案打开。如果你有多个解决方案,扩展将自动打开一个或提示你打开一个。接下来,在设置搜索栏中搜索“Trace”,并将Dotnet > Server:设置为Trace,从下拉菜单中选择。此选项提供更多的输出信息,以帮助开发团队诊断问题。

设置 Dotnet 服务器为跟踪

一旦你进行了这个更改,通过打开命令面板(⇧⌘P(Windows, Linux Ctrl+Shift+P),然后输入“Reload Window”并按Enter重新加载Windows。重新加载Windows后,在输出面板(⇧⌘U(Windows Ctrl+Shift+U,Linux Ctrl+K Ctrl+H)中选择项目,查看项目日志。这将显示任何与项目未完全加载相关的错误。复制输出面板中的所有文本,并通过VS Code报告该问题,确保包含复制的文本。

C# 扩展无法启动服务器

作为一种解决方案,您可以将 .NET 运行时获取扩展指向现有 .NET 7 安装dotnetAcquisitionExtension.existingDotnetPath设置:

{
  "dotnetAcquisitionExtension.existingDotnetPath": [
    {
      "extensionId": "msazuretools.azurerm-vscode-tools",
      "path": "C\\Program Files\\dotnet\\dotnet.exe"
    }
  ]
}

我有太多诊断或我没有足够的诊断

C# 扩展允许您配置各种背景代码分析设置。要访问设置,请转到文件 > 首选项 > 设置,或使用键盘快捷键 (⌘, (Windows, Linux Ctrl+,))。在搜索栏中,输入“分析”以缩小与代码分析相关的设置。在为以下内容运行背景代码分析:下,您可以从下拉菜单中选择分析范围。默认设置是分析打开的文件,但您可以自定义为整个解决方案、无或打开的文档。

配置后台代码分析

您还可以使用EditorConfig文件来配置诊断和代码分析。要了解更多关于EditorConfig的信息,请查看文档

如果你看到的诊断信息不够或者完全没有,有可能是你的项目没有完全加载。要检查是否是这种情况,请参阅 如何让IntelliSense正确工作? 它提供了如何验证你的项目是否完全加载的说明。

Razor 编辑器

大多数或所有 Blazor 组件都显示警告

在Blazor组件可以被发现之前,C# Dev Kit需要成功加载您的项目。此外,Razor语言服务器需要一个项目.razor.vscode.bin生成此文件是为了了解您的项目状态。如果此文件未生成,或者未生成任何组件,可能会对Razor体验产生影响。

为了提高性能,该扩展有时会延迟生成或加载此文件,直到你打开第一个.razor.cshtml文件。为了确保您尝试使用的项目中的解决方案资源管理器没有错误,请仔细检查。

如果您的项目已正确加载,请验证一个项目.razor.vscode.bin文件已存在于obj\Debug\<tfm>在你的文件系统上创建一个文件夹。由于这是一个二进制文件,直接验证文件内容并不直接,但通常情况下,大多数Razor项目应该生成至少150KB大小的文件。如果文件只有几千字节,这意味着标记助手和/或组件可能没有正确发现。

要强制文件重新生成,请关闭任何打开的.razor.cshtml文件,重新加载 VS Code Windows,一旦项目正确加载,打开任何.razor.cshtml触发再生过程的文件。

目标框架错误在Razor文件中被提及

Razor 语言服务器通常没有“解决方案”的概念,而是根据是否存在 来加载项目。项目.razor.vscode.bin项目中的文件obj\Debug\<tfm>文件夹。有时,不再使用的目标框架的旧文件可能会引起混淆,使Razor服务器认为项目是多目标的,或者某些组件在它们不再被引用时仍然被引用。

为了解决此问题,请清除内部的旧文件夹对象文件夹或全部清除。然后,重新加载VS CodeWindows并打开一个.razor文件。这应该确保生成新的JSON文件,并删除旧的文件。

智能代码

我无法获得整行补全。

当启用GitHub Copilot扩展时,整行补全功能将被禁用,以便您可以利用更先进的AI补全功能。您可以通过检查 VS Code 右下角是否有 Copilot 标志来验证 Copilot 是否已启用。

热更新

在开始调试后,热重载图标未显示

只有在C# Dev Kit的Hot Reload选项启用时,调试器才会启动Hot Reload会话调试器设置。如果启用该选项,在调试时状态栏上应出现Hot Reload图标:

底部栏中的热重载图标

您可以点击热重载图标,或者通过打开C# 热重载输出Windows来查看诊断信息。如果您看不到这两个选项,该项目可能不支持 C# Dev Kit 扩展,详情请见支持热重载的项目

热重载支持哪些类型的编辑?

查看支持的代码更改,了解支持的 C# 代码更改列表,这些更改可以通过 Hot Reload 进行。