2014-10-07 146 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); 
相关问题