2013-10-16 7 views
3

MSbuild를 사용하여 프로젝트 중 하나에서 명령 줄 빌드를 시도합니다. VS2012에서는 솔루션과 프로젝트가 제대로 구현되지만 배치 파일을 실행하면MSBuild error CS2001 소스 파일을 찾을 수 없습니다.

msbuild.exe project.csproj 

이 실패합니다. 너무나 많은 오류가있어서 과거에는 스크롤 할 수 없습니다. 그들은 모든 솔루션의 다른 프로젝트에서 다른 파일을 모두 같은 오류가 있습니다 : 나는 파일 이름의 길이에 대해 이야기 다른 질문을 발견했다

CSC : error CS2001: Source file 'folder\filename.cs' cound not be found [c:\folder\project.csproj] 

. 내가 할 수있는 경로의 모든 레이어를 제거해 보았습니다. 아무 소용이 없었습니다. 필자가 찾을 수없는 파일이 실제로는 다른 프로젝트에서도 상대 경로가 아니라는 것이 이상합니다. 나는 여기서 약간의 손실을 겪고있다. 내 빌드가 실패하는 이유는 무엇입니까?

+0

당신이이 문제를 해결할 수 있었을 여기

는 모든 것이 제대로 작동이 라인을입니까? – Anna

+2

배치 파일을 실행 중입니다. 이 배치 파일은 빌드하려는 프로젝트를 참조하여 어디에 위치하고 있으며 배치 파일 내용을 게시 할 수 있습니까 (소유권 정보 제외)? – Nicodemeus

+0

+1 닉. 파일 경로 문제 일 수 있습니다. 그것은 나를 위해 잘 작동합니다 (msbuild에 전달하는 경로도 상대 경로입니다) 또한 솔루션 구축에 다른 프로젝트가 있습니까? project.csproj에서 참조하고 있습니까? – arviman

답변

6

좋아는 내 특정 문제를 해결했다. MVC에는 컴파일 프로세스의 일부로 면도기 뷰를 빌드하는 프로젝트 파일에서 활성화 할 수있는 옵션이 있습니다 (표면 상으로는 빌드시에 일반적으로 런타임 오류가 발생하는 것을 포착 할 수 있습니다).

이 기능은 특별히 잘 지원되지 않았으며 명령 줄에서 빌드하면이 중간 빌드를 수행하는 것처럼 이상한 곳에서 물건을 찾기 시작합니다. 뷰는 임시 디렉토리에 빌드 된 다음 프로젝트 디렉토리에서 복사하려고 시도합니다. 그런 다음 모든 것이 분리됩니다.

또한 빌드 포스트 이벤트에 대한 솔루션 디렉토리를 알아야하지만 대부분의 사람들에게는 관련이 없습니다. 또한 패키지로 제작 한 다음 직접 배포하여 필요한 곳으로 물건을 쉽게 복사 할 수 있습니다. 패키지로 빌드하면 프로젝트가 수행 할 수있는 모든 솔루션 참조가 더 복잡한 프로젝트에 적합하게 해결됩니다. 나는 그것을 완성을 위해 여기에 포함시켰다.

msbuild.exe /v:q projectName.csproj /t:Package /p:MvcBuildViews=false;SolutionDir=%SolutionDir%;DeployOnBuild=true 

정말 문제 해결 간단한 버전 :

msbuild.exe projectName.csproj /p:MvcBuildViews=false; 
+2

내 자신의 대답을 수락하는 것이 좋지 않지만 내 정확한 문제가있는 사람들은이 솔루션에 만족할 것입니다. – normanthesquid

0

프로젝트가 솔루션 용으로 만들어진 것처럼 들리므로 솔루션 외부에서 빌드를 시도 할 때 솔루션이 모든 프로젝트의 위치를 ​​결정하는 풀인 것처럼 중단됩니다.

명령 줄에서 솔루션을 빌드하는 경우 작동합니까?

msbuild.exe solutionname.sln 

그렇다면 Visual Studio를 닫고 Notepad ++를 열고 일부 XML 편집을 시작할 준비를하십시오!

솔루션 루트 폴더에서 상대적 경로를 선호하는 절대 경로의 사용을 제거하십시오.

첫째, 만들기 공통 속성 "Common.props"라는 입대의 루트 폴더에 다음과 같은 마크 업 추가, 그리고

<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> 
    <PropertyGroup> 
     <SlnRoot>$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), Common.props))</SlnRoot> 
    </PropertyGroup> 
</Project> 

을 모든 구성원 프로젝트 파일이 마크 업을 추가 할 수 있습니다.

<PropertyGroup> 
    <CommonPropsFolder>$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory) ,Common.props))</CommonPropsFolder> 
</PropertyGroup> 
<Import Project="$(CommonPropsFolder)\Common.props" /> 

지금 .csproj 영향을받는 파일의 모든 < ProjectReference/> 노드를 찾을 수 있습니다 (이것은 < 프로젝트/> 노드 다음 표시하는 최초의 XML 노드이어야 함). 경로가 솔루션 루트에 상대적이고 새 $ (SrcRoot) MsBuild 속성이 접두사가되도록 참조를 수정합니다.

<ProjectReference Include="$(SlnRoot)\Tools\Build\Common.csproj"> 
    <Project>{deadbeef-dead-beef-dead-beefdeadbeef}</Project> 
    <Name>Common</Name> 
</ProjectReference> 

으로

<ProjectReference Include="..\..\Tools\Build\Common.csproj"> 
    <Project>{deadbeef-dead-beef-dead-beefdeadbeef}</Project> 
    <Name>Common</Name> 
</ProjectReference> 

에서 이제 다음, 솔루션 이름을 지정하여 건설로 이동하여 개별 프로젝트를 컴파일 할 수 있는지 확인하기 위해 테스트합니다.

문제의 프로젝트는 MVC 4 프로젝트 :이 실제로 다른 사람이 보는 것과 동일한 문제가되지 않을 수 있지만

관련 문제