1

私のPSCmdletクラスでは、ユーザーに で選択するように求めていますPromptForChoice。ユーザーは、使用する接続文字列を選択するよう求められます。ChoiceDescriptions私は正しいフォーマットを与えることができません。

 choiceDescriptions.Add(new ChoiceDescription("&"+i+externalConfig.ConnectionStrings.ConnectionStrings[i].ConnectionString));

これをくれる

接続文字列

使用する接続文字列を選択します

[0] 0data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true

[1] 1有効な接続文字列。

[2] 2Data Source=111.111.1.1;Initial Catalog=Test;User id=User;Password=Password;MultipleActiveResultSets=true

[?] ヘルプ (デフォルトは「0」):

ご覧のとおり、数字は接続文字列のテキストにも含まれていますが、これは私が望んでいるものではありません。

これは私が達成しようとしているものです:

[0] データ ソース=.\SQLEXPRESS;統合セキュリティ=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;ユーザー インスタンス=true

などなど

結果として、ユーザーの選択が必要になりますint。達成したい結果を得るにはどうすればよいですか?

コード:

[Cmdlet(VerbsCommon.Get, "DemoNames")]
public class Get_DemoNames : PSCmdlet
{
    [Parameter(Position = 0, Mandatory = false)]
    public string prefix;


        System.Diagnostics.Debugger.Launch();

        var environment = Package.GetGlobalService(typeof(DTE)) as DTE2;
        if (environment == null)
        {
            throw new Exception("Need a DTE");
        }

        var solution = new DirectoryInfo(environment.Solution.FullName);

        var directory = string.Empty;
        if (solution.Parent != null)
        {
            directory = Path.Combine(solution.Parent.FullName, @"Datamodel\bin\Debug");
        }
        else
        {
            throw new Exception("No directory for DLL-files");
        }

        var whereBuilder = new WhereImporter(directory);
        EfXmlDependencyInjectionContainer.Wheres = whereBuilder.AllEfXmlWheres();

        // get propertyinfo from database-contexts
        var contextBuilder = new EfXmlContextPropertyBuilder(directory);
        EfXmlDependencyInjectionContainer.ContextProperties = contextBuilder.GetPropertyInfo();

        //get datamodels
        var datamodelBuilder = new EfXmlDatamodelBuilder(directory);


        /* Get the app/web config file */
        var configFile = string.Empty;
        var projects = environment.Solution.Projects.DTE.ActiveSolutionProjects;
        foreach (var project in projects)
        {
            foreach (EnvDTE.ProjectItem item in project.ProjectItems)
            {
                if (Regex.IsMatch(item.Name, "(app|web).config", RegexOptions.IgnoreCase))
                {
                    configFile = item.FileNames[0];
                    break;
                }
            }
        }

        /* Open config file */
        var configMap = new ExeConfigurationFileMap
        {
            ExeConfigFilename = configFile
        };
        var externalConfig = System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(configMap,
            ConfigurationUserLevel.None);

        var conString = string.Empty;

        /* No connectionstrings are found */
        if (externalConfig.ConnectionStrings.ConnectionStrings.Count == 0)
        {
            throw new Exception($"No connectionstrings found in: {configFile}");
        }
        /* If there's only one connectionstring, pick that one. */
        if (externalConfig.ConnectionStrings.ConnectionStrings.Count == 1)
        {
            conString = externalConfig.ConnectionStrings.ConnectionStrings[0].ConnectionString;
        }
        /* Give the user the choice to choose the connectionstring. */
        if (externalConfig.ConnectionStrings.ConnectionStrings.Count > 1)
        {
            var choiceDescriptions = new Collection<ChoiceDescription>();

            for (int i = 0; i < externalConfig.ConnectionStrings.ConnectionStrings.Count; i++)
            {
               choiceDescriptions.Add(new ChoiceDescription("&"+i+externalConfig.ConnectionStrings.ConnectionStrings[i].ConnectionString));
            }

            var choice = this.Host.UI.PromptForChoice("Connection String", "Choose the connection string you want to use",
            choiceDescriptions, 0);
            conString = externalConfig.ConnectionStrings.ConnectionStrings[choice].ConnectionString;
            WriteObject(choice);
        }


        var parser = new Parser
        {
            CurrentProjectDirectory = solution.Parent.FullName,
            DbConnectionString = conString
        };
        parser.UpdateXml(datamodelBuilder);

    }
}
4

0 に答える 0