2017-07-24 15 views
8

Tôi đã có một ứng dụng Azure chức năng tạo ra một DLL biên dịch trước (vì vậy nó sử dụng các tệp .cs bình thường, không phải là phương thức .csx cũ hơn, trước VS2017). Trước đây, nó đã được nhắm mục tiêu .Net Framework 4.5.2. Tôi đã cập nhật nó lên 4.7 để sử dụng một số tính năng C# 7 mới. Tôi đã cập nhật gói NuGet của mình bằng cách thực hiện "Update-Package -Reinstall" và xác minh rằng tất cả chúng đều có mục tiêu "net47" được đặt trong tệp packages.config của tôi.HttpRequestMessageExtensions không được tìm thấy tại thời gian chạy trong Azure Chức năng

Mọi thứ đều biên soạn tốt. Nhưng khi tôi gọi một hàm sử dụng một trong hai phương thức 2 HttpRequestMessageExtensions, tôi nhận được một ngoại lệ. Một ví dụ về các ngoại lệ là thế này:

Method not found: 'System.Net.Http.HttpResponseMessage 
    System.Net.Http.HttpRequestMessageExtensions.CreateResponse(
    System.Net.Http.HttpRequestMessage, System.Net.HttpStatusCode)'. 

Dưới đây là một ví dụ về một hàm kiểm tra nhỏ sẽ gây ra lỗi:

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

Khi gọi chức năng này với nói Postman, tôi sẽ nhận được nêu trên ngoại lệ. Tôi cũng nhận được một phương pháp tương tự không tìm thấy ngoại lệ khi tôi gọi GetQueryNameValuePairs() trên số HttpRequestMessage.

Tôi đã thử cập nhật gói NuGet của mình lên gói mới nhất, không có sự khác biệt. Tôi đã làm sạch và xây dựng lại và khởi động lại một loạt các lần, đảm bảo nuke thư mục bin và obj của tôi.

Tôi không chắc chắn vấn đề có thể là gì. Tôi đoán tôi có thể hạ cấp xuống .Net 4.5.2 nhưng tôi không muốn. Đối với một, tôi muốn sử dụng C# 7, và đối với hai, tôi muốn hiểu những gì vấn đề là thay vì tránh nó.

Cập nhật: thú vị. Vấn đề có vẻ là với System.Net.Http. Nếu tôi hạ thấp xuống 4.0.0, mọi thứ sẽ hoạt động tốt. Nếu tôi nâng nó lên bất kỳ phiên bản cao hơn, tôi sẽ nhận được các vấn đề được liệt kê ở trên. Tôi đã thử chọn lọc từng gói của mình, từng cái một, với số phiên bản trước của chúng để tìm ra điều này. Sau đó tôi cập nhật tất cả nhưng phiên bản này lên phiên bản mới nhất và nó đã khắc phục sự cố.

Trả lời

5

Tôi cũng đã thử nghiệm nó ở bên cạnh tôi. Vấn đề này liên quan đến phiên bản System.Net.Http mới nhất (4.3.2). Nếu tôi không cài đặt gói này theo cách thủ công hoặc cài đặt các phiên bản cũ hơn (4.3.1/4.3.0), ứng dụng có thể hoạt động tốt.

Phương pháp CreateResponse là một phương pháp mở rộng được viết trong System.Web.Http assembly (phiên bản 5.2.3). Dường như nó không tương thích với phiên bản mới nhất của System.Net.Http. Xin vui lòng chỉ có thể bỏ qua lỗi bằng cách sử dụng phiên bản trước của System.Net.Http và bạn cũng có thể gửi vấn đề này cho Microsoft bằng cách sử dụng theo dõi kênh.

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

Interesting. For me, if I got above version 4.0.0 (including 4.1.1 or 4.3.1) I still get the same problem of not finding those extension methods.

Việc lắp ráp có thể không được cập nhật trong thời gian bạn thay đổi phiên bản gói. Từ thư mục bin \ Debug \ net47, chúng ta có thể kiểm tra phiên bản assembly hiện tại mà chúng ta đã sử dụng.

