我正在尝试制作Visual Studio项目模板。我可以使用import queue
import threading
def worker():
while True:
item = q.get()
if item is None:
break
do_work(item)
q.task_done()
q = queue.Queue()
threads = []
for i in range(num_worker_threads):
t = threading.Thread(target=worker)
t.start()
threads.append(t)
for item in source():
q.put(item)
# block until all tasks are done
q.join()
# stop workers
for i in range(num_worker_threads):
q.put(None)
for t in threads:
t.join()
因此,如果我的项目名为$safeprojectname$
并且我命名了一个文件WidgetHunter
,那么在项目创建时它将被称为$safeprojectname$.js
。
但是,如果我想将文件命名为WidgetHunter.js
或widgetHunter.js
?
是否需要创建一个没有静态值的新变量?(我需要对提供的项目名称执行字符串操作。)
答案 0 :(得分:1)
所以这不会像你提到的那样直截了当。 Project Templating不是很强大,它是基本的替代品,你无法真正运行代码AFAIK。
然而,你可以轻松地"添加向替换字典添加其他键的向导步骤(IWizard
)。例如,您可以添加具有受控值的$safeprojectnameforjs$
。
public class ExampleWizard : IWizard
{
public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams)
{
replacementsDictionary.Add("safeprojectnameforjs",
YourCustomMethodForManipulatingName(replacementsDictionary["safeprojectname"])
}
// there are a few other IWizard methods you'll need to
// implement but don't need to do anything in
}
要在ExampleWizard中连接,您需要在.vstemplate中添加标记
<VSTemplate>
<WizardExtension>
<Assembly>ExampleWizard.ExampleWizard, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=a76e3e75702e3ee4</Assembly>
<FullClassName>ExampleWizard.ExampleWizard</FullClassName>
</WizardExtension>
</VSTemplate>
注意:您需要在装配中使用向导。最简单的方法是创建一个新的类库项目。此外, 需要签名(至少,非常确定仍然需要)。
最后,您需要更新VSIX清单,以便将向导程序集连接为程序集依赖项:
<PackageManifest>
<Assets>
<Asset Type="Microsoft.VisualStudio.Assembly" d:Source="Project" d:ProjectName="ExampleWizard.ExampleWizard" Path="|ExampleWizard.ExampleWizard|" AssemblyName="|ExampleWizard.ExampleWizard;AssemblyName|" />
</Assets>
</PackageManifest>