我英文不好,中文搜出来的大都只是简单地介绍,最详细的就是下面这个网址http://blog.chinaunix.net/space.php?uid=12454074&do=blog&id=2935191
 
因为之前没接触过js,这类帖子大都看得云里雾里,希望有像“MFC中文详解”那样的文档,类得函数和属性怎么用一目了然。
 
现在同时建立几个项目,基本都要做重复的设置,大都在Microsoft.Cpp.Win32.user.props里设置了,但仍有无法解决的,在这提出希望高手帮忙解决,先谢了!
 
1、我习惯在解决方案里添加几个子目录,比如“头文件”下添加“输出头文件”,我在default.js里添加如下代码:
 
  var L_strHeader_Text = "头文件\\输出头文件";
   group = selProj.Object.AddFilter(L_strHeader_Text);
 
但结果是“\\”被转换成了"%255c",试了很多方法无法得到'\',最后采用了个笨办法,读取文件然后替换,又添加了下面的代码:
 
  var stream, s, path;
   path = strProjectPath + "\\" + strProjectName + ".vcxproj.filters";
   stream = new ActiveXObject("ADODB.Stream");
   stream.Mode = 3;
   stream.Type = 2;
   stream.Open();
   stream.Charset = "UTF-8";
   stream.LoadFromFile(path);
   s = stream.ReadText();
   s = s.replace(/\%255c/g, "\\");
   stream.Close();
   stream.Open();
   stream.WriteText(s);
   stream.SaveToFile(path, 2);
   delete stream;
   stream = null;
 
此方法虽然实现了我的想法,但每次新建项目都会提示一次文件被修改,请问有没有更简单的实现方法?
 
2、我习惯修改调试里的工作目录为$(OutDir),发现他被保存在.vcxproj.user文件里,也想通过上面的笨办法直接修改文件,参考了common.js部分代码,但失败了,代码如下:
 
  path = strProjectPath + "\\" + strProjectName + ".vcxproj.user";
   stream = new ActiveXObject("ADODB.Stream");
   stream.Mode = 3;
   stream.Type = 2;
   stream.Open();
   stream.Charset = "UTF-8";
   stream.LoadFromFile(path);
   stream.WriteLine("<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">");
   stream.WriteLine("  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">");
   stream.WriteLine("    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>");
   stream.WriteLine("    <LocalDebuggerWorkingDirectory>$(OutDir)</LocalDebuggerWorkingDirectory>");
   stream.WriteLine("  </PropertyGroup>");
   stream.WriteLine("  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">");
   stream.WriteLine("    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>");
   stream.WriteLine("    <LocalDebuggerWorkingDirectory>$(OutDir)</LocalDebuggerWorkingDirectory>");
   stream.WriteLine("  </PropertyGroup>");
   stream.WriteLine("</Project>");
   stream.Close();
   delete stream;
   stream = null;
 
VC2010会出错关闭,后又按common.js里的代码重新写了遍,代码如下:
 
  path = strProjectPath + "\\" + strProjectName + ".vcxproj.user";
   var oFSO;
   oFSO = new ActiveXObject("Scripting.FileSystemObject");
   stream = oFSO.CreateTextFile(path, true);
   EnsureDevicePlatforms();
   stream.WriteLine("<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">");
   stream.WriteLine("  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">");
   stream.WriteLine("    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>");
   stream.WriteLine("    <LocalDebuggerWorkingDirectory>$(OutDir)</LocalDebuggerWorkingDirectory>");
   stream.WriteLine("  </PropertyGroup>");
   stream.WriteLine("  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">");
   stream.WriteLine("    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>");
   stream.WriteLine("    <LocalDebuggerWorkingDirectory>$(OutDir)</LocalDebuggerWorkingDirectory>");
   stream.WriteLine("  </PropertyGroup>");
   stream.WriteLine("</Project>");
 
  stream.Close();
   delete stream;
   stream = null;
 
这次新建项目没有出错,但是.vcxproj.user还是默认生成的,内容没有改变,我搜索VC文件夹,没找到.vcxproj.user是怎么生成的,网上也搜不到,请问有没有高手了解?
 
3、我使用VC2010的自定义向导,创建的上述文件,很久以前还能调试,但这次修改后,无法调试,禁用脚本调试也取消了,附加进程到devenv.exe后,提示无法调试脚本代码 函数不正确,不知道哪的问题,可能我忘了以前怎么做的了,也请高手再指导下,谢谢啦!

解决方案 »

  1.   

    第一个问题,我这没重现,是正常的。
    第二个,如果你修改的是默认的向导,在common.js里面AddCommonConfig函数里面
    var config = oProj.Object.Configurations("Debug");下面加一行
    config.DebugSettings.WorkingDirectory = "$(OutDir)";config = oProj.Object.Configurations("Release");下面也加一行如果是自定义向导,找找有个跟这个差不多一样的函数。
      

  2.   

    谢谢你,第二个问题解决了,请问js里的这些属性或函数你是在哪学的呢,如果能找到,以后想改哪个设置查询就方便多了!
    另外,你说的第一个问题没重现,是说不需要替换“\\”就能被转换成正确的"\"而非"%255c",还是项目建立后没有提示文件被修改?
    如果是前者,是不是我用的是VC2010的问题?
    如果是后者,这段代码你是放在哪句后面?我是放在了OnFinish的最后面,记得以前试过放在前面,结果出错,没办法就放到了最后
    再次感谢!
      

  3.   

    第一个问题 我在common.js 的 SetupFilters 函数中加了一行 oProj.Object.AddFilter("a\\b");
    最后 项目结构里面就多了一个 a\b 没有转义字符。属性和函数是调试的时候看的
      

  4.   

    MSDN貌似有。你直接在VS2010的MSDN里面搜索 DebugSettings  第一个就是
      

  5.   


    是的,项目里只是多了个名为"a\b"的目录,而我想实现的是"b"目录为"a"目录的子目录,转义字符是在.vcxproj.filters文件里看到的。谢谢回复!
      

  6.   

    oProj.Object.AddFilter("a").AddFilter("b").AddFilter("c");
      

  7.   


    var group_a = oProj.Object.AddFilter("a");
    var group_b = group_a.AddFilter("b");
    var group_c = group_b.AddFilter("c");
    还是这么写吧,免得引起误解