如何在 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 核心项目的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Flutter 中将 Visual Studio Emulator 与 VScode 连接起来?
如何在 VSCode 设置中将文件关联设置为自定义 .env 文件名?
只有在配置文件或 Page 指令中将 enableSessionState 设置为 true 时,才能使用会话状态。还请确保在应用程序配置的 // 节中包括 System.Web.SessionSta