C# 开发套件常见问题解答

使用此 FAQ(常见问题)主题了解有关 C# 开发工具包扩展的更多信息并解决您可能遇到的问题。

一般的

什么是 C# 开发工具包?

C# Dev Kit是一个扩展,旨在增强 Visual Studio Code 中的 C# 开发体验。它旨在为 VS Code 带来更广泛、更高效、更可靠的 C# 体验。开发工具包不会取代现有的 C# 扩展,而是在其提供的出色语言服务功能的基础上添加了功能。开发人员可以选择继续使用现有 C# 扩展的更新版本,或通过添加 C# 开发工具包来增强体验。

目前支持哪些项目类型?

C# Dev Kit 支持为 .NET Core(通常也称为 .NET)构建 Web 应用程序、控制台应用程序、类库项目和测试项目。.NET MAUI 扩展和Unity扩展构建在 C# Dev Kit 之上,并为构建.NET 多平台应用程序 UI (MAUI)应用程序和 Unity 应用程序提供额外支持。这些扩展支持现代 .NET 项目格式,也称为“sdk 样式”项目。如果要构建非 SDK 格式的项目(例如.NET Framework应用程序和 Xamarin 应用程序),请参阅项目系统部分。

C# 开发工具包中包含哪些扩展?

如今,C# 开发工具包系列中包含的扩展包括:

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

这些扩展还具有带有自己许可的依赖项 - 例如,C# Dev Kit 扩展依赖于C# 扩展

谁可以使用 C# 开发工具包?

C# 开发工具包可通过社区许可证向符合资格的人员提供,并且还作为现有Visual Studio 订阅的另一个补充。这意味着拥有有效 Visual Studio 订阅的开发人员现在就可以使用 C# Dev Kit。

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

我在哪里提交反馈和建议?

用户可以通过 VS Code 的“帮助”>“报告问题”来报告问题或建议。选择是否是错误、功能请求或性能问题,在扩展上进行文件,然后从扩展列表中选择C# Dev Kit 。

帮助 > 报告问题图像

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

不会。C# Dev Kit 是闭源的,但依赖于 C# for VS Code 扩展,该扩展是开源的,并且都与RoslynRazor等开源组件进行通信。我们 C# 开发工具包的目标之一是为使用 VS Code 的 C# 开发人员提供改进的生产力体验。为了实现这一目标,C# Dev Kit 包含了一些与我们其他工具共享的专有、闭源功能。为了向 VS Code 用户提供这些体验,我们需要引入 C# Dev Kit 作为闭源扩展。

我怎样才能做出贡献?

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

该项目采用了贡献者契约定义的行为准则,以阐明我们社区的预期行为。有关详细信息,请参阅.NET 基金会行为准则。通过签署CLA,社区可以免费使用您对 .NET 基金会项目的贡献。

.NET SDK

安装脚本超时

请注意,根据您的网络速度,安装 .NET Core 运行时可能需要一些时间。默认情况下,如果完成时间超过 4.5 分钟,安装将失败终止。如果您认为下载时间太短(或太多),您可以通过设置dotnetAcquisitionExtension.installTimeoutValue自定义值来更改超时值。

了解有关配置 VS Code 设置的更多信息,并参阅下面的文件中自定义超时的示例settings.json。在此示例中,自定义超时值为 180 秒,即 3 分钟:

{
  "dotnetAcquisitionExtension.installTimeoutValue": 180
}

获取 .NET 7 时出错

获取 .NET 7 时出错

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

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

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

如何手动安装 .NET?

如果 .NET 安装失败或者您想要重复使用现有的 .NET 安装,则可以使用该dotnetAcquisitionExtension.existingDotnetPath设置。.NET 可以从.NET 网站手动安装。要将扩展定向到该安装,请使用扩展 ID 和路径更新您的设置,如下所示:

视窗

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

苹果系统

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

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

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

{
  "dotnetAcquisitionExtension.proxyUrl": "https://your_proxy_url:port"
}

项目体系

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

这通常是因为该项目面向 .NET Framework 而不是 .NET Core/.NET。目前,C# Dev Kit 不支持 .NET Framework 项目。

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

要解决此问题,您有两种选择。

您可以将项目更新为 SDK 样式项目,以访问所有可用的 C# Dev Kit 功能。

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

