【问题标题】:Downgrade Web API to run on Linux using MONODowngrade Web API to run on Linux using MONO
【发布时间】:2014-06-28 05:05:38
【问题描述】:

我在 C#.net 4.5 中使用 MVC4 开发了 Restful Web API。现在我需要使用 Mono 在 Cent OS Sever 上部署这个 Web API。

我在网上看了一圈发现我需要将版本降级到 4.0 才能在 Linux 机器上使用 Mono 运行它。

如果有人之前尝试过这个或者有任何想法如何做那么请帮助...!!!

【问题讨论】:

  • 我也遇到了这个问题。 Visual Studio 自动创建一个 WebAPI 5.2 项目。我试图删除 WebAPI,并从 Nuget Install-Package Microsoft.AspNet.WebApi -Version 4.0.30506 重新安装,但我遇到了版本不匹配的问题。你的问题解决了吗?
  • 我将保持打开状态。引用的 dup 是关于诊断问题的问题。发帖人询问如何执行降级,而不是诊断问题。 dup 没有说明如何降级。 (在执行降级时很可能会有另一个重复)。

标签: c# asp.net linux mono asp.net-web-api


【解决方案1】:

要降级,只需执行以下操作,

  1. 在 VS 中,将项目目标框架更改为 .NET 4 而不是 .NET 4.5 或 4.5.1。
  2. 更新所有 NuGet 包。
  3. 关闭VS。
  4. 转到您的项目文件夹并打开 packages.config。
  5. 找到那些 Microsoft.AspNet.* NuGet 包并将其版本从 5.1.2 更改为 4.0.30506。

请注意,对于 NuGet 包降级有一些例外,

  • Microsoft.AspNet.Razor 需要更改为版本 2.0.30506。
  • 还有很多其他的。

诀窍是转到 http://nuget.org 并搜索每个包,然后选择 2013 年 5 月 30 日星期四发布的版本。

祝你好运。

【讨论】:

  • WebAPI 5.2 与 .Net 4.5 是分开的。 Ubuntu 14.04 存储库中的 3.2.8 不支持 WebAPI 5.2。 @OP 需要降级到 WebAPI 4.0 (4.0.30506)。
【解决方案2】:

从 Lex 的回答开始,我开始在 mono/windows 下进行一个工作项目,这是我从降级中得到的差异......希望它对某人有所帮助。

git diff
diff --git a/MonoApi.csproj b/MonoApi.csproj
index b6fc96f..93f670c 100644
--- a/MonoApi.csproj
+++ b/MonoApi.csproj
@@ -66,14 +66,14 @@
     <HintPath>packages\Newtonsoft.Json.6.0.4\lib\net45\Newtonsoft.Json.dll</HintPath>
   </Reference>
   <Reference Include="System.Net.Http.Formatting">
-    <HintPath>packages\Microsoft.AspNet.WebApi.Client.5.2.2\lib\net45\System.Net.Http.Formatting.dll</HintPath>
+    <HintPath>packages\Microsoft.AspNet.WebApi.Client.4.0.30506\lib\net40\System.Net.Http.Formatting.dll</HintPath>
   </Reference>
   <Reference Include="System.Net.Http" />
   <Reference Include="System.Web.Http">
-    <HintPath>packages\Microsoft.AspNet.WebApi.Core.5.2.2\lib\net45\System.Web.Http.dll</HintPath>
+    <HintPath>packages\Microsoft.AspNet.WebApi.Core.4.0.30506\lib\net40\System.Web.Http.dll</HintPath>
   </Reference>
   <Reference Include="System.Web.Http.WebHost">
-    <HintPath>packages\Microsoft.AspNet.WebApi.WebHost.5.2.2\lib\net45\System.Web.Http.WebHost.dll</HintPath>
+    <HintPath>packages\Microsoft.AspNet.WebApi.WebHost.4.0.30506\lib\net40\System.Web.Http.WebHost.dll</HintPath>
   </Reference>
   </ItemGroup>
   <ItemGroup>
diff --git a/Controllers/PersonController.cs b/Controllers/PersonController.cs
index a9c79f0..8a58974 100644
--- a/Controllers/PersonController.cs
+++ b/Controllers/PersonController.cs
@@ -25,7 +25,8 @@ namespace MonoApi.Controllers
    Person person = databasePlaceholder.Get(id);
    if (person == null)
    {
-       throw new HttpResponseException(HttpStatusCode.NotFound);
+       // HttpStatusCode method not implemenent on mono https://github.com/mono/aspnetwebstack/blob/current/src/System.Web.Http/HttpResponseException.cs
+       throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound));
    }
    return person;
  }

到目前为止,除了这些软件包之外,我仍然以 dot net 4.5 为目标,所以我们将看看情况如何。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-09
    • 2022-12-26
    • 2019-11-24
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 2022-12-27
    • 2022-12-28
    相关资源
    最近更新 更多