2

我为C#创建了自己的项目模板,其中包含更多的项目。C#自定义项目模板

我在其中添加了我自己的向导。那效果很好。

,当我尝试把一些我的项目的自定义特性参数的补充替代字典里,在我的向导库我在我的项目获得原始值(不更换)(它保持为“$的connectionString $ “)。

例如,如果我添加这段代码在RunStarted方法:

private string _connectionString = "Lorem ipsum for example"; 
public void RunStarted(object automationObject, Dictionary<string, string>replacementsDictionary, WizardRunKind runKind, object[] customParams) 
{ 
    replacementsDictionary.Add("$connectionString$", _connectionString); 
} 

而且在我的web.config:

<connectionStrings> 
    <add name="DAL.Database.Properties.Settings.MyConnectionString" connectionString="$connectionString$" providerName="System.Data.SqlClient" /> 
</connectionStrings> 

即使在我.vstemplate文件我看到这个文件被标记为检查和修改参数:

<ProjectItem ReplaceParameters="true" OpenInEditor="true" TargetFileName="Web.config">Web.config</ProjectItem> 

注意:如果我把硬编码值.vstemplate文件中像这样例如它只能:

<CustomParameters> 
    <CustomParameter Name="$connectionString$" Value="Some dummy value" /> 
</CustomParameters> 

但是,这不是我想要的。 现在我想知道,有什么可以成为一个问题?

回答

1

我终于找到了解决这个问题的办法。

要从你的类库中传递你的自定义参数,你需要创建你自己的字典,并在那里放置你的自定义数据。

然后从那里复制数据到替换字典字典。

这就是例子,你如何可以共享充满了希望多个项目模板之间的替换值相同的字典:

private static Dictionary<string, string> _sharedDictionary = new Dictionary<string, string>(); 

public void RunStarted(object automationObject, 
     Dictionary<string, string> replacementsDictionary, 
     WizardRunKind runKind, object[] customParams) 
    { 
     if (runKind == WizardRunKind.AsMultiProject) 
     { 
      try 
      {      
       _sharedDictionary.Add("$connectionString$", connectionString); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.ToString()); 
      } 
     } 
     if (_sharedDictionary != null) 
     { 
      foreach (KeyValuePair<string, string> dictItem in _sharedDictionary) 
      { 
       if (!replacementsDictionary.ContainsKey(dictItem.Key)) 
       { 
        replacementsDictionary.Add(dictItem.Key, dictItem.Value); 
       } 
      } 
     } 
    } 

因为_sharedDictionary被标记为静态的所有实例将共享相同的字典和需要替换的值将在您的所有项目模板中提供。

而且,不要忘了所有的链接项目.vstemplate文件WizardExtension节包括。