我单击“创建 .NET 项目”按钮,但没有任何反应

当扩展版本不匹配时,通常会发生这种情况。C# 开发工具包需要 2.0 版或更高版本的C# 扩展。如果您使用的是 C# 扩展 v1,C# Dev Kit 以及 C# Dev Kit 相关命令将无法正常工作。要解决此问题,请将 C# 扩展升级到最新版本。

项目系统报告遇到问题

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

无法恢复解决方案

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

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

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

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

导致此错误的最可能原因是global.json文件指定的 SDK 与系统上安装的 SDK 不同。

未找到兼容的 .NET SDK

打开“输出”窗口并切换到“项目”窗格以查找更多信息。你应该看到这样的东西:

输出窗口项目窗格

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

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

SDK 也可能未安装在 C# Dev Kit 已知的位置。例如,如果 SDK 是由包管理器而不是通过 Microsoft 提供的安装程序安装的,则可能会发生这种情况。要解决此问题,请通过包管理器卸载 SDK,然后通过Download .NET安装它。

测试资源管理器

为什么我的测试没有出现在“测试资源管理器”面板中?

确保您的解决方案包含测试项目。仅包含属于打开的解决方案一部分的测试项目。要查看测试项目是否是解决方案的一部分,请在文件资源管理器中打开“解决方案资源管理器”视图,然后查看该项目是否出现在树中。右键单击解决方案节点可添加现有测试项目,或在解决方案中创建新的测试项目。

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

验证您的测试项目是解决方案的一部分后,通过右键单击解决方案资源管理器中的解决方案并选择“构建或使用⇧⌘B”(Windows、Linux Ctrl+Shift+B来构建您的解决方案。构建完成后,您的测试将显示在“测试资源管理器”面板中。

我的测试显示在“测试资源管理器”面板中,但我无法调试它们

确保您的测试针对 NET Core。C# Dev Kit 不支持 .NET Framework 项目,尽管 .NET Framework 项目可能会加载并且看起来可以工作。VS Code 中的调试器不支持 .NET Framework。

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

C# Dev Kit 要求它已成功构建您的项目,然后测试才会显示在“测试资源管理器”面板中。

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

调试器

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

确保您打开了 C# 项目或者活动文档是.cs.razor文件。如果调试器仍然无法加载,请确保 C# 开发工具包和 C# 扩展均已激活。

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

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

为什么调试不起作用?

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

调试时,我的断点没有绑定

您正在调试的进程不是在“调试”中构建的,请确保在调试进程之前构建为“调试”。

C# 编辑器

如何让 IntelliSense 正常工作?

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

将 Dotnet 服务器设置为跟踪

完成此更改后,通过打开命令面板 ( ⇧⌘P (Windows、Linux Ctrl+Shift+P ) ) 重新加载窗口,然后输入“重新加载窗口”并按Enter。重新加载窗口后,在“输出”面板 ( ⇧⌘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 正常工作?它提供了有关如何验证项目是否已完全加载的说明。

剃刀编辑器

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

在发现 Blazor 组件之前,C# Dev Kit 需要成功加载您的项目。此外,Razor 语言服务器需要project.razor.vscode.json生成一个文件才能了解项目的状态。如果未生成此文件,或者在没有任何组件的情况下生成此文件,则 Razor 体验可能会受到影响。

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

如果您的项目已正确加载,请验证文件系统上的文件夹project.razor.vscode.json中是否存在文件。obj\Debug\<tfm>在该文件中,确保不存在空数组TagHelpers

要强制重新生成文件,请关闭所有打开的.razor.cshtml文件,重新加载 VS Code 窗口,并在项目正确加载后,打开任何.razor.cshtml文件以触发重新生成过程。

Razor 文件中提到了目标框架错误

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

要解决此问题,请清除obj文件夹中的旧文件夹或清除所有文件夹。然后,重新加载 VS Code 窗口并打开一个.razor文件。这应该确保生成新的 JSON 文件,并删除旧的文件。

智能代码

我没有完成整条线

启用GitHub Copilot扩展后,整行补全功能将被禁用,以便您能够利用更高级的AI 补全功能。您可以通过检查 VS Code 右下角是否存在 Copilot 徽标来验证 Copilot 是否已启用。