C # (. NET)을 사용하여 프로그래밍 방식으로 web.config 변경


93

web.configC #을 사용하여 프로그래밍 방식으로 어떻게 수정 / 조작 할 수 있습니까? 구성 개체를 사용할 수 있습니까 web.config? 그렇다면 구성 개체에를 어떻게 로드 할 수 있습니까? 연결 문자열을 변경하는 전체 예제를 갖고 싶습니다. 수정 후에는 web.config하드 디스크에 다시 기록해야합니다.


ASP.NET 2.0 및 ASP.NET 3.5에서 web.config프로그래밍 방식으로 조작 하는 방법에 대한 그의 블로그 게시물을 확인하십시오. 또는 질문에 대한 답이있는이 질문을 확인하십시오. .net에서 프로그래밍 방식으로 연결 문자열 구성을 설정하려면 어떻게해야합니까?
Shoban

답변:


115

다음은 몇 가지 코드입니다.

var configuration = WebConfigurationManager.OpenWebConfiguration("~");
var section = (ConnectionStringsSection)configuration.GetSection("connectionStrings");
section.ConnectionStrings["MyConnectionString"].ConnectionString = "Data Source=...";
configuration.Save();

이 문서 에서 더 많은 예제를 참조하십시오 . 가장을 살펴 봐야 할 수도 있습니다 .


web.config 파일에서 연결 문자열의 이름은 무엇입니까?
Alex LE

기사에 대한 링크가 깨진
Vitall

@AlexLE : web.config가 다른 위치에있을 때 파일 위치를 어떻게 지정합니까? 공유 경로의 원격 서버 일 수 있습니까?
SharpCoder

@SharpCoder, 경로는 가상 경로이므로 먼저 원격 서버에서 로컬 응용 프로그램으로 web.config를 복사하고 (자신의 web.config를 재정의하지 않도록 임시 폴더에 있음) 편집하고 저장 한 다음 다시 복사해야합니다. 원격 서버에. 또는 더 좋고 복잡한 솔루션은 작업을 수행하는 API를 만들고 (web.config 변경) 원격 서버에 배포 한 다음 로컬 서버에서 사용하는 것입니다.
Guilherme Branco Stracini

@Skami는 connectionStrings 이름을 "MyConnectionString"으로 설정해야합니다. 이는 section.ConnectionStrings [ "MyConnectionString"] 값이 이름과 일치해야 함을 의미합니다.
Liakat

12
Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
ConnectionStringsSection section = config.GetSection("connectionStrings") as ConnectionStringsSection;
//section.SectionInformation.UnprotectSection();
section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
config.Save();

섹션 변수에서 사용자 ID를 얻는 방법은 무엇입니까?
Niks

5

web.config 파일은 xml 파일이므로 xmldocument 클래스를 사용하여 web.config를 열 수 있습니다. 업데이트 할 xml 파일에서 노드를 가져온 다음 xml 파일을 저장합니다.

다음은 web.config 파일을 프로그래밍 방식으로 업데이트하는 방법을 자세히 설명하는 URL입니다.

http://patelshailesh.com/index.php/update-web-config-programmatically

참고 : web.config를 변경하면 ASP.NET이 변경 사항을 감지하고 응용 프로그램을 다시로드 (응용 프로그램 풀 재활용)하고 세션, 응용 프로그램 및 캐시에 보관 된 데이터의 효과가 손실됩니다 (세션 상태 가정). InProc이고 상태 서버 또는 데이터베이스를 사용하지 않음).


기술적으로 가능하다는 것을 알고 있으며 Microsoft에서 승인 / 승인 한 방법이 더 오래 지속되고 web.config를 손상시킬 가능성이 적다고 생각합니다. 우리는 모두 이러한 파일을 "수동으로"업데이트했지만 프로덕션 웹 서버에서는 위험하다고 생각합니다. 내 2c.
Anthony Horne

2

이것은 AppSettings를 업데이트하는 데 사용하는 방법이며 웹 및 데스크톱 응용 프로그램 모두에서 작동합니다. connectionStrings를 편집해야하는 경우 해당 값을 가져온 System.Configuration.ConnectionStringSettings config = configFile.ConnectionStrings.ConnectionStrings["YourConnectionStringName"];다음 config.ConnectionString = "your connection string";. 이 connectionStrings섹션에 의견 Web.Config이 있으면 제거됩니다.

private void UpdateAppSettings(string key, string value)
{
    System.Configuration.Configuration configFile = null;
    if (System.Web.HttpContext.Current != null)
    {
        configFile =
            System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
    }
    else
    {
        configFile =
            ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    }
    var settings = configFile.AppSettings.Settings;
    if (settings[key] == null)
    {
        settings.Add(key, value);
    }
    else
    {
        settings[key].Value = value;
    }
    configFile.Save(ConfigurationSaveMode.Modified);
    ConfigurationManager.RefreshSection(configFile.AppSettings.SectionInformation.Name);
}

이 코드는 훌륭하고 찬성했지만 appSettings가 다른 파일에 정의되어 있으면 작동하지 않습니다. 예 : <appSettings file = "C : \ Client \ customSettings.config"> </ appSettings>
Ben Junior
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.