2017-10-15 11 views
2

.csproj 파일이 선언이 포함되어.csproj 파일에있는 <SolutionDir> 요소의 목적은 무엇입니까?

<PropertyGroup> 
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> 
    ... 
    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir> 
    </PropertyGroup> 

내 기대는 당신이 프로젝트 디렉토리에서 직접 프로젝트를 빌드하고 /p:SolutionDir= 매개 변수를 지정하지 않는 경우 솔루션 파일을 발견 할 필요가 있었다. 그러나 ..\은 자동으로 절대 경로로 해석되지 않으므로 솔루션과 관련된 종속성이있는 경우에는 쓸모가 없습니다.

답변

3

SolutionDir 속성을 올바른 값으로 설정하지 않은 경우 솔루션 파일과 별도로 csproj 파일을 작성할 수 있도록 프로젝트 파일에 추가 된 것처럼 보입니다 (사용자가 'msbuild my.csproj'을 실행할 때 msbuild my.sln으로 전화하지 말 것).

어딘가에 $(SolutionDir)을 사용하여 csproj 파일 (또는 가져온 소품/대상 파일)의 다른 빌드 논리를 가정하므로이 조건부 선언을 사용하여 속성을 설정하지 않으면 실패합니다.

MSBuild는 csproj 파일에 상대적인 경로를 해석하고 작업 디렉토리를 csproj 파일의 위치로 설정하여 모든 명령을 실행하므로 거의 모든 사용 사례에서 ..\이 작동해야합니다.