C#与C++项目模板开发
l 制作模板流程
1. 如何:使用向导来处理项目模板
http://msdn.microsoft.com/zh-cn/library/ms185301(v=VS.100).aspx
中详细讲述了一个例子,可以借鉴。可以做出项目模板,但有些问题不解决,还是无法成功。如下面提到的一些问题。
l 全局程序集缓存(Global Assembly Cache)的程序集
1. 首先制作程序集
添加接口文件:IWizardImplementation.cs
添加程序集引用:.NET 标签下
EnvDTE;
Microsoft.VisualStudio.TemplateWizard;
接口文件内容如下:
using System;
using System.Collections.Generic;
using Microsoft.VisualStudio.TemplateWizard;
using System.Windows.Forms;
using EnvDTE;
namespace RDSWizard
{
public class IWizardImplementation:IWizard
{
private CFile content;
// This method is called before opening any item that
// has the OpenInEditor attribute.
public void BeforeOpeningFile(ProjectItem projectItem)
{
}
public void ProjectFinishedGenerating(Project project)
{
}
// This method is only called for item templates,
// not for project templates.
public void ProjectItemFinishedGenerating(ProjectItem
projectItem)
{
}
// This method is called after the project is created.
public void RunFinished()
{
}
public void RunStarted(object automationObject,
Dictionary<string, string> replacementsDictionary,
WizardRunKind runKind, object[] customParams)
{
try
{
// Display a form to the user. The form collects
// input for the custom message.
Form1 inputForm = new Form1();
inputForm.ShowDialog();
content = inputForm.GetWizardCFile();
// Add custom parameters.
replacementsDictionary.Add("$head$",
content.ProduceHeadFileContent());
// Add custom parameters.
replacementsDictionary.Add("$source$",
content.ProduceSourceFileContent());
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
// This method is only called for item templates,
// not for project templates.
public bool ShouldAddProjectItem(string filePath)
{
return true;
}
}
}
2. 其次就是制作强名称:(引自网名为zgh2002007的博客)
实际操作如下:
1.打开SDK Command Prompt或者VS2005中的Visual Studio 2005 Command Prompt.而不是windows的cmd
2.输入sn -k SampleKey.snk,得到的文件在命令提示符的当前文件夹下(微软叫文件夹很少叫目录,最正点是folder)
3.输入sn -p SampleKey.snk SampleKeyPublic.snk
4.输入sn -t SampleKeyPublic.snk 得到public key token
打开VS2005,找到项目,然后右击"项目名"找到"属性","属性"里面有个"Signing"的选项卡,然后钩上
"Sign the assembly",再Choose a strong name key file.做完了操作,然后记得保存,编译
这样你的DLL才能拖到GAC,GAC就是"全局程序集缓存",这就是为什么你的你的项目的bin文件夹下没有System.Data,你都能引用的原因,因为程序会自动去找GAC,GAC的位置在win 2003与xp 中是"c:/windows/assembly".
如果你的assembly在GAC中,那么你的东西就不用每次用的时候都添加引用到项目中了。
3. 然后是把程序集添加到GAC中
从51CTO中学习到,http://book.51cto.com/art/200811/99267.htm
在命令提示符中,输入gacutil.exe /i "<程序集路径>" 即可提示您好,成功!
l 模板与GAC结合,共同组成带向导的项目模板;
1. 生成项目模板的路径文件夹:C:\Documents and Settings\FreedomLive\My Documents\Visual Studio 2008\Templates\ItemTemplates
2. 向文件MyTemplate.vstemplate中添加相应的XML标签;
<WizardExtension>
<Assembly>RDSWizard, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=788303fbc60c2ffc</Assembly>
<FullClassName>RDSWizard.IWizardImplementation</FullClassName>
</WizardExtension>
3. 把修改后的文件再压缩回zip文件即可全部完成带有自定义向导的项目模板的开发工作;
l 带有gac程序集的项目模板的部署
1. http://msdn.microsoft.com/zh-cn/library/ms246580(v=VS.90).aspx
如何:打包社区组件以使用 Visual Studio 内容安装程序
2. 需要三加一个文件:
·RDSWizard.vscontent
<VSContent xmlns="http://schemas.microsoft.com/developer/vscontent/2005">
<Content>
<FileName>RDSWizardItem.zip</FileName>
<DisplayName>RDSWizardItem</DisplayName>
<Description>与远程设计系统对接的自动生成接口文件向导</Description>
<FileContentType>VSTemplate</FileContentType>
<ContentVersion>1.0</ContentVersion>
<Attributes>
<Attribute name="ProjectType" value="Visual C#"/>
<Attribute name="ProjectSubType" value=""/>
<Attribute name="TemplateType" value="Item"/>
</Attributes>
</Content>
</VSContent>
.Vscontent 文件使用基于 Visual Studio 内容安装程序架构参考的 XML 来描述所创建并打算共享的组件。至少,.vscontent 文件可以识别组件的种类以及应与组件一起使用的 Visual Studio 的版本。
·RDSWizardItem.zip
项模板
·RDSWizard.dll
gac 程序集
最后:即可将组件文件和 .vscontent 文件压缩为一个 .zip 文件,并将文件扩展名从 .zip 更改为 .vsi。
3. Register.bat
http://www.cnblogs.com/VisualStudioDesigner/archive/2010/08/23/1806613.html 如何让程序集在编译时自动添加到GAC
@ECHO OFF
SET PATH=%PATH%;C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin;
set solutionPath=C:\Users\cyljxu\Documents\Visual Studio 2008\Projects\WindowsFormsApplication17\
gacutil /if "\RDSWizard.dll"
EXIT 0
以上为批处理文件,并且要求GAC的DLL放到与bat同目录下即可。 XP是v6.0A,而Vista和Win7则是v7.0A。
l VC++项目模板制作
1. 新创建Custom Wizard选项的项目;
2. 保存后,即可在Wizards中看到刚才建立的VC++模板;只能存储在 C:\Documents and Settings\FreedomLive\My Documents\Visual Studio 2008\Projects 如果存储在其它文件夹目录下会提示:
3. 前后台的参数自定义
在前台default.htm中
·<HEAD>里增加<SYMBOL NAME='RADIO_EMPTY' TYPE=checkbox VALUE=true></SYMBOL> 标签;
·在<Body>里增加相应的html标签;
在后台default.js中
·OnFinish函数,利用wizard.AddSymbol('HEAD',ReadFile(HeadFilePath));即可实现向导对前台标签的内容替换;
4. 增加向导源文件
· Template Files 文件夹中放置实际向导中需要的源文件;
· 在Templates.inf中列出需要增加的文件列表;
· 在函数GetTargetName中对文件名进行自定义和参数化;
5. 注意的一些问题
· Js打开文件的路径中有空格怎么办?
//var rootFilePath = "file:///C:\\Documents%20and%20Settings\\FreedomLive\\My%20Documents\\Visual%20Studio%202008\\Projects\\RDSWizardPro\\WizardFiles\\";上面等同于下面: //var rootFilePath2 = "C:\\Documents and Settings\\FreedomLive\\My Documents\\Visual Studio 2008\\Projects\\RDSWizardPro\\WizardFiles\\";
· 编码问题,有原始的H与CPP文件必须用txt保存为UTF-8的字符格式才能够被此向导生成的项目中产生正常的源文件,否则中文乱码;
· 用Js读取并写入的文件,源码问题如何解决?
l VC++项目模板带向导的部署方案
1. 项目模板调试方法
A、 新打开一个VS并确保里面加载进一个项目;
B、 打开模板所在VS中的Debug菜单——Attach to Process ;
进行两个选择: 一个是Avalilable Processes中选择A中所指的Vs;另一个是Attche to 点击Select按扭,选择Script Code;
C、 调试过程中,不需要重新启动,直接修改项目源码,进行rebuild后,即可在下一次利用此项目模板新建的项目中得到体现;
2. 部署
A. Thank you ! the writer http://newbgirl.blog.sohu.com/83050673.html
B. 工程项目文件拷贝到文件夹 {VS2005InstallationFolder} \Microsoft Visual Studio 9.0\VC\VCWizards\AppWiz 安装路径;
C. 三个引导性文件:ICo,vsdir,vsz拷贝到文件 {VS2005InstallationFolder}\VC\VCProjects 中;
D. 修改VSZ文件为: Param="RELATIVE_PATH = VCWizards\AppWiz"
E. 批处理文件:
@echo off
for /f "tokens=1,2,3,4,*" %%i in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0" ^| find /I "InstallDir"') do SET "pURL=%%k"
echo Microsoft Visual Studio 2008 安装路径为:%pURL%
xcopy RDSWizardPro\*.* "%pURL% Files\Microsoft Visual Studio 9.0\VC\VCWizards\AppWiz\RDSWizardPro\" /s /e
xcopy RDSWizardPro\RDSWizardPro.ico "%pURL% Files\Microsoft Visual Studio 9.0\VC\vcprojects" /s /e
xcopy RDSWizardPro\RDSWizardPro.vsdir "%pURL% Files\Microsoft Visual Studio 9.0\VC\vcprojects" /s /e
xcopy RDSWizardPro\RDSWizardPro.vsz "%pURL% Files\Microsoft Visual Studio 9.0\VC\vcprojects" /s /e
pause>nul