在Azure函数中无法在运行时找到HttpRequestMessageExtensions

Arc*_*ekt 12 azure c#-7.0 azure-functions

我有一个Azure功能应用程序,它创建一个预编译的DLL(因此它使用普通的.cs文件,而不是旧的.csx方法,VS2017之前).以前,它的目标是.Net Framework 4.5.2.我将其更新为4.7,以便使用一些新的C#7功能.我通过"Update-Package -Reinstall"更新了我的NuGet包,并验证它们都在packages.config文件中设置了"net47"目标.

一切都很好.但是当我调用一个使用2 HttpRequestMessageExtensions种方法中的任何一种的函数时,我得到一个异常.例外的一个例子是:

Method not found: 'System.Net.Http.HttpResponseMessage 
  System.Net.Http.HttpRequestMessageExtensions.CreateResponse(
  System.Net.Http.HttpRequestMessage, System.Net.HttpStatusCode)'.
Run Code Online (Sandbox Code Playgroud)

这是一个导致错误的微小测试函数的示例:

using System.Net;
using System.Net.Http;
public static HttpResponseMessage Run(HttpRequestMessage req)
{
        return req.CreateResponse(HttpStatusCode.Accepted, "");         
}       
Run Code Online (Sandbox Code Playgroud)

一旦用Postman调用此函数,我将收到上述异常.我也得到了类似的方法,未发现异常,当我打电话GetQueryNameValuePairs()HttpRequestMessage.

我已经尝试将我的NuGet包更新到最新,没有区别.我已经清理并重建并重新启动了很多次,确保核对我的bin和obj目录.

我不确定可能是什么问题.我想我可以降级回.Net 4.5.2,但我宁愿不.首先,我想使用C#7,而对于两个,我想了解问题是什么而不是避免它.

更新:有趣.问题似乎与System.Net.Http.如果我把它降低到4.0.0一切正常.如果我把它提升到任何更高版本,我会得到上面列出的问题.我尝试将我的每个软件包逐个降低到之前的版本号,以便找到它.然后我将所有这些更新到最新版本,它修复了问题.

Amo*_*mor 7

我也在我这边测试过.该问题与最新版本的System.Net.Http程序集(4.3.2)有关.如果我不手动安装此软件包或安装早期版本(4.3.1/4.3.0),应用程序可以正常工作.

CreateResponse方法是一个用System.Web.Http程序集(版本5.2.3)编写的扩展方法.它似乎与最新版本的System.Net.Http不兼容.请使用早期版本的System.Net.Http跳过错误,您也可以使用关注频道将此问题提交给Microsoft.

https://connect.microsoft.com/VisualStudio/Feedback

有趣.对我来说,如果我的版本高于4.0.0(包括4.1.1或4.3.1),我仍然会遇到无法找到这些扩展方法的问题.

更改包版本期间可能不会更新程序集.从bin\Debug \net47文件夹中,我们可以检查我们使用的当前程序集版本.

如果修改的装配日期是2/9/2017,则包版本为4.3.1.如果修改的装配日期是4/19/2017,则包版本为4.3.2.如果组件不是最新版本,它可以在我身边正常工作.

在此输入图像描述

此外,在创建Azure功能时,默认情况下会安装Microsoft.Asp.Net.WebApi.Client包.System.Net.Http是其依赖项之一.所以我们不需要手动安装System.Net.Http包.在运行我们的应用程序时,NuGet将为我们的应用程序选择正确版本的System.Net.Http.

  • 我想补充一点.如果您有一个针对.Net Framework 4.6.1的项目,并且 - 例如 - 针对.Net Standard 2.0的同一解决方案中的另一个引用项目,则上述解决方案将继续出现此问题.我通过在我引用的项目中定位.Net Framework 4.6.1来解决这个问题,在这种情况下可以容忍. (2认同)