C# 开发工具包常见问题解答
使用此常见问题解答(FAQ)主题,了解更多关于C# Dev Kit扩展的信息,并解决您可能遇到的问题。
通用
什么是C#开发工具包?
C# Dev Kit 是一个旨在增强你在 Visual Studio Code 中的 C# 开发体验的扩展。它的目标是为 VS Code 带来更广泛、更高效、更可靠的 C# 体验。C# Dev Kit 并不取代 现有的 C# 扩展,而是在其提供的强大语言服务功能基础上进行扩展。开发者可以选择继续使用现有 C# 扩展的更新版本,或者通过添加 C# Dev Kit 来增强他们的体验。
目前支持哪些项目类型?
C# Dev Kit 支持构建用于 .NET Core(通常也称为 .NET)的 Web 应用程序、控制台应用程序、类库项目和测试项目。.NET MAUI 扩展 和 Unity 扩展 构建在 C# Dev Kit 之上,并为构建 .NET 多平台应用 UI (MAUI) 应用程序和 Unity 应用程序提供了额外的支持。这些扩展支持现代的 .NET 项目格式,也称为“sdk-style”项目。如果您正在构建非 SDK 格式的项目,例如 .NET Framework 应用程序和 Xamarin 应用程序,请参阅 项目系统 部分。
C# 开发工具包中包含哪些扩展?
今天,C# Dev Kit 系列中包含的扩展有:
这些扩展的使用受C# Dev Kit系列扩展的最终用户许可协议的约束。
这些扩展也有自己的依赖项,这些依赖项带有自己的许可证——例如,C# Dev Kit 依赖于 C# 扩展 和 .NET 安装工具。
为什么C# Dev Kit没有激活 / 找不到C# Dev Kit命令?
有几个原因导致在尝试编辑C#文件时C# Dev Kit没有激活。
- 未安装C#扩展的2.0+版本。C# Dev Kit需要C#扩展的2.0或更高版本。请检查确保已安装C#扩展,并且版本为2.0或更高。
- 工作区偏好C#扩展。C# Dev Kit不支持.NET Framework项目,如果您已将
dotnet.preferCSharpExtension
设置设为true,C# Dev Kit将在该工作区中被禁用。如果项目不是.NET Framework项目,请确保禁用此设置。 - 使用只读操作系统。C# Dev Kit 需要对其自身的扩展文件夹和 VS Code 提供的扩展文件夹具有写访问权限,以便在操作系统中写入任意状态,因此如果您使用的是完全只读的操作系统,C# Dev Kit 将无法工作。
如果您已经检查了这些内容,但仍然找不到C# Dev Kit命令,请报告问题并提供C# Dev Kit输出窗口中的信息。
许可与贡献
谁可以使用C#开发工具包?
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# 开发工具包是开源的吗?为什么不是?
编号 C# Dev Kit 是闭源的,但依赖于开源的 C# for VS Code 扩展,两者都与开源组件如 Roslyn 和 Razor 进行通信。我们推出 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.installTimeoutValue
来自定义超时值。
了解更多关于配置 VS Code 设置的信息,并查看下面在settings.json
文件中的自定义超时示例。在此示例中,自定义超时值为180秒,即3分钟:
{
"dotnetAcquisitionExtension.installTimeoutValue": 180
}
获取 .NET SDK 时出错
注意:如果您位于中国,您的 .NET SDK 下载可能会被阻止并导致超时。
你需要确保已安装.NET SDK。作为一种变通方法,你可以将.NET运行时获取扩展指向现有的.NET安装:
如何手动安装 .NET?
如果 .NET 安装失败或您想重复使用现有的 .NET 安装,您可以使用 dotnetAcquisitionExtension.existingDotnetPath
设置。可以从 C# 开发工具包教程 或 .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#开发工具包中不受支持
这通常是因为项目目标是.NET Framework而不是.NET Core/.NET。目前,C# Dev Kit不支持.NET Framework项目。
要解决这个问题,你有两个选择。
你可以更新你的项目为SDK风格的项目,以访问所有可用的C# Dev Kit功能。
或者,您可以在设置编辑器中使用Prefer CSharp Extension工作区设置,将项目和解决方案加载委托给C#扩展。请注意,使用此设置时,某些C# Dev Kit功能将不可用。要访问此设置,请转到设置编辑器并选择Workspace选项卡。然后,在搜索栏中搜索“Prefer CSharp”,并勾选Prefer CSharp Extension设置旁边的复选框。如果您尝试加载.NET Framework项目,C# Dev Kit将自动显示一个通知,要求您将项目更新为SDK样式项目,或者通过从通知中选择Use C# Extension让C#扩展加载您的项目或解决方案。此选项将自动选择Prefer CSharp Extension设置。请注意,您需要重新加载VS Code才能使此设置生效。
我点击了“创建 .NET 项目”按钮,但没有任何反应
这通常发生在扩展版本不匹配时。C# Dev Kit 需要 C# 扩展 的 2.0 或更高版本。如果您使用的是 C# 扩展的 v1 版本,C# Dev Kit 以及相关的命令将无法正常工作。要解决此问题,请将 C# 扩展升级到最新版本。
项目系统报告遇到了问题
当内部项目系统发生错误时,通常会在VS Code的角落弹出类似这样的通知:
选择打开日志按钮以打开显示问题发生位置的堆栈跟踪视图。选择并复制日志中的所有文本。通过VS Code报告问题,并确保包含从日志中复制的文本。
当我打开我的解决方案时,我收到通知“无法恢复解决方案”
选择显示错误。这将打开NuGet的输出面板。阅读错误信息以确定为什么包恢复无法完成。如果您无法解决问题,请通过VS Code报告问题。
解决方案资源管理器显示“未找到兼容的.NET SDK”
此错误的最可能原因是global.json
文件指定了与系统上安装的SDK不同的版本。
打开输出窗口并切换到项目窗格以查找更多信息。你应该会看到类似这样的内容:
要解决此问题,请更新global.json
以指定已安装的SDK,或从下载 .NET页面安装指定的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)来构建您的解决方案。一旦构建完成,您的测试将出现在测试资源管理器面板中。
如何收集日志以解决Test Explorer的问题?
如果您在使用测试资源管理器时遇到问题,可以启用诊断日志记录以收集更多信息进行故障排除:
- 增加测试资源管理器的详细程度:
导航到C# Dev Kit设置,并将测试资源管理器的详细程度设置从
minimal
增加到diagnostic
。这将生成更详细的日志。 - 检查输出窗口:
在Visual Studio Code中打开输出窗口,并从下拉菜单中选择C# Dev Kit - Test Explorer。诊断消息将带有
[dev]
前缀显示。 - 收集以下信息:
报告问题时,请确保包括:
- 来自输出窗口的诊断日志。
- 您的操作系统和版本(例如,Windows 10,macOS 13)。
- 您正在使用的C# Dev Kit扩展的版本。转到扩展视图,并将鼠标悬停在扩展上以查看版本信息。
这些信息将有助于更有效地诊断和解决问题。
调试器
当我按下F5时,没有任何反应
确保你有一个C#项目打开,或者当前文档是一个.cs
或.razor
文件。如果调试器仍然无法加载,请确保C# Dev Kit和C#扩展都已激活。
当我按下F5时,它会要求我“选择一个调试器”。我该如何选择?
如果您正在尝试调试 .NET 控制台应用程序、Blazor 服务器应用程序、Blazor WebAssembly 或 Web 应用程序,请确保选择 C# 选项。其他选项可能是其他扩展的一部分,例如用于 JavaScript 调试的 Node 或用于 Python 调试的 Python,它们不是 C# 开发工具包的一部分。
当我按下F5时,它会提示我输入密码(仅限macOS)
macOS默认禁用开发者模式,并在程序想要用作调试器时提示输入密码以保护用户。
如果您希望禁用这些提示,可以运行以下命令:
DevToolsSecurity --enable
sudo dscl . append /Groups/_developer GroupMembership $USER
为什么调试不起作用?
如果你正在尝试调试一个库或测试项目,很可能你需要采取一些额外的步骤来确保你的代码被正确调试。要调试一个库,你可以创建一个与库交互的控制台或Web应用程序。对于测试项目,你可以使用测试资源管理器来有效地调试你的代码。
调试时,我的断点没有绑定
您正在调试的进程未在调试模式下构建,请确保在调试进程之前以调试模式构建。
C# 编辑器
如何让IntelliSense正常工作?
确保您已打开一个项目或解决方案。如果您有多个解决方案,扩展程序将自动打开一个或提示您打开一个。接下来,在设置搜索栏中搜索“Trace”,并从下拉菜单中将Dotnet > Server:设置为Trace。此选项提供更多输出信息,以帮助开发团队诊断问题。
一旦你进行了这个更改,通过打开命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))重新加载窗口,然后输入“重新加载窗口”并按下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\
文件夹内是否存在project.razor.vscode.bin
文件。由于它是一个二进制文件,直接验证文件内容并不简单,但通常大多数Razor项目应生成至少150KB大小的文件。如果文件只有几千字节,这意味着标签助手和/或组件可能未被正确发现。
要强制文件重新生成,请关闭任何打开的.razor
或.cshtml
文件,重新加载VS Code窗口,一旦项目正确加载,打开任何.razor
或.cshtml
文件以触发重新生成过程。
Razor 文件中提到了目标框架错误
Razor 语言服务器通常没有“解决方案”的概念,而是根据项目中 obj\Debug\
文件夹中的 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#代码更改列表。