2013-06-07 3 views
3

저는 Visual Studio 프로젝트 내에서 프로젝트 디렉터리 (솔루션이 아님)에있는 "쿼리"폴더 아래에 3 개의 특히 큰 SQL 쿼리를 넣었습니다. 이 파일에 액세스하는 훌륭한 방법이 있습니까? @"Queries/firstSqlQuery.sql과 같은 것이 작동 할 것으로 기대하고있었습니다.프로젝트 디렉터리에서 SQL 쿼리 파일 읽기

@"C:\\Users\John\Documents\VisualStudio2010\Projects\MySolution\MyProject\Queries\firstSqlQuery.sql 과 같이 전체 경로를 지정하면 응용 프로그램을 이동해야하므로 코드로 돌아가 경로를 수정해야하기 때문에 실제로하지 않을 것입니다.

편집 : 어떤 이유로 페이지가 C:\\Program Files(x86)\Common Files\Microsoft Shared\DevServer\Queries\firstSqlQuery.sql에있는 파일을 찾고 있습니다. 실행 가능한 디렉토리가 다른이 위치에서 왜 보이는 것입니까?

답변

3

프로젝트 외부에 있다면 다음과 같이 할 수 있습니다. (나는 intitially 내가 오해이 항아리 읽고 생각하면 내가이 프로젝트에 포함 된 가정 된 솔루션 디렉토리에 WAS) -

var pathToBin = Assembly.GetExecutingAssembly().Location; 
var directoryInfoOfBin = new DirectoryInfo(pathToBin); 
var solutionDirectory = directory.Parent().Parent(); 
var pathToSolution = solutionDirectory.FullName; 

을하지만이 프로젝트가 있다면 훨씬 간단

System.Web.HttpContext.Current.Server.MapPath("~/Queries/firstSqlQuery"); 
+1

'Server.MapPath'에 +1. –

+0

@MichaelPerrenoud - 고마워요! –

+0

Server.MapPath는 내가 찾고있는 것과 정확히 일치합니다. 감사! – rwhite

1

처리 방법에는 여러 가지가 있지만 먼저 수집해야하는 기본적인 이해가 있습니다. @"Queries/..."과 같은 것을 발급하는 것은 그 자체로는 아무 것도하지 않을 것입니다. IO 작업을 수행하려면 System.IO 네임 스페이스를 활용해야합니다. 기초의 일부와

,이 같은 명령을 실행할 때의이 좀 더 누워 보자

File.ReadAllText("firstSqlQuery.sql"); 

코드를 실행하는 것 어셈블리의 Working Directory입니다 암시 경로를. Visual Studio에서 응용 프로그램, 특히 ASP.NET 응용 프로그램을 디버깅 할 때 프로젝트 디렉토리에있는 bin 디렉터리가 이고 기본값은입니다. 당신이 Queries 폴더에 액세스 할 않은 경우에 따라서, 당신은 이런 식으로 뭔가를해야 할 것 :

File.ReadAllText(@"..\Queries\firstSqlQuery.sql"); 

그래서, 그것을 처리하는 하나의 방법이다.

또 다른 방법으로는 파일 등록 정보 (예 : Post Build Event 만들기)를보고 프로젝트를 빌드 할 때마다 bin 폴더에 파일을 복사하는 것이 좋습니다. 그러나 이것이 내가 생각하는 것보다 효과가 있습니다. 에 대한.

다시 말하지만, 여기에 열쇠는 당신이 시작하고 어떤 디렉토리 이해하는 것입니다. 당신이 디렉토리 구조를 활용하는 경우가 Queries 폴더를 얻을 수 있도록해야합니다, 지적

마지막으로 한 가지 가치 라이브 사이트에 배포됩니다. 그것은 아마 말할 필요도 없지만, 사람들이 이전에 그 정확한 문제에 부딪히는 것을 보았습니다.

+0

네,'System.IO'를 사용하고 있습니다. 감사. – rwhite

0

빌드를 수행 할 때 쿼리 파일이 출력 디렉터리에 복사되는지 확인하고 경로를 설정하지 않고 파일을 읽을 수 있습니다.

+0

내가 활성화 한 첫 번째 설정 중 하나입니다. 편집을 확인하십시오. 응용 프로그램이 이상한 위치를 찾고 있습니다. – rwhite

+0

@rwhite, 솔루션 탐색기에서 쿼리 파일을 마우스 오른쪽 단추로 클릭하고 속성을 선택할 수 있어야합니다. 속성 메뉴에서 "Copy to Output directory"를 "Copy always"로 설정하십시오. –

+0

그래, 활성화 된 첫 번째 설정 중 하나입니다! – rwhite