2017-02-06 5 views
0

私はVisual Studio 2015でvb.net開発プロジェクトに取り組んでおり、実行時にプロジェクトのapp.configを順番に編集できるようにする必要がありますさまざまなWebサイトの役割とメンバーシップ・プロバイダにアクセスできます。私はApplicationServices のconnectionStringsセクションと会員とroleManagerプロバイダセクションでのapplicationName設定で設定を変更できるようにしたいと思います。私が使用して上記のようなプロジェクトのapp.config ファイルから設定を取得しようとしています実行時に実行時にさまざまな役割とメンバーシッププロバイダのためにapp.configを編集する方法

<?xml version="1.0" encoding="utf-8"?> 
    <configuration> 
     <startup> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
     </startup> 
     <connectionStrings> 
     <clear /> 
     <add name="ApplicationServices" connectionString="Data Source=.\SQLEXPRESS; Integrated Security=True; User Instance=False; Connect Timeout=30; Initial Catalog=MYWEBSITE" providerName="System.Data.SqlClient" /> 
     </connectionStrings> 
     <system.web> 
     <membership> 
      <providers> 
      <clear /> 
      <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" applicationName="/" passwordFormat="Encrypted" enablePasswordRetrieval="true" enablePasswordReset="true" requiresQuestionAndAnswer="true" requiresUniqueEmail="true" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="8" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="5" /> 
      </providers> 
     </membership> 
     <roleManager enabled="true"> 
      <providers> 
      <clear /> 
      <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" /> 
      <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" /> 
      </providers> 
     </roleManager> 
     </system.web> 
    </configuration> 

:私はこのようにして、プロジェクトのベースディレクトリ内の初期のapp.configファイルを編集しています以下のコード:

  Public Shared Function ReadAllConfigSettings(ByRef Configs(,) As String) As Boolean 
     ReadAllConfigSettings = False 
     Configs.Initialize() 
     Dim ConfigCounter As Integer = 0 
     Dim config As System.Configuration.Configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None) 
     Try 
      Dim Settings = config.AppSettings.Settings 
      If Settings.Count = 0 Then 
       ReadAllConfigSettings = False 
       Exit Function 
      Else 
       For Each key As String In Settings.AllKeys 
        ConfigCounter = ConfigCounter + 1 
        Configs(ConfigCounter, 1) = key 
        Configs(ConfigCounter, 2) = Settings(key).Value 
       Next 
       ReadAllConfigSettings = True 
      End If 
     Catch e As ConfigurationErrorsException 
      ReadAllConfigSettings = False 
     End Try 
    End Function 

IがCの設定= config.AppSettings.Settingsラインから取り出さ設定コレクション上記のコードを実行しますODEは常にnullエントリを持つ空で、Settings.Countは、私はこれは私がはapp.configファイルに追加した設定を取得していない、と私は続けることができない理由として困惑しています0

です私はそれらを取得する方法を見つけることができない場合、それらを変更するために働く。誰かが私を正しい方向に向けることができますか?

ありがとうございます!私はのapp.configファイルを編集しようとせずにそれを行うための方法であるように思われる解決策を考え出した再思考プロセスの後

デビッド

答えて

0

。以下は、私が問題に私の研究中に発見されたフラグメントから一緒にスクランブルコードは次のとおりです。

  Public Shared Function UpdateMembership(ConnectionStr As String, AppName As String, UserName As String, OldPassword As String, NewPassword As String, TheQuestion As String, TheAnswer As String, Optional TheError As String = Nothing) As Boolean 
     UpdateMembership = False 
     Dim IsMember As Boolean = False 
     Dim AUser As MembershipUser 
     Dim ChangePassOK As Boolean = False 
     Dim ChangeQAOK As Boolean = False 
     Try 
      Dim settings As Object = ConfigurationManager.ConnectionStrings("ApplicationServices") 
      Dim fi As Object = GetType(ConfigurationElement).GetField("_bReadOnly", (BindingFlags.Instance Or BindingFlags.NonPublic)) 
      fi.SetValue(settings, False) 
      settings.ConnectionString = ConnectionStr 
      Membership.Providers.Item("AspNetSqlMembershipProvider").ApplicationName = AppName 
      Roles.Providers.Item("AspNetSqlRoleProvider").ApplicationName = AppName 
      Roles.Providers.Item("AspNetWindowsTokenRoleProvider").ApplicationName = AppName 
      IsMember = Membership.ValidateUser(UserName, OldPassword) 
      If IsMember Then 
       AUser = Membership.GetUser(UserName, False) 
       If Not IsNothing(AUser) Then 
        ChangePassOK = AUser.ChangePassword(OldPassword, NewPassword) 
        If ChangePassOK Then 
         ChangeQAOK = AUser.ChangePasswordQuestionAndAnswer(NewPassword, TheQuestion, TheAnswer) 
        End If 
        If ChangeQAOK Then 
         UpdateMembership = True 
        End If 
       End If 
      End If 
     Catch ex As Exception 
      If Not IsNothing(TheError) Then 
       TheError = ex.Message 
      End If 
     End Try 
    End Function 

各サイトの設定に固有の任意のユーザのセキュリティ設定を調整するために使用することができますので、それが正常に動作します。

関連する問題