如何在 vscode 中将 `System.Web.Extensions` 程序集添加到 .net 核心项目

Posted

技术标签:

【中文标题】如何在 vscode 中将 `System.Web.Extensions` 程序集添加到 .net 核心项目【英文标题】:How to add `System.Web.Extensions` assembly to .net core project in vscode 【发布时间】:2018-01-23 01:54:08 【问题描述】:

我已经安装了对 vscode 的 c# 支持(版本是 1.15.0)并通过 dotnet new console 创建了一个 HelloWorld 项目。

现在在Program.cs 中,我想使用依赖于System.Web.Extensions 程序集的javascriptSerializer 类。我输入 using System.Web.Script.Serialization; 并运行 dotnet restore ,但 vscode 无法解决它。错误是,

命名空间中不存在类型或命名空间名称“Web” “系统”(您是否缺少程序集引用?)

似乎System.Web 不是.net core 的一部分,但是有没有办法将程序集添加到项目中?

我找不到在其他帖子中引用的 project.json 文件,因为它是一个 csproj 项目。

【问题讨论】:

为什么不用Newtonsoft.Json进行序列化? @koelkastfilosoof 实际上我正在使用 Newtonsoft.Json 进行序列化。这里我只想知道如何添加程序集。 请记得点赞有用的答案,并给解决了您的问题的accept the answer 点赞以将此问题标记为已解决。 【参考方案1】:

System.Web.Extensions 是完整的 .net 框架的一部分。如果要序列化和反序列化对象,可以使用Newtonsoft.Json

#using Newtonsoft.Json
....
JsonConvert.DeserializeObject(json);

更新

只需从 NuGet 获取包名称和版本号并添加到 .csproj 然后保存。系统将提示您运行将导入新包的还原。

<ItemGroup>
     <PackageReference Include="Newtonsoft.Json" Version="9.0.1" />
  </ItemGroup>

【讨论】:

但我想知道如何在 vscode 中添加 System.Web.Extensions 或其他程序集。 可以使用dotnet cli dotnet add package Newtonsoft.Json 只是不要使用System.Web。 .Net Core 旨在独立于平台。 System.Web 是 Windows 原生的。正如 Santosh 已经指出的那样:使用 Json.Net @santoshsingh 感谢更新。我试过你的代码并成功了。控制台给出Package Microsoft.EntityFrameworkCore 2.0.0 is not compatible with netcoreapp1.1(.NETCoreApp,Version=v1.1). Package Microsoft.EntityFrameworkCore 2.0.0 supports: netstandard2.0 (.NETStandard,Version=v2.0) One or more packages are incompatible with .NETCoreApp,Version=v1.1. ,@marco 和@poke 都解释了。 @santoshsingh 多目标框架会解决 OP 的问题吗?【参考方案2】:

这里我只是想知道如何添加程序集。

一般来说,您的.csproj 中会有这样的节点:

<Reference Include="System.Web.Extensions" />

但是,由于您使用的是 .NET Core,因此您无法引用面向完整 .NET Framework 的程序集。在这种情况下,System.Web.Extensions 就是其中之一,因此您不能在 .NET Core 项目中使用它。

【讨论】:

@poke 多目标框架会解决 OP 的问题吗? @ManirajSS 当然,但是您仍然没有将 .NET Framework 程序集与 .NET Core 一起使用。以 .NET Framework 为目标时,您将使用 .NET Framework 程序集,而在以 .NET Core 为目标时,您仍然需要弄清楚该做什么。 @poke 我只想在一个文件中同时定位 .net core 2.0 和 net40。所有其他文件都必须在 .net core 2.0 上运行。我试图避免 #if #endif 在其他文件中,除了一个多框架文件 @ManirajSS 是的,你可以这样做,但你必须为 .NET Core 目标提供一些适当的“后备”。如果您需要这方面的帮助,请随时打开一个新问题并将其链接给我。 @poke re“多目标框架会解决 OP 的问题吗?”这取决于。如果目标是完整的 .NET 框架,它可能会工作。如果一个或多个目标是 netstandard,那么它不会。【参考方案3】:

System.Web.Extensions.Serialization 替换为System.Text.Json.Serialization。两者的用法很相似。

【讨论】:

【参考方案4】:

dotnet 恢复

dotnet restore - 恢复项目的依赖项和工具。

dotnet restore [<ROOT>] [--configfile] [--disable-parallel] [--ignore-failed-sources] [--no-cache] [--no-dependencies] [--packages] [-r|--runtime] [-s|--source] [-v|--verbosity]
dotnet restore [-h|--help]

更多帮助More Help here

【讨论】:

以上是关于如何在 vscode 中将 `System.Web.Extensions` 程序集添加到 .net 核心项目的主要内容,如果未能解决你的问题,请参考以下文章

如何在 vscode 中将更改的文件与未跟踪的文件分开?

如何在 Flutter 中将 Visual Studio Emulator 与 VScode 连接起来?

如何在 VSCode 设置中将文件关联设置为自定义 .env 文件名?

只有在配置文件或 Page 指令中将 enableSessionState 设置为 true 时,才能使用会话状态。还请确保在应用程序配置的 // 节中包括 System.Web.SessionSta

VSCode 必装的 10 个高效开发插件;JDK 13 中将增加文本块特性;百度 HTTPS 部署实践

在 VSCode 中将 SpecFlow 测试添加到 .NET Core 项目