2015-01-02 1 views
0

암호화되어 있고 올바르게 암호 해독 할 수없는 구성 섹션에 액세스하려고하면 (예 : 누군가 다른 컴퓨터에서 구성 파일을 맹목적으로 가져 왔습니다) - Configuration 클래스에서 예외가 발생합니다. 나는 그 상황을 파악하고 그런 경우에 완전히 다시 쓰고 싶다.해독하지 않고 암호화 된 구성 섹션을 덮어 씁니까?

내가 제거하고 문제가되는 부분을 다시 추가하려고했습니다

하지만 제거는 무시됩니다 것으로 보인다 - '캐치'의 두 번째 문은 발생 등의 섹션에 대한 또 다른 예외는 이미 존재 :

try 
{ 
    // this getter might throw an exception - e.g. if encrypted on another machine 
    var connStrings = config.ConnectionStrings; 
} 
catch (ConfigurationException) 
{ 
    config.Sections.Remove("connectionStrings"); 
    config.Sections.Add("connectionStrings", new ConnectionStringsSection()); 
} 

그것은 수도 실제로 연결 문자열 섹션이 별도의 파일에 있다는 사실과 관련이 있습니다. 즉, 구성 파일의 내용이 <connectionStrings configSource="connections.config"/> 인 반면 실제 암호화 된 내용은 connections.config 파일에 있습니다.

.NET 구성 클래스 만 사용하여 XML 조작을 직접적으로 처리하지 않고도 필요한 작업을 수행 할 수 있습니까?

답변

1

나는 이것이 당신이 원하는 것을 할 것이라고 확신한다.

<connectionStrings> 
    <add connectionString="foo"/> 
</connectionStrings> 

내가 그래서 그냥 귀하의 경우처럼 날려 버리겠다 ConnectionStrings을 읽으려고하는 "이름"속성을 포함하지 않았다 :

try { 
    var x = ConfigurationManager.ConnectionStrings; //blows up    
} 
catch { 
    var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
    config.Sections.Remove("connectionStrings"); 
    config.Save(); //Now save the changes 
    ConfigurationManager.RefreshSection("connectionStrings"); //and reload the section 
    var x = ConfigurationManager.ConnectionStrings; //can now read!     
} 
내 경우에는, 난 그냥 가짜를 ConnectionString 설정을 포함

당신은 여전히이 작업을 수행 할 수 없습니다 :

config.Sections.Add("connectionStrings", new ConnectionStringsSection()); 

때문에 (적어도 내 컴퓨터에), 그것은의 Machine.config에서 connectionStrings을 따기.

나는 귀하의 경우에는 그것이 괜찮다고 생각합니다. 원할 경우 자신의 연결 문자열을 추가 할 수 있으며 연결 문자열 섹션을 완전히 날려 보낼 필요가없는 시점에 있습니다.

+0

감사합니다. 사실, connectionStrings도 컴퓨터 설정에서 가져온 것을 잊어 버렸습니다. 그렇지 않으면 내'config.Sections.Remove ("connectionStrings");가 완벽하게 정상적으로 작동했습니다. 아직 한 번 저장하거나 새로 고침 할 필요가 없습니다. 적어도, 내 경우에는이 줄이없이 작동합니다. 하지만 어쨌든 덕분에, 당신의 대답은 나를 올바른 길로 가게했습니다 :) –

+0

오. 기묘한. 그래, 내 경우 엔 그 둘 모두가 필요해. – aquinas

+0

내 경우에는 앱 실행을위한 설정이 아니며 다른 exe의 경우 'ConfigurationManager.OpenExeConfiguration (executablePath)'를 통해로드 된 앱입니다. 그게 이유 야. –

관련 문제