GlobalConfiguration.Configure () không xuất hiện sau khi di chuyển API Web 2 và .NET 4.5.1


148

Gần đây tôi đã bắt đầu làm theo hướng dẫn này để di chuyển dự án của tôi sang .NET 4.5.1 và Web Api 2.

Điều đầu tiên mà nhà phát triển MS Rick Anderson yêu cầu bạn làm là thay đổi:

WebApiConfig.Register(GlobalConfiguration.Configuration);

đến

GlobalConfiguration.Configure(WebApiConfig.Register);

trong tập tin global.asax. Tuy nhiên, điều này gây ra lỗi cho tôi khi tôi cố gắng xây dựng:

Lỗi 1 'System.Web.Http.GlobalConfiguration' không chứa định nghĩa cho 'Cấu hình'

Dự án của tôi hiện đang có trên MVC 5 và Web Api 2 và .NET 4.5.1, nhưng tôi nghĩ System.Web.Http vẫn nghĩ đó là phiên bản .NEt 4.0.

Làm thế nào tôi có thể sửa chữa điều này?

Cảm ơn bạn.

Biên tập:

Dưới đây là các ràng buộc lắp ráp của tôi:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31BF3856AD364E35" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0"/>
  </dependentAssembly>
  <!--
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0"/>
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0"/>
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
  </dependentAssembly> -->
</assemblyBinding>

Tất cả mọi thứ nhận xét sau khi đầu trang đã được nhận xét vì tôi đã nhận được lỗi:

Cảnh báo 2 Đã tìm thấy xung đột giữa các phiên bản khác nhau của cùng một tổ hợp phụ thuộc không thể giải quyết. Các xung đột tham chiếu này được liệt kê trong nhật ký xây dựng khi mức độ chi tiết của nhật ký được đặt thành chi tiết.

và thoát khỏi các ràng buộc cứng đã khắc phục điều đó.


1
Bạn đã gỡ cài đặt Microsoft.AspNet.Web.Helpers.Mvcđầu tiên?
Blaise

nhìn vào câu trả lời của tôi stackoverflow.com/a/20653546/3114456 nó sẽ khắc phục vấn đề của bạn với việc di chuyển
Livius

5
Vui lòng đánh dấu stackoverflow.com/a/21514748/2343 là câu trả lời đúng!
Sameer Alibhai

Câu trả lời:


271

Nó cần system.web.http.webhost, một phần của gói này. Tôi đã sửa lỗi này bằng cách cài đặt gói sau:

PM> Install-Package Microsoft.AspNet.WebApi.WebHost 

hoặc tìm kiếm nó trong nuget https://www.nuget.org/packages/Microsoft.AspNet.WebApi.Webhost/5.1.0


Đã được thêm tự động khi tôi thêm bộ điều khiển API. Tôi đã phải khởi động lại VS2015 để có được nó. Tôi cũng đã làm mọi thứ khác được đề xuất trên trang này để không chắc vấn đề thực sự là gì.
Piotr Kula

6
Điều đó đã không làm việc cho tôi. Gói đã được cài đặt trong dự án của tôi.
Shimmy Weitzhandler

Điều thú vị là webhost đã được cài đặt và vẫn không hoạt động, sau đó tôi thay đổi thứ tự GlobalConfiguration.Configure(WebApiConfig.Register);được chèn trong global.asax thành đầu trang ngay sau AreaRegistration và nó hoạt động tốt.
PedroSouki

Tại sao họ không viết một cái gì đó như thế? phải mất nửa giờ để tôi tìm thấy câu trả lời của bạn
Homayoun Behzadian 25/07/18

Làm việc cho tôi sau khi cập nhật Microsoft.AspNet.WebApi.WebHostlên phiên bản mới nhất
Peter van Kekem

86

Không có ý tưởng nào trong số này giúp dự án của tôi sử dụng MVC 5.2.2.

  • System.web.Http 5.2.2 đã được cài đặt
  • Xóa thư mục Gói và tải xuống lại hoàn toàn tất cả các thư viện NuGet không làm gì cả
  • Web.config đã có một mục nhập phụ thuộc cho System.Web.Http

Buộc cài đặt lại đã khắc phục vấn đề. Từ bảng điều khiển quản lý gói NuGet:

update-Package -reinstall Microsoft.AspNet.WebApi.WebHost


