8

Winフォームアプリケーションの構成ファイルを単体テストしています。LocalTestRun.testrunco​​nfigで、app.configをコピーするように設定しました。テストの実行中に確認しましたがEnvironment.CurrentDirectory、ファイルにはこの余分な接続文字列も含まれていません。これはテスト方法です:

[TestMethod]
    public void Configuration_ConnectionStrings_Connect()
    {
        Console.WriteLine(Environment.CurrentDirectory);
        Assert.IsTrue(System.IO.File.Exists("App.Config"));
        var configFileMap = new ExeConfigurationFileMap(){ ExeConfigFilename = "App.Config"};

      var config=  ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None);

       foreach (ConnectionStringSettings connectionString in config.ConnectionStrings.ConnectionStrings)
        {
           //Assumes all connections are to Sql server, test must be updated if not
            Assert.AreEqual("System.Data.SqlClient",connectionString.ProviderName,"Test was only designed for SQL clients");
         using (var cn=new System.Data.SqlClient.SqlConnection(connectionString.ConnectionString))
         {
             cn.Open();
             Assert.AreEqual(System.Data.ConnectionState.Open,cn.State);
         }
        }

    }

ただし、反復するconfig.ConnectionStrings.ConnectionStringsと、ファイルにない追加の構成文字列があります。

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

これは、asp.netプロジェクトではなく、決してありませんでした。

設定ファイルは次のとおりです。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
        <section name="HLIT_Ticketing.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
    </sectionGroup>
</configSections>
<connectionStrings>
    <add name="HLIT_Ticketing.Properties.Settings.HomeQConnectionString"
        connectionString="Data Source=******\*****;Initial Catalog=*****;Persist Security Info=True;User ID=*****;Password=******"
        providerName="System.Data.SqlClient" />
</connectionStrings>
<userSettings>
    <HLIT_Ticketing.Properties.Settings>
        <setting name="AssociateRole" serializeAs="String">
            <value>Associate</value>
        </setting>
        <setting name="DeveloperRole" serializeAs="String">
            <value>Developer</value>
        </setting>
    </HLIT_Ticketing.Properties.Settings>
</userSettings>

この余分な接続文字列はどこから来ていますか?

4

2 に答える 2

12

その接続文字列は、マシンレベルの構成ファイルmachine.configで定義されています。

ファイルC:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.configを見ると、次のセクションが表示されます。

<connectionStrings>
    <add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>
</connectionStrings>
于 2010-01-08T16:45:32.470 に答える
12

デイブは主な答えを釘付けにしました-賛成。

ただし、machine.configまたは「アップストリーム」web.configsから接続文字列を削除する場合は、いつでも次を使用できます。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <connectionStrings>
        <clear />
        <add name="HLIT_Ticketing.Properties.Settings.HomeQConnectionString"
             connectionString="Data Source=******\*****;Initial Catalog=*****;Persist Security Info=True;User ID=*****;Password=******"
             providerName="System.Data.SqlClient" />
    </connectionStrings>

最初<clear/>の接続文字列セクションでは、以前に存在していた接続文字列をすべて消去し、きれいな状態で開始します。

于 2010-01-08T17:21:34.710 に答える