2013-10-28 11 views
0

web.config에 나열된 연결 문자열을 가진 웹 사이트가 있습니다. 연결 문자열은 게시 기능에 의해 변경되므로 별도의 릴리스 데이터베이스를 참조 할 때 공개 될 때까지 개발 데이터베이스를 참조 할 수 있습니다.어셈블리의 연결 문자열

웹 사이트는 일부 어셈블리를 통해 데이터베이스에 액세스합니다. 그것들은 클래스 라이브러리이므로 적어도 내가 말할 수있는 한 게시 할 수 없습니다. 나는 web.config가 app.config connectionstrings을 무시할 것이라고 읽었지 만, 그렇게되지는 않습니다.

게시 할 때마다 릴리스 데이터베이스를 참조하도록 어셈블리 app.config 파일을 변경하지 않는 한 릴리스 사이트는 개발 데이터베이스를 참조합니다.

매번 그렇게하고 싶지는 않습니다. 어떻게해야합니까? 여기

+0

사용되는 구성 파일은 호스트 프로세스의 구성 파일입니다. 따라서 웹 사이트에서 DB 호출을하는 경우 연결 문자열은 웹 구성에서 가져와야합니다. 귀하의 웹 사이트가 DB 호출을하고 있습니까, 아니면 실제로 전화를 걸고있는 다른 서비스 (호스트 프로세스)를 호출하고 있습니까? –

+0

꽤 확실한 웹 사이트. 그것은 DataContext를 보이는 Settings.settings를 사용하여 확장하는 내부 DAL 타입 라이브러리를 호출합니다. 그게 문제 야? Settings.settings가 무시되지 않습니까? – erosebe

답변

2

가지고있어 두 가지 문제 :

1. 올바른 설정을 매번 게시 기억하는 방법 게시 : 이러한 설정을 배포하는

한 가지 방법은 Web.config의 변환을 사용하는 것입니다 Visual Studio에서. 이것은 설정이 매우 쉽고 게시 할 때마다 설정을 업데이트 할 필요가 없음을 의미합니다.

디버그 및 릴리스 환경뿐만 아니라 "UAT", "스테이징", "베타"또는 필요한 다른 구성에 대한 변환을 만들 수도 있습니다.

이 기사는 유용 할 수 있습니다. here, herehere. 위

<?xml version="1.0"?> 
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
    <connectionStrings> 
     <add name="MyDB" 
     connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True" 
     xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/> 
    </connectionStrings> 
    <system.web> 
    <compilation xdt:Transform="RemoveAttributes(debug)" /> 
     <customErrors defaultRedirect="GenericError.htm" 
     mode="RemoteOnly" xdt:Transform="Replace"> 
     <error statusCode="500" redirect="InternalError.htm"/> 
     </customErrors> 
    </system.web> 
</configuration> 

, 당신이 릴리스 모드로 변환 것을 보게 될하여 mydb 연결 문자열의 속성을 설정합니다 (XDT : = "SetAttributes"를 변환 예를 들어

는 여기에 릴리스 환경에 변환입니다), 컴파일 섹션에서 debug 특성을 제거하고 customErrors 섹션을 새 버전으로 바꿉니다.

간단하면서도 강력한 기술입니다.

2. 라이브러리, 그들의 연결 문자열을 검색해야하는 일반적인 방법으로 기록 된 경우 단순히 에 액세스하여 Web.config의에서

을 설정을 선택하기 위해 어셈블리를 얻는 방법 [웹] ConfigurationManager.ConnectionStrings 속성입니다. @Bob Horn과 마찬가지로 호스트 프로세스의 설정 파일 (이 경우 웹 앱의 web.config)에서 설정을 가져와야합니다.

그러나 때로는 라이브러리가 프로젝트의 .Settings 파일에서 설정을 가져 오는 경우가 있습니다.이 경우 상황이 좀 더 복잡해집니다. app.config의 설정 섹션을 web.config에 복사해야합니다. 위에서 설명한 변환 ​​기술을 사용하여이 작업을 수행 할 수도 있습니다.

다른 어셈블리의 소스 코드에 액세스 할 수 있으면 연결 문자열을 검색하는 코드 부분을 찾으십시오. ConfigurationManager 클래스에 액세스하지 않는 경우 web.config 파일을 가져 오지 않는 이유가 설명 될 수 있습니다.

+1

예. 고맙습니다. 나는 그들이 app.config에서 연결 문자열 정보를 얻고 있다고 들었다. 그러나 실제로 거기에서 파고 들었을 때 그들은 Settings에서 그것을 얻고 있었다. 리디렉션되고 이제는 상황이 좋습니다. – erosebe

+0

다행 이군. 잘 했어. – SimonGoldstone