2015-05-04 70 views
2

編寫Visual Studio項目項目模板,在這種情況下,我只會使用xml文件。我今天的問題是,我想將文件的名稱傳遞到完整的XML文件中。即...當我命名模板的文件名時,它創建項目文件並將其作爲xml文件添加到我的項目中。但是我想要發生的是當它創建xml文件時,它會將文件名值傳遞到xml文件中。將參數從Visual Studio項目模板傳遞到生成的項目

要嘗試更好地解釋它,我現在已經一個項目模板,其中模板XML具有像這樣一行:

<!-- Created by ModBuddy on $time$ --> 

以上是在實際VS項目模板,所以當我創建一個項目添加到我的項目中,它實際上創建了我的xml文件,其中包含以下行。

<!-- Created by ModBuddy on 10/26/2014 1:16:16 AM --> 

實質上,它從項目模板傳遞到我的xml文件當前DateTime創建xml文件時。我的問題是,你如何定義和傳遞像$ time $這樣的參數,以及在哪裏可以找到更多信息。我想能夠從Visual Studio項目模板(我將創建自己)將文件的文件名傳遞到工作xml文件,如$ filename $,但我不知道如何做到這一點,或者我可以在哪裏瞭解更多。

+0

不同於論壇的網站,我們不使用的「謝謝」,或者「任何幫助表示讚賞」,或簽名(因此)。請參閱「[應該'嗨','謝謝',標語和致敬從帖子中刪除?](http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be -removed - 從 - 個)。 –

回答

4

大量的研究後,我發現,您可以創建並通過使用Visual Studio的自定義嚮導的使用格式

$whatevernameyoulike$ 

通過自己的自定義參數。基本上你創建一個新的VS項目,類庫和實施從大會IWizard接口:

Microsoft.VisualStudio.TemplateWizardInterface 

你也有你的大會上創建一個接口/ WindowsForm爲您的項目或項目模板,你將創建以後。然後,您修改RunStarted方法在你的類,它實現IWizard來傳遞你的參數,如下所示:

public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams) 
{ 
    GeneralInfoPage generalInfoPage = new GeneralInfoPage(); 
    ExtendedInfoPage extendedInfoPage = new ExtendedInfoPage(); 
    ModWizardMenu modHost = new ModWizardMenu(); 

    modHost.Pages.Add(generalInfoPage); 
    modHost.Pages.Add(extendedInfoPage); 

    if (modHost.ShowDialog() != DialogResult.OK) 
    { 
     throw new WizardCancelledException("The wizard has been canceled by the user."); 
    } 

    string modDescription = generalInfoPage.ModDescription; 
    string toParse = modDescription; 
    if (toParse.Length > 127) 
     toParse = toParse.Substring(0, 127); 

    createUnit = extendedInfoPage.createUnit.Checked; 
    createBuilding = extendedInfoPage.createBuilding.Checked; 
    createSponsor = extendedInfoPage.createSponsor.Checked; 

    replacementsDictionary.Add("$unitName$", extendedInfoPage.unitName); 
    replacementsDictionary.Add("$buildingName$", extendedInfoPage.buildingName); 
    replacementsDictionary.Add("$sponsorName$", extendedInfoPage.sponsorName); 
} 

主要部分這裏是replacementsDictionary,當然,這只是解決方案的一部分。接下來,您必須創建一個自定義,項目或項目模板來訪問您新創建的嚮導程序集。

一旦你創建你的VS項目或項目模板,那麼你提取從創建壓縮文件中的文件並修改.vstemplate文件的引用添加到您的自定義嚮導組件,像這樣:

<WizardExtension> 
    <Assembly>rhodesMBWizard, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=56e9113a0fdbb124</Assembly> 
    <FullClassName>rhodesMBWizard.InfoManager</FullClassName> 
</WizardExtension> 

其重要的是要確保你有正確的公共令牌密鑰爲您的大會,如果你和我一樣,你不斷變化類的名字,你會希望確保在那裏我有rhodesMBWizard.InfoManager應該是:

yourAssemblyNamespace.classnameThatImplementsIWizard 

如果你看看y我們vstemplate文件,你會看到:

<TemplateContent> 
    <References /> 
    <ProjectItem TargetFileName="$fileinputname$.xml" ReplaceParameters="true">BuildingTemplate.xml</ProjectItem> 
</TemplateContent> 

開始項目項行是拉你命名的參數,並在該行的末尾將它們傳遞到項目或項目模板文件名,在我的情況下,線BuildingTemplate.xml 。

所以在我的BuildingTemplate。xml文件,我將有一大堆的

$buildingName$ 

項,項目或項目模板拉的

$buildingName$ 

出替換字典中,我創建了CustomWizard的價值,它就會爲我創建我的項目中有一個工作的xml文件,所有參數都改變了。

現在要做所有這些工作的要點是當您創建項目或項目模板時,您可以以前面提到的用戶界面或WindowsForm的形式接收用戶輸入,從而允許用戶做出選擇並命名一些東西事先會減少工作XML文件中所需的工作量。

額外的信息: http://www.windowsdevcenter.com/pub/a/windows/2007/06/06/developing-visual-studio-project-wizards.html?page=1

相關問題