控制 Virsual Studio .NET 开发环境

原创 2004年10月19日 16:39:00

    作 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;
  }
}
    其他相关部分的修改,不再列出了。

virsual studio 使用

一:文件的建立 选择“文件->新建->项目” 这里注意的一点就是:一个项目中,可以有多个源文件,互不影响。二:调试当有出现问题时候,在左上方选择 :视图-》错误列表 就可以在...
  • qq_36502045
  • qq_36502045
  • 2017年04月27日 21:20
  • 265

如何重新配置visual studio2010开发环境

首先进入Visual Studio 开发环境点工具->导入和导出设置 选择 重置所有设置 然后关闭重新启动Visual Studio 会让你选择默认环境(就跟第一次启动Visual Studio 一样...
  • woqin1990
  • woqin1990
  • 2013年11月24日 20:26
  • 1575

用自动化接口控制 Virsual Studio .NET 2003 的工具箱

做了一套ASP.NET的自定义控件,本想把这些控件加到Virsual Studio .NET 2003 的工具箱中,看了一下MSDN,自己做代码试了一下,竟然不好使。搞了半天,查了N多资料,才知道是V...
  • haozidong
  • haozidong
  • 2004年10月11日 10:05
  • 736

Visual Studio .NET 2003开发环境

昨天到今天搞了一整天,把人都要差点搞崩了! ,以后再也不能乱关机了,因为这次的大意,几乎所有的Net安装,调试问题都被我碰到了,还好,我一个个把他记录下来了,同时,在CSDN找了一些相关的解决方法,不...
  • msdnlu
  • msdnlu
  • 2007年07月12日 09:17
  • 1169

visualstudio2012中如何使用localDB具体讲解

经过一段时间的小捉摸终于基本掌握在vs2012中如何使用localDB了,当然包括其中令人头疼的connectionStrings的设置,这也算承接我之前写的一篇文章初试visual studio20...
  • skynq
  • skynq
  • 2013年01月27日 23:05
  • 974

在Microsoft Visual Studio 2005上安装.net 3.0开发环境(含开发环境下载地址)

开发.net 3.0 应用程序,需要安装开发环境。步骤如下:1. 开发.net 3.0,首先当然要安装.NET Framework 3.0 了  安装前使用windowsupdate安装好最新的更新(...
  • flashlm
  • flashlm
  • 2007年08月28日 12:09
  • 3122

提高你开发效率的十五个 Visual Studio 使用技巧

提高你开发效率的十五个 Visual Studio 使用技巧 相信做开发的没有不重视效率的。开发C#的都知道,我们很依赖VS,或者说,我们很感谢VS。能够对一个IDE产生依赖,说明这个IDE...
  • Jacee0048
  • Jacee0048
  • 2015年05月19日 13:33
  • 2973

Virsual Studio 开发问题

win32 控制台应用  自动生成 stdafx.h stdatx.cpp  resouce.h targetver.h 工程名.cpp   win32 dll 自动生成 stdafx.h stdat...
  • zxxSsdsd
  • zxxSsdsd
  • 2013年09月02日 18:17
  • 675

OBS-Studio使用VS2015编译调试

官方编译文档:https://github.com/jp9000/obs-studio/wiki/Install-Instructions#windows-build-directions 官方so...
  • zx249388847
  • zx249388847
  • 2017年12月22日 20:39
  • 65

asp.net core开发环境准备

本文主要讲解了 Asp.net Core 基于命令、VS2015、VS Code及Yeoman搭建基本开发环境的方法。...
  • xuanhun
  • xuanhun
  • 2016年06月30日 12:44
  • 2440
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:控制 Virsual Studio .NET 开发环境
举报原因:
原因补充:

(最多只允许输入30个字)