1
Tôi gặp vấn đề tương tự nhưng cài đặt lại không khắc phục được, ít nhất nó trông như thế và đang khiến tôi phát điên, tôi phải khởi động lại VS2015 và nó đã được sắp xếp.
Piotr Kula

Có vẻ như sự kết hợp của restart vs2013 + cài đặt lại đã giải quyết vấn đề cho tôi
Ram

43

GlobalConfigurationlớp là một phần của Microsoft.AspNet.WebApi.WebHostgói nuget ... Bạn đã nâng cấp gói này lên API Web 2 chưa?


1
Đúng. Đó là phiên bản 5.0.0
nzondlo

1
Bạn có tình cờ có bất kỳ chuyển hướng ràng buộc lắp ráp nào trong web.config không? nếu có, bạn có thể chia sẻ chúng không ... tôi đặc biệt tìm kiếm nếu có bất kỳ liên quan đến hội đồng System.Web.Http * ..
Kiran Challa

Tôi chỉ đăng tất cả các ràng buộc hội của tôi.
nzondlo

30

Cũng như sử dụng Bảng điều khiển trình quản lý gói để nhận nuget để cập nhật dự án với Cài đặt gói Microsoft.AspNet.WebApi.Webhost để thiếu GlobalConfiguration ,

Tôi cần Cài đặt-Gói Microsoft.AspNet.WebApi.Selfhost bị thiếu khi sử dụng System.Web.Http;


1
Bạn có thể giải thích thêm một chút không?
Người ăn kiêng Meemken

10

Bạn có thể muốn kiểm tra xem dự án của bạn đã Microsoft.AspNet.WebApi.WebHostđược cài đặt chưa. Hóa ra, trong trường hợp của tôi, Microsoft.AspNet.WebApi.WebHostđã được cài đặt trong một dự án khác, nhưng không phải là dự án cụ thể cần nó. Trong gói của bạn.config, hãy kiểm tra xem có một dòng như thế này không:

<package id="Microsoft.AspNet.WebApi.WebHost" version="5.1.1" targetFramework="net45" />

Nếu điều đó không có, bạn đã không Microsoft.AspNet.WebApi.WebHostcài đặt trong dự án của bạn. Bạn có thể cài đặt bằng Nuget Gói Manager hoặc thông qua Bảng điều khiển quản lý gói. Để cài đặt từ Bảng điều khiển quản lý gói, hãy chạy lệnh này:

Install-Package Microsoft.AspNet.WebApi.WebHost

5

API GlobalConfiguration.Configure có sẵn trong "Microsoft.AspNet.WebApi.Webhost" phiên bản = "5.2.3"

và không có trong phiên bản "Microsoft.AspNet.WebApi.Webhost" = "4.0.0"


3

Nếu sự cố vẫn còn sau khi gỡ cài đặt và cài đặt Microsoft.AspNet.WebApi.Webhost thì cũng thêm các phần sau trong web.config để cấu hình toàn cầu hoạt động

 <dependentAssembly>
        <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.2.0.0" />
      </dependentAssembly>

Điều này đã có trong web.config của tôi. Vẫn có vấn đề (VS2015)
Piotr Kula


1

Vấn đề của tôi là trình quản lý gói nuget không thực hiện cập nhật thực sự nhưng các tệp chứa tham chiếu đến các phiên bản cũ hơn, vì vậy trước tiên tôi đã xóa tất cả các gói liên quan đến mvc đã cài đặt (bao gồm cả dao cạo và web api) sau đó cài đặt lại và cập nhật phiên bản của dao cạo trong lượt xem / web.config đến phiên bản 3.0.0.


1

Không có giải pháp nào trong số này làm việc cho tôi. Tôi đã có một mớ gói Nuget không thể cập nhật do phụ thuộc vòng tròn vào nhau.

Tôi sẽ phải sửa điều này theo cách lỗi thời. Tôi đã tạo một dự án api MVC / web mới và sao chép thủ công System.Web.HttpSystem.Web.Http.WebHosttừ dự án mới vào các thư mục Nuget của giải pháp exisitng. Từ đó tôi cập nhật các tài liệu tham khảo bằng cách, OMG, "duyệt" và khắc phục sự cố.


0

điều này đã giải quyết vấn đề này bằng cách thêm không gian tên vào tệp Global.asax.cs.

sử dụng System.Web.Http;

Điều này đã giải quyết vấn đề.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.