控制 Virsual Studio .NET 开发环境

    作 SuperLib 构件安装程序时,碰到了几个麻烦。主要是要完成几个功能:在 Virsual Studio .NET 中添加向导以引导使用者完成一些简单工作;向 Virsual Studio .NET 2003 工具箱中增加一个新的 Tab 并注册 SuperLib 构件库 中的 Web 窗体控件。

    关于向Virsual Studio .NET 2003 工具箱中增加一个新的 Tab 并注册 SuperLib 构件库 中的 Web 窗体控件,前几天已经贴了一篇文章:
    http://www.cnblogs.com/haozidong/articles/52432.htm
    
    做向导时,也碰到了一点麻烦,wink_smile.gif,今天总算把自定义向导也完成了,总结出来分享一下。
    先贴上参考文章,英文的,太长了,不翻译了。
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/customwebwiz.asp
    http://msdn.microsoft.com/library/en-us/dv_vstechart/html/customprojectwiz.asp

    增加一个 Web 窗体向导有上面的文章足够了,我说的是如何增加一个自定义的C# ASP.NET Web 应用程序向导,关于修改 default.js 文件。
    情况是我们需要将普通 C# ASP.NET Web 应用程序向导中的标准 WebForm1 替换为我们自己的(其他的如 Web.Config 直接替换就行了),因为我们的 WebForm1 可能需要不同的名称空间引用,可能要注册 TagPrefix,可能已经有了几个我们自己的标准控件等等。
    现有的向导在向工程中添加 WebForm1.apsx 时会自动生成一个 WebForm1.aspx.cs 文件,这样我们虽然按照上述文章中的做法,增加了自定义的  WebForm1.aspx.cs,修改了 Templates.inf ,修改了 default.js 以完成删除自动生成生成的 WebForm1.aspx.cs 等等工作。似乎是 Ok 了吧?teeth_smile.gif
    但每次用新的向导生成工程时,到了自动添加 WebForm1.aspx.cs  这一步,都会提示 WebForm1.aspx.cs 已经存在,苦闷!
    本想在 default.js 中加一点调试,用 alert,结果不行,cry_smile.gif,向导的执行环境不支持 alert 命令,怎么办?哈哈,用 FileSystemObject 就 Ok:
    
    var file = fso.OpenTextFile("c:\\aaa.txt", 8, true);
    fso.WriteLine("aaaaaa");

    这样就可以把调试信息写在文本文件里面了(可能会提示:没有权限,不用担心,下次运行就好了)。teeth_smile.gif
    
    在 Web 工程里,文件的路径都是 http://localhost/WebApplication1/WebForm1.aspx,这样的格式,因此用上述文章中的 SaveDeleteFile 函数用 FileSystemObject 来删除自动添加 WebForm1.aspx.cs 文件就不行了,怎么办?
    我们需要这样做:
    if (strTarget == "WebForm1.aspx")
    {
     if (projfile != null){
      var item = DoesFileExistInProj(projfile, "WebForm1.aspx.cs");
      
      if (item != null)
       item.Delete();
     }
    }

    这里要注意,在工程的结构中,WebForm1.aspx.cs 在 WebForm1.aspx 得下一级,是 WebForm1.aspx 的子项。

    Ok 了?

    还没有,这里虽然能够删除自动添加 WebForm1.aspx.cs 文件,但向导完成后,WebForm1.aspx.cs 没有隐藏,对应的 resx 文件也不见了,怎么回事?原来,resx 是在开发环境 打开 WebForm1.aspx 时自动生成的,而 WebForm1.aspx.cs 也是在这时候隐藏的,在执行上述 删除文件代码前,WebForm1.aspx 已经在开发环境中被打开,我们需要在添加完成 自己的 WebForm1.aspx.cs 后,才让开发环境将 WebForm1.aspx 打开。
    
   自定义的 AddFilesToProject 函数:
