2010-08-28 34 views
6

tôi đã sử dụng mã từ here và tôi nhận được lỗi sau: Không thể sử dụng HttpContext.Current.Server.MapPath()Không thể tìm thấy HttpContext trong .NET 3.5 và Visual Studio 2008

Trong Visual Studio 2008 nào ContextMenuEntry "Giải quyết" giúp bạn khi bạn thiếu tham chiếu?

Tôi đã phát hiện ra rằng HttpContext không phải là thành viên của System.Web trong IDE của tôi. Theo Trợ giúp> Thông tin tôi đang sử dụng .NET 3.5 SP1.

Làm cách nào để chạy ứng dụng đó?

Bạn thường phản ứng như thế nào trong tình huống này? Bạn tìm kiếm những thứ gì trong msdn.com?

+0

Cảm ơn tất cả các bạn nhanh chóng và các câu trả lời có chất lượng cao, đặc biệt là Timwi và Guffa! – OneWorld

+0

Tôi bây giờ luôn sử dụng ReSharper từ JetBrains để "giải quyết" những vấn đề này (như được trả lời bởi David Culp). Với Addon này, bạn có thể thêm vào các tính năng Visual Studio có ý nghĩa chung trong Eclipse. – OneWorld

Trả lời

18

Tôi sẽ làm gì trong tình huống đó trên MSDN (hoặc Google) cho HttpContext. Tôi đã làm điều đó, và nó nói rằng nó là trong System.Web. Vì vậy, hãy đảm bảo dự án của bạn có tham chiếu đến System.Web.

“Add Reference” menu item

“System.Web” in the Add Reference dialog

... và sau đó nó dường như làm việc:

HttpContext is now available.

+0

Bạn đá! Cảm ơn bạn đã truyền màn hình;) Tôi nghĩ việc nhập "Using System.Web" là đủ. Có lẽ tôi phải đi mặc dù menu này để thiết lập bằng cách sử dụng chỉ thị. HOẶC IDE không nhận ra mã được sao chép. Ma thuật bằng cách nào đó, bởi vì không có gì thay đổi trong tệp của tôi;) – OneWorld

+0

@user: Nếu Timwi giúp bạn, hãy nhớ đánh dấu câu trả lời này là câu trả lời. Do lưu ý rằng tham chiếu lắp ráp và sử dụng báo cáo là động vật khác nhau. Tham chiếu Assembly xác định mã nào có sẵn cho ứng dụng của bạn để tiêu thụ. Các câu lệnh sử dụng không gian tên chỉ cung cấp cách viết tắt thuận tiện để đề cập đến các lớp mà không có tên đầy đủ của họ. Bạn sẽ thấy rằng việc thêm tham chiếu sẽ chỉ thay đổi tệp csproj/vbproj của bạn. – kbrimington

+0

@ user433718: Ngoài những gì @kbrimington đã nói ở trên, hãy để tôi chỉ ra rằng tên của hội đồng không phải lúc nào cũng giống như tên của không gian tên (điều này khiến cho nó rất khó hiểu). Ví dụ, rất nhiều công cụ WPF có trong assembly * PresentationCore * nhưng trong không gian tên * System.Windows.Media *. – Timwi

0

Cố gắng thêm một tham chiếu đến System.Web trong dự án của bạn.

HttpContext là thành viên của System.Web.

http://msdn.microsoft.com/en-us/library/system.web.httpcontext.aspx

+0

Tôi đã có "Sử dụng System.Web" Nhưng khi tôi cố gắng nhập "Sử dụng System.Web.HttpContext" nó nói "HttpContext" không tìm thấy trong không gian tên "System.Web" Tôi cũng đã thử "System.Web.HttpContext.Current.Server.MapPath()" trong mã. Tại thời điểm này Visual Studio nói một lần nữa "không phải trong không gian tên ..." – OneWorld

+0

@ user433718: Bạn không thể đặt 'HttpContext' trong câu lệnh' using' của bạn, vì nó là một lớp, không phải là một vùng tên. – Guffa

+0

IDE không thể tự động phát hiện vùng tên nếu DLL không được tham chiếu. Nếu bạn muốn có thể làm điều đó ngay cả với không tham chiếu DLL, tôi không nghĩ rằng nó có thể. –

2

Bạn có thể tìm trong các documentation cho lớp HttpContext, và nó sẽ cho bạn biết rằng đó là trong không gian tên System.Web, trong thư viện System.Web.dll.

Vì vậy, để sử dụng nó, bạn cần tham chiếu đến thư viện System.Web.dll và bạn cần tuyên bố using System.Web; hoặc sử dụng tên đủ điều kiện System.Web.HttpContext.Current.Server.MapPath.

Tuy nhiên, bạn có chắc chắn muốn sử dụng phương thức MapPath không? Phương thức này nhận đường dẫn vật lý của một tham chiếu web tới một tệp. Nếu đường dẫn đến tệp CSV của bạn là tham chiếu web, ví dụ: "/data/items.csv" thì bạn muốn sử dụng phương thức MapPath, nhưng nếu bạn có đường dẫn vật lý như ví dụ "C:\mydata\items.csv" thì bạn không muốn chuyển đổi nó.

Ngoài ra, MapPath chỉ hoạt động nếu bạn thực sự đang ở trong một ứng dụng web, trong đó có ngữ cảnh HTTP.

+0

Cảm ơn nhận xét này. Tôi sẽ nhìn vào đó. Tôi không biết điều đó trước đây. Chỉ muốn làm cho nó hoạt động bằng cách nào đó ... – OneWorld

+0

Vâng, tôi thậm chí không cần mã này! *lol cảm ơn bạn! Tôi chắc chắn đây sẽ là câu hỏi tiếp theo của tôi;) – OneWorld

1

Timwi có quyền, nhưng để hoàn thành. Không, VS không có khả năng 'Giải quyết' được tích hợp sẵn, tuy nhiên chức năng này đã được thêm một phần bởi một số tiện ích bổ sung. Ví dụ: Resharper sẽ thêm tùy chọn để thêm tham chiếu và sử dụng khi cần - nhưng nó phải được tham chiếu trước đó trong giải pháp để nó không giải quyết được vấn đề tìm thấy ban đầu.

1

Đó là một trường hợp đơn giản không sử dụng đúng khung, bởi vì tôi có nghĩa là phiên bản đầy đủ chất béo hơn là phiên bản 'ánh sáng' mặc định.

Nhấp chuột phải vào Dự án và sau đó Thuộc tính và đảm bảo phiên bản đầy đủ của khung mới nhất được chọn tức là 'Khuôn khổ .NET 4', không phải 'Khuôn khổ khách hàng .NET Framework 4'

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