一般Web程序是通过HttpContext.Current.Server.MapPath("~")得到当前web的物理路径。
在设计时HttpContext.Current是null, 此路不通,用来判断是否是设计状态倒是不错。

Web控件在设计时会被实例化,但仅仅是实例化,不会为它设定相关Web环境,比如Page。

看样用常规方法行不通。控件在设计时能得到哪些资讯呢?Site! 这个小东西在设计时非空,但是。。。从文档上看,也没什么可用的东西。

为什么图片控件在设计时就能够选择当前Web下的相对路径呢?好像是个专用Designer.看来要和DTE相关。
http://blogs.msdn.com/mszcool/archive/2004/06/30/169793.aspx
上面的blog中讲解了如果调用DTE。这样得到当前项目的绝对路径只要几行代码:

public static string GetProjectPath()
  
{
   EnvDTE.DTE devenv 
= (EnvDTE.DTE)Marshal.GetActiveObject("VisualStudio.DTE.7.1");
   
string projectFile = devenv.ActiveDocument.ProjectItem.ContainingProject.FileName;
   System.IO.FileInfo info 
= new System.IO.FileInfo(projectFile);
   
return info.Directory.FullName;
}
注意:
原文用devenv.ActiveSolutionProjects.GetValue(0)来得到当前项目。在控件设计时,有可能在项目管理器上选中的其它项目,这样得到的就不是当前编辑页面所在的项目。

posted on 2004-07-30 09:50  steeven  阅读(1315)  评论(1编辑  收藏  举报