2010-12-06 8 views
0

우리 사이트에는 프로덕션 서버와 개발 서버가 있습니다. 나는 서로 다른 설정과 라이센스 정보를 가지고 있으며 각각 2 개의 web.config 파일에있다.하나의 다중 웹 구성

하나의 web.config 파일에 이들을 통합하는 방법이 있습니까? 그래서 내가 사이트를 출판 할 때 나는 프로덕션의 개발 (또는 그 반대)을 덮어 쓰지 않는다.

답변

1

VS 2010을 사용하면 web.config 변환 및 빌드 구성에서이 작업을 수행 할 수 있습니다. 스콧 거스리는이에 대해 쓴 :

http://weblogs.asp.net/scottgu/archive/2010/07/29/vs-2010-web-deployment.aspx

나는 당신이 당신의 주요의 Web.config에 추가 설정 파일 (예 : Web.Debug.config 등) 및 VS 자동으로 "링크"를 만들어이 기본적으로 작동 생각 IDE에 있지만 VS 2010이 없기 때문에 현재 사용중인 컴퓨터에서 확인할 수 없습니다.

이전 버전의 VS에서 빌드 이벤트를 사용하면 상당히 쉽게 할 수 있지만 좋지 않아. 스콧은 실제로 너무 이것에 대해 쓴 다음은 높은 수준의 단계를

(스콧의 블로그 게시물에서 발췌)

http://weblogs.asp.net/scottgu/archive/2007/09/21/tip-trick-automating-dev-qa-staging-and-production-web-config-settings-with-vs-2005.aspx

이 작업을 수행하기 위해 취할. 그들은 VS 2005와 VS 2008 모두에서 작동합니다.

  1. (MSBuild에서 프로젝트 파일을 기반으로 한)를 사용하여 ASP.NET 웹 응용 프로그램 프로젝트
  2. 열고 VS 구성 관리자 및 프로젝트 및 솔루션 구성을 구축 "준비"새로운 "데브", "QA"를 생성
  3. 프로젝트에 새로운 "web.config.dev", "web.config.qa"및 "web.config.staging"파일을 추가하고 해당 모드의 특정 구성 설정을 포함하도록 사용자 정의하십시오.
  4. 새로운 기능 추가 프로젝트를 빌드 할 때마다 적절한 모드 별 버전으로 프로젝트의 web.config 파일을 자동으로 복사 할 수있는 프로젝트 파일에 "이벤트 미리 빌드"명령 oject (예 : 솔루션이 "Dev"구성에 있다면 web.config.dev 설정을 기본 web.config 파일에 복사합니다.)
+0

내가 찾고있는 것. 감사. – Jim

0

특정 프로파일에 대해 빌드 할 때 XML 노드를 구성 파일로 대체/삽입/대체 할 수있는 XML MSBuild 파일 인 웹 배치 프로젝트 (VS2008, VS2010)를 생성 할 수 있습니다. 하루에 반나절을 올바르게 구성하는 데 많은 시간을 할애 할 수 있지만 많은 시간을 절약 할 수 있으므로 시간이 많이 걸릴 것입니다 (한 번의 클릭으로 한 발짝 더 가까이 다가 갈 수 있습니다).

참고 : VS2008 웹 배포 프로젝트의 경우 MSBuild Community Tasks을 사용하는 것이 좋습니다. VS2010의 상태가 이러한 작업을 통해 무엇인지 알지 못합니다. 여전히 필요한지 여부와 관계 없습니다. 우리의 웹 응용 프로그램의 디렉토리에서 (우리가 VS2010에서 사용)을 MSBuild를 커뮤니티 작업은 같은 약간 보이는를 사용하여 우리의 VS2008 웹 배포 작업에 대한

...

<!-- ... --> 
<Target Name="AfterBuild"> 
    <XmlMassUpdate Condition="'$(Configuration)|$(Platform)' == 'Release - Dev|AnyCPU'" ContentFile="$(OutputPath)\web.config" SubstitutionsFile="$(OutputPath)\web.Substitutions.config" ContentRoot="/" SubstitutionsRoot="/configuration/substitutions/dev" /> 
</Target> 
<!-- ... --> 

우리는 보이는 파일 web.Substitutions.config이 비트 같은 ... 우리가 필요한 추가 구성으로 우리의 웹 배포 프로젝트를 실행하는 Team City를 사용하고 차질없이 작동하는지 언급 할 가치가

<?xml version="1.0" encoding="utf-8" ?> 
<configuration xmlns:xmu="urn:msbuildcommunitytasks-xmlmassupdate"> 
    <substitutions> 

    <!-- dev settings--> 
    <dev> 
     <configuration> 
     <appSettings file=""> 
      <add xmu:key="key" key="some_setting" value="a_value_is_here"/> 
       </appSettings> 
     </configuration> 
    </dev> 
    <prod> <!-- you get the idea --></prod> 
    </substitutions> 
</configuration> 

. Hudson은 같은 방법입니다 (설정하기가 쉽습니다).

0

한 가지 가능성은 있지만, 컨텍스트를 기반으로하는 값에 적절한 이름을 지정하여 병합 할 수 있으며 코드의 컴파일 상수를 사용하여 각 요소에 조건부로 액세스 할 수 있습니다. 예를 들어, 당신의 Web.config에 당신은 DEBUG 상수를 고려, 이제

다음
<connectionStrings> 
    <add name="DevelopmentConnection" connectionString="DevelopmentConnectionString" /> 
    <add name="DeploymentConnection" connectionString="DeploymentConnectionString" /> 
</connectionStrings> 

이, 내의 말을하자 ... 당신이 할 수있는 구성 클래스 ...

public static class Configuration 
{ 
    public string ConnectionString 
    { 
     get 
     { 
      #if DEBUG 
       return ConfigurationManager.ConnectionStrings["DevelopmentConnection"].ConnectionString; 
      #else 
       return ConfigurationManager.ConnectionStrings["DeploymentConnection"].ConnectionString; 
      #endif 
     } 
    } 
} 

을 가질 수있다 이 정의되면 환경별로 구축 할 때이 속성을 사용하면 적절한 설정이 적용됩니다.

+0

이 방법의 큰 문제는 더 많은 사람들이 프로덕션에 액세스하는 것보다 개발 환경에 액세스 할 수 있다는 것입니다. 이렇게하면 해당 사람들에게 프로덕션 배포 문자열과 같은 항목에 액세스 할 수있게되므로 매우 나쁜 일입니다. –

+0

방금 ​​입력 한 내용 중 많은 부분이 인터넷 드롭으로 인해 길을 잃었으므로 가장 중요한 문제를 해결하기 위해 선택할 것입니다. 그러한 환경의 민감한 데이터는 암호화해야합니다. –

+0

데이터를 해독하고 읽을 수있는 곳이 있어야합니다. 일반적으로 그렇게 할 수있는 방법을 개발했다는 ​​의미입니다. 이는 개발 코드에 액세스 할 수있는 사람이라면 누구든지이를 해독 할 수 있음을 의미합니다. –

관련 문제