function AddFilesToProject(oProj, strProjectName, strProjectPath, InfFile, AddItemFile)
{
 try
 {
  dte.SuppressUI = false;
  var projItems;
  if(AddItemFile)
   projItems = oProj;
  else
   projItems = oProj.ProjectItems;

  var strTemplatePath = wizard.FindSymbol("TEMPLATES_PATH");

  var strTpl = "";
  var strName = "";

  // if( Not a web project )
  if(strProjectPath.charAt(strProjectPath.length - 1) != "\\")
      strProjectPath += "\\"; 

  var strTextStream = InfFile.OpenAsTextStream(1, -2);
  while (!strTextStream.AtEndOfStream)
  {
   strTpl = strTextStream.ReadLine();
   if (strTpl != "")
   {
    strName = strTpl;
    var strTarget = "";
    var strFile = "";
    if(!AddItemFile)
    {
     strTarget = GetCSharpTargetName(strName, strProjectName);
    }
    else
    {
     strTarget = wizard.FindSymbol("ITEM_NAME");
    }
    
    var fso;
    fso = new ActiveXObject("Scripting.FileSystemObject");
    
    var TemporaryFolder = 2;
    var tfolder = fso.GetSpecialFolder(TemporaryFolder);
    var strTempFolder = fso.GetAbsolutePathName(tfolder.Path);
    
    var strFile = strTempFolder + "\\" + fso.GetTempName();

    var strClassName = strTarget.split(".");
    wizard.AddSymbol("SAFE_CLASS_NAME", strClassName[0]);
        wizard.AddSymbol("SAFE_ITEM_NAME", strClassName[0]);

    var strTemplate = strTemplatePath + "\\" + strTpl;
    var bCopyOnly = false;
    var strExt = strTpl.substr(strTpl.lastIndexOf("."));
    if(strExt==".bmp" || strExt==".ico" || strExt==".gif" || strExt==".rtf" || strExt==".css")
     bCopyOnly = true;
    
    wizard.RenderTemplate(strTemplate, strFile, bCopyOnly, true);

    var projfile = projItems.AddFromTemplate(strFile, strTarget);
    SafeDeleteFile(fso, strFile);
    
    if(projfile)
     SetFileProperties(projfile, strName);

    if(strTarget == "WebForm1.aspx.cs")
    {
     var item = DoesFileExistInProj(oProj, "WebForm1.aspx");
     
     if (item != null){
      var window = item.Open(vsViewKindPrimary);
      window.visible = true;
     }
    }
    
    if (strTarget == "WebForm1.aspx")
    {
     if (projfile != null){
      var item = DoesFileExistInProj(projfile, "WebForm1.aspx.cs");
      
      if (item != null)
       item.Delete();
     }
    }
   }
  }
  strTextStream.Close();
 }
 catch(e)
 {
  strTextStream.Close();
  throw e;
  }
}

标准的 AddFilesToCSharpProject 函数
function AddFilesToCSharpProject(oProj, strProjectName, strProjectPath, InfFile, AddItemFile)
{
 try
 {
  dte.SuppressUI = false;
  var projItems;
  if(AddItemFile)
        projItems = oProj;
  else
        projItems = oProj.ProjectItems;

  var strTemplatePath = wizard.FindSymbol("TEMPLATES_PATH");

  var strTpl = "";
  var strName = "";

  // if( Not a web project )
  if(strProjectPath.charAt(strProjectPath.length - 1) != "\\")
      strProjectPath += "\\"; 

  var strTextStream = InfFile.OpenAsTextStream(1, -2);
  while (!strTextStream.AtEndOfStream)
  {
   strTpl = strTextStream.ReadLine();
   if (strTpl != "")
   {
    strName = strTpl;
    var strTarget = "";
    var strFile = "";
    if(!AddItemFile)
    {
     strTarget = GetCSharpTargetName(strName, strProjectName);
    }
    else
    {
     strTarget = wizard.FindSymbol("ITEM_NAME");
    }

    var fso;
    fso = new ActiveXObject("Scripting.FileSystemObject");
    var TemporaryFolder = 2;
    var tfolder = fso.GetSpecialFolder(TemporaryFolder);
    var strTempFolder = fso.GetAbsolutePathName(tfolder.Path);

    var strFile = strTempFolder + "\\" + fso.GetTempName();

    var strClassName = strTarget.split(".");
    wizard.AddSymbol("SAFE_CLASS_NAME", strClassName[0]);
        wizard.AddSymbol("SAFE_ITEM_NAME", strClassName[0]);

    var strTemplate = strTemplatePath + "\\" + strTpl;
    var bCopyOnly = false;
    var strExt = strTpl.substr(strTpl.lastIndexOf("."));
    if(strExt==".bmp" || strExt==".ico" || strExt==".gif" || strExt==".rtf" || strExt==".css")
     bCopyOnly = true;
    wizard.RenderTemplate(strTemplate, strFile, bCopyOnly, true);

    var projfile = projItems.AddFromTemplate(strFile, strTarget);
    SafeDeleteFile(fso, strFile);
    
    if(projfile)
     SetFileProperties(projfile, strName);

    var bOpen = false;
    if(AddItemFile)
     bOpen = true;
    else if (DoOpenFile(strTarget))
     bOpen = true;

    if(bOpen)
    {
     var window = projfile.Open(vsViewKindPrimary);
     window.visible = true;
    }
   }
  }
  strTextStream.Close();
 }
 catch(e)
 {
  strTextStream.Close();
  throw e;
  }
}
    其他相关部分的修改,不再列出了。

转载于:https://www.cnblogs.com/haozidong/archive/2004/10/19/54238.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值