C# 开发工具包常见问题解答
使用此常见问题解答 (FAQ) 主题详细了解 C# 开发工具包扩展并排查您可能遇到的问题。
常规
什么是 C# 开发工具包?
C# 开发工具包 是一个扩展,旨在增强您在 Visual Studio Code 中的 C# 开发体验。它的目标是为 VS Code 提供更丰富、高效和可靠的 C# 体验。C# 开发工具包不会取代 现有的 C# 扩展,而是在此基础上添加更多功能。开发人员可以选择继续使用现有 C# 扩展的更新版本,或通过添加 C# 开发工具包来增强他们的体验。
目前支持哪些项目类型?
C# 开发工具包支持构建 Web 应用程序、控制台应用程序、类库项目和 .NET Core 的测试项目,通常也称为 .NET。 .NET MAUI 扩展 和 Unity 扩展 是在 C# 开发工具包的基础上构建的,并为构建 .NET 多平台应用程序 UI (MAUI) 应用程序和 Unity 应用程序提供了额外的支持。这些扩展支持现代 .NET 项目格式,也称为“sdk 样式”项目。如果您正在构建非 SDK 格式的项目(例如 .NET Framework 应用程序和 Xamarin 应用程序),请参阅 项目系统 部分。
C# 开发工具包中包含哪些扩展?
今天,C# 开发工具包系列中包含的扩展是
这些扩展的使用受 C# 开发工具包系列扩展的 EULA 约束。
这些扩展还具有依赖项,这些依赖项也具有自己的许可 - 例如,C# 开发工具包依赖于 C# 扩展 和 .NET 安装工具。
为什么 C# 开发工具包没有激活/找不到 C# 开发工具包命令?
当您尝试编辑 C# 文件时,C# 开发工具包没有激活的原因可能有多个。
- **未安装 C# 扩展的 2.0 版或更高版本。**C# 开发工具包需要 C# 扩展的 2.0 版或更高版本。请检查是否已安装 C# 扩展,以及您是否有 2.0 版或更高版本。
- **工作区更喜欢 C# 扩展。**C# 开发工具包不支持 .NET Framework 项目,如果您已将
dotnet.preferCSharpExtension
设置设置为 true,则 C# 开发工具包将在此工作区中被禁用。如果该项目不是 .NET Framework 项目,请确保禁用此设置。 - **使用只读操作系统。**C# 开发工具包需要对其自己的扩展文件夹和 VS Code 提供的扩展文件夹具有写入权限,以便在操作系统中写入任意状态,因此,如果您使用的是完全只读的操作系统,C# 开发工具包将无法工作。
如果您已检查这些内容,但仍找不到 C# 开发工具包命令,请报告问题并提供 C# 开发工具包的“输出”窗口中的信息。
许可和贡献
谁可以使用 C# 开发工具包?
C# 开发工具包通过社区许可提供给符合条件的用户,并且也是现有 Visual Studio 订阅 的附加功能。这意味着 C# 开发工具包目前可供拥有有效 Visual Studio 订阅的开发人员使用。
对于个人、学术和开源项目,C# 开发工具包可免费使用。对于商业用途,最多 5 个人的团队也可以免费使用 C# 开发工具包。对于 6 个或更多开发人员,这些用户将需要 Visual Studio 专业版(或更高版本)订阅。C# 开发工具包也包含在 GitHub Codespaces 和 Microsoft Dev Box 中,因此使用这些产品的用户无需额外付费即可使用 C# 开发工具包。
我应该在哪里提交反馈和建议?
用户可以通过 VS Code 的“帮助”>“报告问题”来报告问题或提出建议。选择是错误、功能请求还是性能问题,在“扩展”上提交,然后从扩展列表中选择“C# 开发工具包”。
C# 开发工具包是开源的吗?为什么不是?
不是。C# 开发工具包是闭源的,但它依赖于 C# for VS Code 扩展(它是开源的),两者都与开源组件(例如 Roslyn 和 Razor)进行通信。我们使用 C# 开发工具包的目标之一是为使用 VS Code 的 C# 开发人员提供改进的生产力体验。为了实现这一目标,C# 开发工具包包含一些专有的闭源功能,这些功能与我们的其他工具共享。为了使这些体验可供 VS Code 用户使用,我们需要将 C# 开发工具包作为闭源扩展引入。
我如何贡献?
C# 扩展(它是 C# 开发工具包的一部分)完全是开源的,并受 这些许可条款 约束。此扩展的源代码可在 https://github.com/dotnet/vscode-csharp 上获得,并根据 MIT 许可进行授权。
该项目已采用由 贡献者公约 定义的行为准则,以阐明我们社区中预期的行为。有关更多信息,请参阅 .NET Foundation 行为准则。通过签署 CLA,社区可以自由地使用您的贡献来进行 .NET Foundation 项目。
.NET SDK
安装脚本超时
请注意,根据您的网络速度,安装 .NET Core 运行时可能需要一些时间。默认情况下,如果安装完成时间超过 4.5 分钟,则安装将不成功地终止。如果您认为此时间太短(或太长),无法允许下载,则可以通过将 dotnetAcquisitionExtension.installTimeoutValue
设置为自定义值来更改超时值。
详细了解如何配置 VS Code 设置,并查看以下 settings.json
文件中自定义超时的示例。在此示例中,自定义超时值为 180 秒,即 3 分钟
{
"dotnetAcquisitionExtension.installTimeoutValue": 180
}
获取 .NET SDK 时出错
注意:如果您位于中国,您的 .NET SDK 下载可能会被阻止,从而导致超时。
您需要确保已安装 .NET SDK。作为一种解决方法,您可以将 .NET 运行时获取扩展指向现有的 .NET 安装
如何手动安装 .NET?
如果 .NET 安装失败或您想重用现有 .NET 安装,您可以使用 dotnetAcquisitionExtension.existingDotnetPath
设置。您可以从 **C# Dev Kit 演练** 或 .NET 网站 手动安装 .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://your_proxy_url:port"
}
项目系统
解决方案资源管理器报告我的项目在 C# Dev Kit 中不受支持
这通常是因为项目以 .NET Framework 为目标,而不是以 .NET Core/.NET 为目标。目前,C# Dev Kit 不支持 .NET Framework 项目。
要解决此问题,您有两个选择。
您可以 更新您的项目 到 SDK 风格的项目,以访问所有可用的 C# Dev Kit 功能。
或者,您可以将项目和解决方案加载委托给 C# 扩展,在设置编辑器中使用 **首选 CSharp 扩展** 工作区设置。请记住,使用此设置将无法使用一些 C# Dev Kit 功能。要访问此设置,请转到设置编辑器并选择 **工作区** 选项卡。然后,在搜索栏中搜索“Prefer CSharp”,并在 **Prefer CSharp Extension** 设置旁边选中复选框。如果您尝试加载 .NET Framework 项目,C# Dev Kit 将自动显示一条通知,要求您将项目更新到 SDK 风格的项目,或让 C# 扩展加载您的项目或解决方案,方法是选择通知中的 **使用 C# 扩展**。此选项将自动选择 **首选 CSharp 扩展** 设置。请注意,您需要重新加载 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”
此错误最可能的原因是 global.json
文件指定了与系统上安装的 SDK 不同的 SDK。
打开输出窗口,并切换到 **项目** 面板以查找更多信息。您应该看到类似以下内容
要解决此问题,请将 global.json
更新为指定已安装的 SDK,或从 下载 .NET 页面安装指定的 SDK。
接下来,关闭并重新打开工作区。
SDK 也可能未安装在 C# Dev Kit 已知的路径中。例如,如果 SDK 是通过包管理器而不是通过 Microsoft 提供的安装程序安装的,则会发生这种情况。要解决此问题,请通过包管理器卸载 SDK,然后通过 下载 .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# Dev Kit 和 C# 扩展都已激活。
当我按下 F5 时,它要求我“选择调试器”。如何知道选择哪个?
如果您尝试调试 .NET 控制台应用程序、Blazor 服务器应用程序、Blazor WebAssembly 或 Web 应用程序,请确保选择 **C#** 选项。其他选项可能是其他扩展的一部分,例如用于 JavaScript 调试的 **Node** 或用于 Python 调试的 **Python**,它们不属于 C# Dev Kit。
当我按下 F5 时,它提示我输入密码(仅限 macOS)
macOS 默认情况下禁用了开发者模式,如果程序想要用作调试器,它会提示输入密码以保护用户。
如果您想禁用这些提示,可以运行以下命令
DevToolsSecurity --enable
sudo dscl . append /Groups/_developer GroupMembership $USER
为什么调试无法工作?
如果您尝试调试库或测试项目,您可能需要采取一些额外的步骤来确保您的代码被正确调试。要调试库,您可以创建一个与库交互的控制台或 Web 应用程序。对于测试项目,您可以使用测试资源管理器有效地调试代码。
调试时,我的断点没有绑定
您正在调试的进程未在调试模式下构建,请确保在调试进程之前以调试模式构建。
C# 编辑器
如何让 IntelliSense 正确工作?
确保您已打开项目或解决方案。如果您有多个解决方案,扩展会自动打开一个或提示您打开一个。接下来,在设置搜索栏中搜索“Trace”,并将 **Dotnet** > **服务器:** 从下拉菜单中设置为 **Trace**。此选项提供了更多输出信息,以帮助开发团队诊断问题。
完成此更改后,通过打开命令面板 (⇧⌘P (Windows、Linux Ctrl+Shift+P)),然后键入“Reload Window”并按下 Enter 重新加载窗口。重新加载窗口后,检查输出面板 (⇧⌘U (Windows Ctrl+Shift+U、Linux Ctrl+K Ctrl+H)) 中的项目日志,并从下拉菜单中选择 **项目**。这将显示与您的项目未完全加载相关的任何错误。复制输出面板中的所有文本,并通过 VS Code 报告问题,确保包含复制的文本。
C# 扩展无法启动服务器
作为解决方法,您可以使用 dotnetAcquisitionExtension.existingDotnetPath
设置将 .NET 运行时获取扩展指向现有的 .NET 7 安装
{
"dotnetAcquisitionExtension.existingDotnetPath": [
{
"extensionId": "msazuretools.azurerm-vscode-tools",
"path": "C\\Program Files\\dotnet\\dotnet.exe"
}
]
}
我有很多诊断信息,或者没有足够的诊断信息
C# 扩展 允许您配置各种后台代码分析设置。要访问这些设置,请转到 文件 > 首选项 > **设置**,或者使用键盘快捷键 (⌘, (Windows、Linux Ctrl+,))。在搜索栏中,键入“analysis”以缩小与代码分析相关的设置范围。在 **为以下项目运行后台代码分析:** 下,您可以从下拉菜单中选择分析范围。默认设置是分析打开的文件,但您可以将其自定义为完整解决方案、无或打开的文档。
您还可以使用 EditorConfig 文件来配置诊断和代码分析。要了解有关 EditorConfig 的更多信息,请查看 文档。
如果您没有看到足够的诊断信息或根本没有看到诊断信息,可能是您的项目没有完全加载。要检查是否是这样,请参考部分 如何让 IntelliSense 正确工作?,它提供了有关如何验证您的项目是否已完全加载的说明。
Razor 编辑器
大多数或所有 Blazor 组件显示警告
在发现 Blazor 组件之前,C# Dev Kit 需要成功加载您的项目。此外,Razor 语言服务器需要生成 project.razor.vscode.bin
文件才能了解项目的狀態。如果没有生成此文件,或者没有生成任何组件,Razor 体验可能会受到影响。
为了提高性能,扩展程序有时会延迟生成或加载此文件,直到您打开第一个.razor
或.cshtml
文件。为了确保您尝试使用的项目在解决方案资源管理器中没有错误,请仔细检查。
如果您的项目已正确加载,请验证您的文件系统上的obj\Debug\<tfm>
文件夹中是否存在project.razor.vscode.bin
文件。由于它是一个二进制文件,因此无法直接验证文件的内容,但通常大多数 Razor 项目都会生成至少 150KB 的文件。如果文件只有几 KB 大小,则可能意味着标记助手和/或组件没有被正确发现。
要强制文件重新生成,请关闭所有打开的.razor
或.cshtml
文件,重新加载 VS Code 窗口,并在项目正确加载后,打开任何.razor
或.cshtml
文件以触发重新生成过程。
目标框架错误在 Razor 文件中提到
Razor 语言服务器通常没有“解决方案”的概念,而是根据项目obj\Debug\<tfm>
文件夹中是否存在project.razor.vscode.bin
文件来加载项目。有时,不再使用的目标框架的旧文件会导致混淆,使 Razor 服务器认为项目是多目标的,或者一些组件仍然被引用,而实际上并非如此。
要解决此问题,请清除obj
文件夹中的旧文件夹或清除所有文件夹。然后,重新加载 VS Code 窗口并打开一个.razor
文件。这将确保生成新的 JSON 文件,并将旧文件删除。
IntelliCode
我没有获得整行补全
启用GitHub Copilot扩展后,整行补全功能将被禁用,以便您可以利用更先进的AI 补全功能。您可以通过检查 VS Code 右下角是否显示 Copilot 徽标来验证 Copilot 是否已启用。
热重载
调试开始后,热重载图标未出现
只有在 C# Dev Kit 的调试器设置中启用了热重载选项时,调试器才会启动热重载会话。如果启用了该选项,则在调试时预计状态栏中会显示热重载图标。
您可以单击热重载图标,或者通过打开C# 热重载输出窗口查看诊断信息。如果您没有看到这些内容,则项目可能不受 C# Dev Kit 扩展支持,请参见热重载支持的项目。
热重载支持哪些类型的编辑?
请参见支持的代码更改,了解热重载支持的 C# 代码更改列表。