Visual Studio模板 - 自定义参数

时间:2016-05-23 15:34:20

标签: c# visual-studio templates visual-studio-templates

我正在使用VS 2015模板为我创建一个项目,在我的C#类中,我有$projectname$这样的替换,如果我将这个项目命名为MyTemplatedProject,它们的效果很好。我使用$projectname$作为类名和命名空间的一部分。

如果我创建了一个像$projectname$Context这样的类,它会变成MyTemplatedProjectContext,一切都很好。

但是如果我将项目命名为MyTemplatedProject.FrontEnd我生成的类有问题,因为他们的名字中有.

替换$projectname$Context变为MyTemplatedProject.FrontEndContext,但这对于类名不起作用。

如何基于$projectname$创建自定义参数,理想情况下我会有一个像$projectnameUpToFirstDot$这样的参数,当项目名称为MyTemplatedProject时,它只返回MyTemplatedProject.FrontEndContext

2 个答案:

答案 0 :(得分:1)

如果您只想根据项目名称生成有效的类名,而不是创建自定义模板参数,则可以将$projectname$更改为$safeprojectname$,即documented为:

  

用户在“新建项目”对话框中提供的名称,其中删除了所有不安全的字符和空格。

答案 1 :(得分:0)

一周前我遇到了完全相同的问题。我只需要在我的模板中包含一些自定义变量,这些变量将在$projectname$大写中解析,而另一个在小写中解析。这样的事情。

对我来说,使用VS'自定义向导模板开发自己的项目向导是最有效和最灵活的方式。

除非JavaScript& HTML对你来说不是一件好事,对$projectname$之类的变量进行一些字符串操作非常容易。

设置完成后,进入default.js并在功能

中进行编辑
function onFinish()
{
    ...

    var prjName = wizard.FindSymbol('PROJECT_NAME');

    wizard.AddSymbol('PROJECT_NAME_WITHOUT_DOTS', prjName.split('.')[0]);

    ...
}

split('.')删除所有点并将其分成字符串数组。使用[0],您只选择第一个点的部分。

然后,您可以在模板文件中使用以下语法处理符号PROJECT_NAME_WITHOUT_DOTS

class [!output PROJECT_NAME_WITHOUT_DOTS] {
    ...
}