添加 XML 支持时无法编译 ASP.NET 5 Web API
Can't compile ASP.NET 5 Web API when adding XML support
我正在尝试了解 ASP.NET 5 Web API 如何支持内容协商。为了支持 XML(除了默认的 JSON 支持),,我需要从可选的 NuGet 包中添加该支持。
自从那个答案之后事情发生了一些变化,但我拉下了 Microsoft.AspNet.Mvc.Xml
包并编辑了我的 Startup.cs
文件:
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc().AddMvcOptions(options =>
{
options.InputFormatters.Add(new XmlSerializerInputFormatter());
});
}
但是,这不会编译:
The type 'InputFormatter' is defined in an assembly that is not referenced. You must add a reference to assembly 'Microsoft.AspNet.Mvc.Core, Version=6.0.0.0, Culture=neutral, PublicKeyToken=null'.
以下是完整的编译错误信息:
1>C:\Users\mark\Desktop\WebApplication1\src\WebApplication1\Startup.cs(33,17,33,44): DNX 4.5.1 error CS0012: The type 'InputFormatter' is defined in an assembly that is not referenced. You must add a reference to assembly 'Microsoft.AspNet.Mvc.Core, Version=6.0.0.0, Culture=neutral, PublicKeyToken=null'.
1>C:\Users\mark\Desktop\WebApplication1\src\WebApplication1\Startup.cs(33,45,33,78): DNX 4.5.1 error CS1503: Argument 1: cannot convert from 'Microsoft.AspNet.Mvc.Xml.XmlSerializerInputFormatter' to 'Microsoft.AspNet.Mvc.Formatters.IInputFormatter'
1>C:\Users\mark\Desktop\WebApplication1\src\WebApplication1\Startup.cs(33,17,33,44): DNX Core 5.0 error CS0012: The type 'InputFormatter' is defined in an assembly that is not referenced. You must add a reference to assembly 'Microsoft.AspNet.Mvc.Core, Version=6.0.0.0, Culture=neutral, PublicKeyToken=null'.
1>C:\Users\mark\Desktop\WebApplication1\src\WebApplication1\Startup.cs(33,45,33,78): DNX Core 5.0 error CS1503: Argument 1: cannot convert from 'Microsoft.AspNet.Mvc.Xml.XmlSerializerInputFormatter' to 'Microsoft.AspNet.Mvc.Formatters.IInputFormatter'
错误信息看起来相当清楚,但项目已经包含 Microsoft.AspNet.Mvc.Core
,虽然不是很理想的版本:
Id Versions
-- --------
Microsoft.AspNet.IISPlatformHandler {1.0.0-rc1-final}
Microsoft.AspNet.Mvc {6.0.0-rc1-final}
Microsoft.AspNet.Mvc.Core {6.0.0-rc1-final}
Microsoft.AspNet.Mvc.Xml {6.0.0-beta5}
Microsoft.AspNet.Server.Kestrel {1.0.0-rc1-final}
Microsoft.AspNet.StaticFiles {1.0.0-rc1-final}
Microsoft.Extensions.Configurati... {1.0.0-rc1-final}
Microsoft.Extensions.Configurati... {1.0.0-rc1-final}
Microsoft.Extensions.Logging {1.0.0-rc1-final}
Microsoft.Extensions.Logging.Con... {1.0.0-rc1-final}
Microsoft.Extensions.Logging.Debug {1.0.0-rc1-final}
在我撰写本文时,ASP.NET 5 仅在 Release Candidate 版本中可用,因此以上软件包是最新可用的。
显然,Microsoft.AspNet.Mvc.Core 6.0.0.0
不可用。在一个普通的 .NET 项目中,我会尝试通过绑定重定向来解决这个问题,但由于这是 ASP.NET 5,这显然不再是解决问题的方法。
如何编译我的代码?
我相信您必须在 github 上使用 Microsoft.AspNet.Mvc.Formatters.Xml package instead. Also see this issue。
另外一个热点提示:使用 http://packagesearch.azurewebsites.net/ 搜索哪个 NuGet 包包含您正在寻找的 class。
我正在尝试了解 ASP.NET 5 Web API 如何支持内容协商。为了支持 XML(除了默认的 JSON 支持),
自从那个答案之后事情发生了一些变化,但我拉下了 Microsoft.AspNet.Mvc.Xml
包并编辑了我的 Startup.cs
文件:
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc().AddMvcOptions(options =>
{
options.InputFormatters.Add(new XmlSerializerInputFormatter());
});
}
但是,这不会编译:
The type 'InputFormatter' is defined in an assembly that is not referenced. You must add a reference to assembly 'Microsoft.AspNet.Mvc.Core, Version=6.0.0.0, Culture=neutral, PublicKeyToken=null'.
以下是完整的编译错误信息:
1>C:\Users\mark\Desktop\WebApplication1\src\WebApplication1\Startup.cs(33,17,33,44): DNX 4.5.1 error CS0012: The type 'InputFormatter' is defined in an assembly that is not referenced. You must add a reference to assembly 'Microsoft.AspNet.Mvc.Core, Version=6.0.0.0, Culture=neutral, PublicKeyToken=null'.
1>C:\Users\mark\Desktop\WebApplication1\src\WebApplication1\Startup.cs(33,45,33,78): DNX 4.5.1 error CS1503: Argument 1: cannot convert from 'Microsoft.AspNet.Mvc.Xml.XmlSerializerInputFormatter' to 'Microsoft.AspNet.Mvc.Formatters.IInputFormatter'
1>C:\Users\mark\Desktop\WebApplication1\src\WebApplication1\Startup.cs(33,17,33,44): DNX Core 5.0 error CS0012: The type 'InputFormatter' is defined in an assembly that is not referenced. You must add a reference to assembly 'Microsoft.AspNet.Mvc.Core, Version=6.0.0.0, Culture=neutral, PublicKeyToken=null'.
1>C:\Users\mark\Desktop\WebApplication1\src\WebApplication1\Startup.cs(33,45,33,78): DNX Core 5.0 error CS1503: Argument 1: cannot convert from 'Microsoft.AspNet.Mvc.Xml.XmlSerializerInputFormatter' to 'Microsoft.AspNet.Mvc.Formatters.IInputFormatter'
错误信息看起来相当清楚,但项目已经包含 Microsoft.AspNet.Mvc.Core
,虽然不是很理想的版本:
Id Versions
-- --------
Microsoft.AspNet.IISPlatformHandler {1.0.0-rc1-final}
Microsoft.AspNet.Mvc {6.0.0-rc1-final}
Microsoft.AspNet.Mvc.Core {6.0.0-rc1-final}
Microsoft.AspNet.Mvc.Xml {6.0.0-beta5}
Microsoft.AspNet.Server.Kestrel {1.0.0-rc1-final}
Microsoft.AspNet.StaticFiles {1.0.0-rc1-final}
Microsoft.Extensions.Configurati... {1.0.0-rc1-final}
Microsoft.Extensions.Configurati... {1.0.0-rc1-final}
Microsoft.Extensions.Logging {1.0.0-rc1-final}
Microsoft.Extensions.Logging.Con... {1.0.0-rc1-final}
Microsoft.Extensions.Logging.Debug {1.0.0-rc1-final}
在我撰写本文时,ASP.NET 5 仅在 Release Candidate 版本中可用,因此以上软件包是最新可用的。
显然,Microsoft.AspNet.Mvc.Core 6.0.0.0
不可用。在一个普通的 .NET 项目中,我会尝试通过绑定重定向来解决这个问题,但由于这是 ASP.NET 5,这显然不再是解决问题的方法。
如何编译我的代码?
我相信您必须在 github 上使用 Microsoft.AspNet.Mvc.Formatters.Xml package instead. Also see this issue。
另外一个热点提示:使用 http://packagesearch.azurewebsites.net/ 搜索哪个 NuGet 包包含您正在寻找的 class。