【发布时间】:2018-04-22 00:20:29
【问题描述】:
在 VS2017 中,我制作了一个 C# 项目模板 项目,该项目使用表单和 IWizard 界面在用户键入项目名称并点击“确定”后立即弹出一个对话框。该表单从用户那里收集信息,然后相应地设置新项目。
我并没有真正偏离下一行中提到的指南,只是它没有涵盖我想做的事情。
给未来的读者的注意:这个How To Use Wizards With Project Templates 指南是我发现的唯一版本的页面,它指出需要 System 和 System.Drawing 引用。即便如此,当它表示“引用”时,它也会说“程序集”。同一页面的其他副本在关键时刻有一个奇怪的空白。
所以在 IWizard 的 RunStarted() 函数中,我创建了看起来像 $like$ $this$ 的自定义模板参数,将它们添加到 replacementsDictionary,并为它们分配值,这些参数是我从我的专家那里检索到的——砰弹出对话框。然后,向导将用我分配给它们的值替换它在新项目的文件中找到的那些自定义参数的外观(我之前写过这些外观)。还有一些内置的模板参数,我可以以同样的方式使用。
我可以做什么(源文件 == .cpp,项目文件 == .vcxproj):
- 使用内置模板参数将值替换到模板的源文件和项目文件中。
- 在 .vstemplate 文件中定义自定义模板参数,将值替换到我的模板的 source 文件和 project 文件中。
- 在 IWizard 的 RunStarted() 函数中定义自定义模板参数,该函数仅将值替换到我的模板的 source 文件中。
我不能做什么:
- 在 IWizard 的 RunStarted() 函数中定义自定义模板参数,将值替换到我模板的 project 文件中。
据我了解,我首先可以通过 RunStarted() 函数将用户定义的值转换为自定义参数值。这是问题的症结所在,因为这显然为时已晚,无法将任何新内容放入项目文件中。在最终产品项目文件中,所有内置模板参数都按预期替换。我在 .vstemplate 文件中提前定义的所有自定义模板参数也按预期替换。但是我需要在 RunStarted() 中设置的自定义模板参数......它们仍然看起来都是 $like$ $this$。
换句话说,如果我在 RunStarted() 中写这个:
replacementsDictionary.Add("$custommessage$", "Custard");
那么我的源文件现在将出现Custard,但项目文件仍然只有$custommessage$。
这迫使 XML 编写工作解决了它本身的问题,所以我回到了这个问题。 如何将用户定义的自定义模板参数值放入项目文件中?
【问题讨论】:
标签: c# visual-c++ visual-studio-2017 wizard project-template