我的 Visual Studio 2008 模板有啥问题?

Posted

技术标签:

【中文标题】我的 Visual Studio 2008 模板有啥问题?【英文标题】:What's wrong with my Visual Studio 2008 template?我的 Visual Studio 2008 模板有什么问题? 【发布时间】:2010-11-16 06:19:52 【问题描述】:

我正在尝试为 Visual Studio 创建自己的类模板,名为“Public Class”。

我几乎完全按照the official MSDN instructions on how to manually create an Item Template 进行操作,但我没有让模板显示在“添加新项目”对话框的“我的模板”部分。

我将 PublicClass.zip 放在以下 Windows XP 目录中:

C:\Documents and Settings\我的用户名\我的文档\Visual Studio 2008\Templates\ItemTemplates\Visual C#。

Public Class.zip 包含以下文件:

    PublicClass.cs PublicClass.ico PublicClass.vstemplate

PublicClass.cs 包含...

using System;
using System.Collections.Generic;
$if$ ($targetframeworkversion$ == 3.5)using System.Linq;
$endif$using System.Text;

namespace Pse.$projectname$

    public class $safeitemname$
    
    

PublicClass.vstemplate 包含...

<?xml version="1.0" encoding="utf-8"?>
<VSTemplate
  Type="Item"
  Version="1.0.0"
  xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
  <TemplateData>
    <Name>Public Class</Name>
    <Description>An empty class declaration with access modifier = public and namespace = Pse.NameOfProject</Description>
    <Icon>PublicClass.ico</Icon>
    <ProjectType>CSharp</ProjectType>
    <DefaultName>PublicClass.cs</DefaultName>
  </TemplateData>
  <TemplateContent>
    <ProjectItem ReplaceParameters="true">PublicClass.cs</ProjectItem>
  </TemplateContent>
</VSTemplate>

我启动了 Studio,试图在我的项目中添加一个新项目,但找不到我的模板。于是,我听从了this *** question的建议,就是打电话……

devenv.exe /installvstemplates

...从命令行,但所做的只是使所有模板(包括内置模板)消失。经过片刻的恐慌后,我最终在多次运行命令后将它们恢复了,但这显然不是我的答案。

如果您在此处发现我的程序有任何问题,请您帮帮我吗?

提前致谢。

编辑:

如果我使用文件/导出模板(如 Preet 建议的那样),模板确实会显示在我的模板中,但参数没有正确替换。

如果我插入一个新的“Public Class”,这就是我得到的:

using System;
using System.Collections.Generic;
$if$ (3.5 == 3.5)using System.Linq;
$endif$using System.Text;

namespace Pse.$projectname$

    public class PublicClass1
    
    

因此,只有 $projectname$$targetframeworkversion$ 可以正确替换。它没有正确处理$if$ 语句或$projectname$。 (我也尝试过使用$safeprojectname$,但这并没有什么不同。)

这绝对是那些试图让我的生活更方便一些却产生完全相反效果的案例之一:)

【问题讨论】:

你正在关闭 VS 不是吗? 是的。我也尝试将 zip 文件移动到不同的文件夹位置。我在 Tools...Options 中验证了目录设置正确。 【参考方案1】:

手动创建的 ZIP 文件有问题。除非我导出现有模板并对其进行更改,否则我永远不会让模板出现。 These are the instructions

【讨论】:

这样可以显示模板,但是当我插入模板时,它无法正常工作。 ReplaceParameters 在自动生成的 vstemplate 文件中肯定设置为 true,但我的模板中的 $if$ 语句和 $projectname$ 声明没有被替换。【参考方案2】:

我遇到了这个问题:)

我想我设法解决了这个问题Files\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplates\CSharp\Code\1033 然后编辑它我最终得到了这个

// $Id$
// $Author$
namespace $rootnamespace$

    using System;
    using System.Collections.Generic;
$if$ ($targetframeworkversion$ == 3.5)  using System.Linq;
$endif$    using System.Text;

    public class $safeitemrootname$
    
    

$if$ 语句的间距似乎确实有所不同如果我在它们之前有制表符或间隔,它们将无法正确评估,或者他们确实评估了您所看到的但只是打印在我的代码中。

至于当你运行 /installvstemplates 时你的模板消失了,你可能会注意到 cmd 需要很长时间才能运行,实际上它正在做的是删除 Foo:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplatesCache,然后如上所述通过在原始位置提取 zip 文件来重建该文件夹。为了让这个命令运行,visual studio 最好在运行时关闭它,你应该等到命令完成后再重新启动它。 (提示我曾经实际监控文件夹并观察它的构建)。

虽然这是一个灵活的系统,但微软确实可以让用户更轻松,毕竟 R# 有这个简单的右键单击功能,如果你有 R#,这是在外部实现模板的最简单方法毫秒系统。

【讨论】:

谢谢@krystan。我最终放弃了,然后最终我改变了我组织命名空间的方式,所以我不再需要模板了。如果再次需要模板,我一定会注意$if$ 语句的间距。 没有问题@DanThMan .. 作为记录,当我把头发拉出来的时候,我也看到了你的 *** 帖子,很高兴其他人发现它比本来应该的更难,我记得它并且我目前有 25 个工作模板 :) @krystan 和 @DanM:我刚刚确认了间距问题,毫无疑问:$if$$else$$endif$ 中的每一个都绝对必须成为要识别的行上的 first 文本,有点像旧 C 预处理器指令的限制。如果您将这些关键字放在其他任何地方,它们将被意外忽略。而且你不能在一行上放置多个关键字,即使是连续的,这意味着某些类型的输出格式是不可能的:最烦人的是,你不能写$else$$if$,所以elseif-like 结构必须始终包含额外的换行符。【参考方案3】:

如果您希望它在 Visual Studio 2008 中工作,您必须在 .vstemplate 文件中将 &lt;VSTemplate Version="1.0.0"&gt; 更改为 &lt;VSTemplate Version="3.0.0"&gt;。然后将 .zip 文件放在您指定为用户项模板位置的位置。

【讨论】:

以上是关于我的 Visual Studio 2008 模板有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2008 在编译模板时不关心基类的存在?

Visual Studio 项目模板多个项目类型

visual studio 2008的ISO文件有3.70GB,为啥有这么大?

我下载了visual studio 2008 但是里面没有能够打开aspx的模板,要怎么办啊,麻烦指点下,SqlServer也登不

如何更新 Visual Studio 模板缓存

Visual Studio 2008 自动恢复目录位置更改