Nếu ngày sửa đổi được lắp ráp là 2/9/2017, phiên bản gói là 4.3.1. Nếu ngày sửa đổi lắp ráp là 4/19/2017, phiên bản gói là 4.3.2. Nếu hội đồng không phải là phiên bản mới nhất, nó có thể làm việc tốt về phía tôi.

enter image description here

Bên cạnh đó, Microsoft.Asp.Net.WebApi.Client gói được cài đặt theo mặc định khi tạo ra một chức năng Azure. System.Net.Http là một trong những phụ thuộc của nó. Vì vậy, chúng tôi không cần cài đặt gói System.Net.Http theo cách thủ công.Khi chạy ứng dụng của chúng tôi, NuGet sẽ chọn đúng phiên bản System.Net.Http cho ứng dụng của chúng tôi.

+0

Thú vị. Đối với tôi, nếu tôi đã ở trên phiên bản 4.0.0 (bao gồm 4.1.1 hoặc 4.3.1), tôi vẫn gặp vấn đề tương tự khi không tìm ra các phương thức mở rộng đó. Sử dụng phiên bản 4.0.0 khắc phục sự cố (trừ vấn đề xung đột được đề cập trong bài đăng gốc). – Architekt

+0

Tôi đã cập nhật câu trả lời của mình để giải thích thêm. – Amor

+0

Gỡ cài đặt gói 'System.Net.Http' (phiên bản 4.3.2 trong trường hợp của tôi) thực hiện mẹo đó! Các phần mềm đang chạy tuyệt vời một lần nữa! –

1

Tôi đã gặp vấn đề tương tự khi chạy Azure Function cục bộ và cuối cùng theo dõi nó xuống các hội đồng System.Net.Http xung đột. Tôi tạo ra chức năng Azure của tôi từ một ASP.NET Web App trống và ban đầu kéo xuống gói System.Net.Http NuGet để sử dụng trong dự án. Tôi cũng kéo xuống Microsoft.AspNet.WebApi.Client để sử dụng trong dự án. Nó không quan trọng phiên bản của System.Net.Http tôi đã cố gắng dự án của tôi sẽ biên dịch nhưng không thành công khi yêu cầu được thực hiện.

Cuối cùng, tôi đã xóa các gói mà tôi đã tải xuống, làm sạch thư mục xây dựng và chỉ thêm Microsoft.AspNet.WebApi.Client. Tôi nhận thấy rằng điều này tự động tham chiếu System.Net.Http trên máy tính của tôi cho phiên bản .NET Framework của tôi. (C: \ Program Files (x86) \ Tham chiếu Assemblies \ Microsoft \ Framework.NETFramework). Điều này được biên dịch thành công và tôi đã có thể thực hiện các yêu cầu cho hàm mà không có bất kỳ ngoại lệ nào.

1

Sử dụng kiến ​​thức của @ Aaron-Newton, tôi đã xác định rằng sự cố của tôi là do dự án Azure Functions tham chiếu thư viện lớp .Net Standard 2.0. Tôi chuyển nó sang .Net Framework 4.6 và nó bắt đầu hoạt động trở lại. Có vẻ như đây là lỗi trong công cụ Chức năng.

Tôi đã gửi lỗi với nhóm Chức năng tại đây: https://github.com/Azure/Azure-Functions/issues/477

1

Tôi gặp vấn đề tương tự. Tôi đã dành khá nhiều thời gian để khắc phục vấn đề này.

Nguyên nhân là do dự án Azure Functions đề cập đến .Net Standard Library với phiên bản cao hơn 1.4.

Đưa phiên bản .Net Standard xuống 1.4 trở xuống sẽ khắc phục sự cố.

Nhưng đây chắc chắn là lỗi với Azure Functions SDK. Họ nên sửa nó.

https://github.com/Azure/azure-webjobs-sdk-script/issues/980

https://github.com/Azure/Azure-Functions/issues/477

Các vấn đề liên quan