如何在项目(非源)文件中使用通过 TemplateWizard 收集的自定义模板参数?

How can I use custom template parameters gathered with TemplateWizard in the project (not source) file?

在 VS2017 中,我制作了一个 C# 项目模板 项目,它使用表单和 IWizard 界面在用户键入项目名称并点击时立即弹出对话框好的。该表单从用户那里收集信息,然后相应地设置新项目。

我并没有真正偏离下一行中提到的指南,只是它没有涵盖我想做的事情。

Note to future readers: This How To Use Wizards With Project Templates guide is the only version of the page I have found that points out the need for the System and System.Drawing references. And even then it says "assemblies" when it means "references". Other duplicates of the same page have a strangely blank space at the crucial moment.

所以在 IWizard 的 RunStarted() 函数中,我创建了看起来像 $like$$this$ 的自定义模板参数,将它们添加到 replacementsDictionary,并为它们赋值,我从我的 whiz-bang 弹出对话框中检索。然后,该向导将用我分配给它们的值替换它在新项目文件中找到的那些自定义参数的外观(我之前写过这些外观)。还有内置的模板参数,我可以用同样的方式使用。

可以做什么(源文件== .cpp,项目文件== .vcxproj):

我不能做什么:

据我了解,我首先可以通过 RunStarted() 函数将用户定义的值转换为自定义参数值。这是问题的症结所在,因为现在将任何新内容分入项目文件显然为时已晚。在最终产品项目文件中,所有内置模板参数都按预期被替换。我在 .vstemplate 文件中 提前 定义的所有自定义模板参数也按预期进行了替换。但是我需要在 RunStarted() 中设置的自定义模板参数...它们仍然看起来 $like$ $this$.

换句话说,如果我在 RunStarted() 中这样写:

replacementsDictionary.Add("$custommessage$", "Custard");

那么我的源文件现在将出现 Custard,但项目文件仍将只有 $custommessage$.

这迫使 XML-writing work around 会带来自己的问题,所以我又回到了这个问题上。 如何将用户定义的自定义模板参数值放入项目文件中?

是题坏了。模板参数直接在项目文件中起作用。如果它们不工作,则意味着其他地方出了问题。即,仔细检查您所有的模板参数是否正常工作,是否正在获取值等。通常是其中一个出错导致了引发这个问题的悲痛。