2014-10-27 87 views
2

我需要确定网站根目录的实际文字路径。该应用程序可能会加载到其他服务器上,并且Web根目录可能位于不同的位置,如“E:\ projects \ development \ wwwroot”或“f:\ webroot”。使用getDirectoryFromPath(expandPath("/"))将返回c:\ ColdFusion10 \ testInstance \ wwwroot的ColdFusion Web根目录。我需要IIS7 web根路径,如c:\ inetpub \ wwwroot。为了得到这个,我试图调用.net类HttpRuntime作为<cfset httpClass = createObject("dotnet","System.Web.HttpRuntime","c:\windows\Microsoft.NET\Framework\v4.0.30319.System.Web.dll")>以获得AppDomainAppPath属性。 ColdFusion将抛出错误 “Class System.Web.HttpRuntime在指定的程序集列表中找不到。包含该类的程序集必须提供给程序集属性”。使用dotNet获取IIS Web根路径

根据微软的MSDN库,符合下列条件: 的httpRuntime 类命名空间:System.Web程序 集:System.Web(在System.Web.dll中)

我做了什么:

  1. 编辑的类定义为“Web.HttpRuntime”和“的httpRuntime”
  2. 打来电话,倾倒<cfset domainClass = createObject("dotnet","System.appDomain","c:\windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll")>证明环境和方法

环境: 服务器在封闭的网络上,互联网 的ColdFusion 10更新14 /多个实例 的Windows 2008R2没有连接与IIS7 的Microsoft .NET Framework 4.5.1安装

难道我也许缺少的另一个组件这一个取决于?我不是dotNet的专家,所以我可能会错过一些非常基本的东西,在这里。任何意见将不胜感激。

+0

您可以使用CGI变量。看到这里https://wikidocs.adobe.com/wiki/display/coldfusionen/CGI+environment+(CGI+Scope)+variables – 2014-10-27 13:24:25

+0

更新:谢谢,TechMark2K。油滑的诡计。虽然TechMark2K是正确的,但我最初选择.NET解决方案的原因是,如果可能的话,应用程序需要完全可移植。实际的Web根目录可以在任何地方,应用程序目录可以是Web根目录或子目录或Web服务器虚拟目录。 ColdFusion将只知道它自己的应用程序根目录和内部Web根目录位置。我需要得到IIS7所看到的web根目录,所以我可以迭代路径并设置变量。据我所知,唯一的方法是调用.NET框架。 – user1172456 2014-10-28 11:40:51

+0

Leigh:我试过旧版本,但得到相同的结果错误。 – user1172456 2014-10-30 11:40:17

回答

1

我看你的Web根文件夹名为wwwroot那么你可以这样做:

<cfset rootDir = left(getBaseTemplatePath(), len(getBaseTemplatePath()) - find(reverse('wwwroot'), reverse(getBaseTemplatePath())) + 2)>

<cfdump var="#rootDir#" />

0

我想在我的环境得到了同样的错误。我猜测这是因为我的文件系统上有两个版本的System.Web.dll:Microsoft.NET \ Framework \ v2.0.50727和Microsoft.NET \ Framework \ v4.0.30319 \。我改变了路径指向旧版本,它工作正常:

httpClass = createObject("dotnet" 
      , "System.Web.HttpRuntime" 
      , "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Web.dll")