2010-12-09 4 views
1

WinForms 앱과 ASP.NET 웹 사이트에서 모두 사용하려는 C# 코드가 있습니다. 데이터베이스 연결 문자열은 각기 다르므로 어떤 플랫폼을 실행 중인지 알아 내고 연결 문자열을 적절하게 설정하려고합니다. 이 작업을 쉽게/권장할만한 방법이 있습니까?C#에서 어떤 플랫폼 코드가 실행되고 있는지 감지하고 있습니까?

이것은 WinForms와 ASP.NET 모두에서 컴파일해야하므로 아무 것도 필요하지 않으므로 System.Windows 또는 System.Web을 참조하십시오.

+0

두 가지 winforms 응용 프로그램이 공통 서비스 계층을 작성하는 방법은 어떻습니까? 와 ASP.NET '같은 이야기에'이야기? –

답변

2

권장되는 방법은 구성 파일 (App.Config 또는 Web.Config)에 연결 문자열을 저장하고 ConfigurationManager을 사용하여 읽는 것입니다. MSDN의 Storing and Retrieving Connection Strings을 참조하십시오.

+0

제안을 주셔서 감사합니다. – mikel

+0

이것은 정확하게 내가했던 것, 훌륭한 작품 - 감사합니다. 첫 번째 문장의 경우 – mikel

3

프레임 워크가 이미이 문제를 처리합니다. System.Configuration.ConfigurationManager.AppSettings 또는 ConfigurationManager.ConnectionStrings을 사용하여 연결 문자열을 읽으면 WinForms에 App.config 및 ASP.NET의 경우 Web.config에서 읽습니다. 두 개의 설정 파일에 다른 값을 넣을 수 있습니다.

더 일반적인 질문은 System.Web.HttpContext.Current을 확인하고 그렇지 않으면 null입니다. 확실히 ASP.NET 내부에서 실행 중입니다. null 인 경우 일 수도 있고 ASP.NET에없는 일 수도 있지만 요청에 포함되지 않을 수도 있습니다. System.Web.HttpRuntime에있는 일부 속성을 확인해 볼 수도 있습니다.

편집 : 첫번째 Type.GetType("System.Web.HttpContex")를 호출하고 그 다음 null을 반환하는 경우에는 ASP.NET에서 확실히하지 않은 : 당신이를 System.Web.dll에 대한 참조를 추가하지 않으려면 당신은 반사를 통해 위의 부를 수 . 값이 반환되면 여기에 Current 정적 속성을 가져올 수 있습니다.

+0

두 코드 모두 동일한 코드를 사용하고 싶지만 (유지 관리가 쉽다), System.Web.HttpContext.Current에 대한 참조는 WinForms 앱에서 컴파일되지 않습니다. 설정 파일 제안을 주셔서 감사합니다. – mikel

+0

우리는 system.WEb.HttpContext.Current가 custom dll에 존재하는지 확인하기 위해 Evgeny 제안과 비슷한 작업을 수행합니다. 어쩌면 다른 프로젝트의 웹/양식 응용 프로그램인지 확인하는 코드를 별도로 작성해야합니다 (그리고 system.web 레퍼 런을 추가 할 수 있습니까?) – Lareau

+0

@ miket2e : 내 대답을 편집하여 Reflection을 제안했습니다. – EMP

1

실행중인 플랫폼을 데이터베이스 코드가 감지하는 것이 잘못된 솔루션처럼 보입니다. 당신이 뭘 선택하든 그것을 이길 수있는 방법이있는 것처럼 보입니다.

대신 내 응용 프로그램의 진입 점을 선언적으로 표현해야합니다.

enum Platform { 
    AspNet, 
    WinForms 
} 

public class DataConnection { 
    public DataConnection(Platform platform) { 
    ... 
    } 
} 
+0

+1. – Inisheer

+0

저는 ASP.NET을 처음 접했을 때, 플랫폼을 선언하는 "응용 프로그램의 진입 점"은 무엇입니까? WinForms에 대한 Program.cs라고 가정합니다. – mikel

관련 문제