2014-10-07 147 views
14

我正在將Web應用程序從VB遷移到C#。我也升級到了VS2013的Update 3。 Hosting課程是否改變了?使用Hosting.HostingEnvironment.MapPath時出現錯誤,我甚至無法添加對System.Web.Hosting的引用,因爲它無處可查。當我在添加引用時嘗試搜索程序集時,使用整個名稱空間(即System.Web.Hosting),它不返回任何結果。無法添加對System.Web.Hosting的引用

我在課堂上有使用聲明,它不灰掉意味着它被用於某些東西,但代碼不喜歡HostingHosting.HostingEnvironment,因爲它是明亮的紅色。我甚至沒有在intellisense中獲得Hosting類,並且該項目可以參考System.Web

回答

9

沒有Hosting類。相反,你想要的HostingEnvironment類:

HostingEnvironment.MapPath("~/Hello.txt"); 

完整類型的HostingEnvironmentSystem.Web.Hosting.HostingEnvironment,所以你需要有文件中的條款using System.Web.Hosting;,或者使用全名。

更重要的是,如果你正在製作一個web應用程序,你很可能不想使用HostingEnvironment。您應該始終擁有一個例如HttpContextPage/Control,您可以訪問Server.MapPath,這應該是首選。

至於參考,System.Web.Hosting命名空間生活在System.Web.dll,所以只要確保你有一個參考,你應該沒問題。

既然你是從VB遷移這個,我認爲衝突是由VB對名稱空間的不同處理引起的。在C#中,你不能只是這樣做:

using System.Web; 

Hosting.HostingEnvironment.DoWhatever(); 

當使用一個命名空間,無論是使用完整的類型名稱,包括命名空間,或使用使用確切的命名空間和類型。將兩者結合起來不太合適。

1

您是否在System.Web中使用Server.MapPath

+1

這並不能真正解決問題,不是嗎?如果OP需要使用該類/名稱空間的另一個成員,該怎麼辦? – Stijn 2014-10-07 13:14:34

+0

@Stijn可能是因爲沒有Hosting課程? – mybirthname 2014-10-07 13:15:26

+0

這是我遇到的問題,我需要HostingEnvironment類中的QueueBackgroundWorkItem方法。我可以在對象瀏覽器中看到命名空間,類和方法,但是我的代碼在引用4.5.2版本的System.Web.Hosting, – 2016-07-06 20:40:53

3

我有這個相同的問題,是發佈以外的東西。我在單獨的(模型)項目中查看庫中的代碼。在我使用的庫項目中,沒有引用System.Web。

最棘手的部分是System.Web.Http被引用,所以找到System.Web命名空間,所以編譯好的語句using System.Web;

保存自己的一些麻煩和心痛,總是按解決方案資源管理器中的「與活動文檔同步」按鈕,如此答案中所述。 https://stackoverflow.com/a/30517179/149884

+0

另一方面,Model類需要System.Web.Hosting在異常時使用「HostingEnvironment.QueueBackgroundWorkItem」引發異步「Fire&Forget」消息,該消息不會被IIS回收工作進程而終止。 – 2016-07-11 14:10:47

1

我不認爲你可以使用.NET客戶端配置文件來構建Web應用程序?

無論如何,那就放在一邊。您會發現名稱空間傾向於在不同的程序集中重用。特別是在框架組件中,他們認爲即使支持不同的技術,一些類在概念上也屬於一個類。

我不確定我解釋得很好,但拿這個例子。 mscorlib,System,System.Net,System.Core和System.Numerics中有一個System命名空間。此外,System.Web可能會出現在System.Web.Http或System.Web本身,以及其他像System.Web.Abstractions,System.Web.Optimization等。結果只是試圖使用using語句來辨別一個特定的班級來自的集會可以真的讓你失望。

System.Web.Hosting命名空間中的典型類位於框架程序集System.Web.dll中。微軟一直試圖不再強調直接使用System.Web.dll來支持更加模塊化的Katana/Kestrel實現。

話雖如此,請確保您的項目直接引用System.Web.dll。要使用所需的類,請參考它的完整名稱,即System.Web.Hosting.HostingEnvironment。或者在你的.cs文件的開頭放一個using System.Web.Hosting;

可能在當前類中有一個名爲HostingEnvironment的屬性,或者是另一個名爲HostingEnvironment的程序集中另一個名稱空間的類。在這種情況下,您可能需要全部指定類名,或者提供一個名稱以方便參考並減少打字。

例如,你可以在你的文件的開頭有這樣的:

using HostEnv = System.Web.Hosting.HostingEnvironment; 

地方在你的代碼的身體。然後,你可以提及這樣說:

var appHost = HostEnv.ApplicationHost; 

不這有幫助嗎?

對於要解決特定的情況下,你便可以這樣做:

var resolvedPath = HostEnv.MapPath(pathToMap); 
相關問題