[C#] 외부 VS2013 빌드 오류“오류 MSB4019 : 가져온 프로젝트 <path>를 찾을 수 없습니다”

Visual Studio 2013이 아닌 명령 줄을 통해 프로젝트를 빌드하고 있습니다. 참고로 프로젝트를 Visual Studio 2012에서 2013으로 업그레이드했습니다. 프로젝트는 IDE 내부에서 제대로 빌드됩니다. 또한 VS2012를 먼저 완전히 제거한 다음 재부팅하고 VS2013을 설치했습니다. 내가 가지고있는 Visual Studio의 유일한 버전은 2013 Ultimate입니다.

ValidateProjects:
    39>path_to_project.csproj(245,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
    39>Done Building Project "path_to_project.csproj" (Clean target(s)) -- FAILED.

문제의 두 줄은 다음과 같습니다.

<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v12.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />

원래 두 번째 줄은 v10.0이지만 수동으로 v12.0으로 변경했습니다.

$ (VSToolsPath)는 내가 본 것에서 v11.0 (VS2012) 폴더까지 연장되어 더 이상 존재하지 않습니다. 경로는 v12.0이어야합니다.

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\WebApplications\

시스템 환경 변수 테이블에서 VSToolsPath를 지정하려고 시도했지만 외부 빌드 유틸리티는 여전히 v11.0을 사용합니다. 레지스트리를 통해 검색을 시도했지만 아무것도 없었습니다.

안타깝게도 정확한 명령 줄을 사용하는 쉬운 방법은 없습니다. 빌드 도구를 사용합니다.

생각?



답변

나는 같은 문제가 있었고 더 쉬운 해결책을 찾았습니다.

Vs2012가 csproj 파일에 다음을 추가하기 때문입니다.

<PropertyGroup>
  <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
  <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>

해당 부분을 안전하게 제거하면 솔루션이 구축됩니다.

으로 Sielu 지적 당신이 .proj 파일이 시작되도록해야 <Project ToolsVersion="12"당신은 비주얼 스튜디오 2010 프로젝트를 열고, 그렇지 않으면 다음에, 다시 제거 된 노드를 추가합니다.

그렇지 않으면 webdeploy를 사용해야하거나 빌드 서버를 사용하는 경우 위의 솔루션은 작동하지 않지만 VisualStudioVersion빌드 스크립트에서 특성을 지정할 수 있습니다 .

msbuild myproject.csproj /p:VisualStudioVersion=12.0

또는 빌드 정의를 편집하십시오.

<code> VisualStudioVersion </ code> 속성을 ​​지정하도록 빌드 정의 편집


답변

나도 이것을 가지고 있었고 빌드 정의에서 도구 버전을 설정하여 문제를 해결할 수 있습니다.

이것은 매우 쉽습니다. 빌드 정의를 열고 ” 프로세스 “페이지 로 이동 하십시오. 그런 다음 ” 3. Advanced “그룹 아래에 ” MSBuild Arguments ” 라는 속성이 있습니다 . 다음 구문으로 매개 변수를 배치하십시오.

/p:VisualStudioVersion=12.0 

더 많은 매개 변수가 있으면 공백으로 구분하고 쉼표로 구분하십시오.


답변

이는 밀접한 관련이 있지만 OP 관련 문제를 해결하거나 수정하지 않을 수 있습니다. 필자의 경우 VS2013을 사용하여 Azure 사이트 배포를 자동화하려고했습니다. 그러나 VS 작업을 통한 빌드 및 배포는 MSBuild를 사용하여 “대상”과 비슷한 오류를 나타 냈습니다. MSBuild는 VS2013에서 다르며 .Net Framework가 아닌 VS의 일부입니다 ( http://timrayburn.net/blog/visual-studio-2013-and-msbuild/ 참조). ). 기본적으로 올바른 MSBuild 버전을 사용하십시오.

올드, VS2012

C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe

새로운 VS2013

C:\Program Files (x86)\MSBuild\12.0\bin\msbuild.exe

최신 VS2015

C:\Program Files (x86)\MSBuild\14.0\Bin\msbuild.exe

최신 VS2017 (완전히 테스트하지는 않았지만 발견됨-약간 이동 함)

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\msbuild.exe


답변

난 그냥 나에게 준 Kinook의 응답을 수신 링크 :

기본적으로, 나는 빌딩하기 전에 다음을 호출해야합니다. Visual Studio 2013이 환경을 자동으로 먼저 등록하지는 않지만 2012는 그렇지 않았거나 잊어 버렸습니다.

call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x86

이 게시물이 다른 사람을 돕기를 바랍니다.


답변

giammin의 솔루션 이 부분적으로 잘못되었습니다. 당신은 해서는 안 솔루션에서 그 전체 PropertyGroup를 제거합니다. 그렇게하면 MSBuild의 “DeployTarget = Package” 기능이 작동을 멈 춥니 다. 이 기능 은 “VSToolsPath” 설정 에 의존합니다 .

<PropertyGroup>
  <!-- VisualStudioVersion is incompatible with later versions of Visual Studio.  Removing. -->
  <!-- <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion> -->
  <!-- VSToolsPath is required by MSBuild for features like "DeployTarget=Package" -->
  <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
...
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />


답변

FSharp 대상에이 문제가있었습니다 (FSharpTargetsPath가 비어 있음).

많은 경로는 VS 버전을 참조하여 빌드됩니다.

여러 가지 이유로 우리 빌드는 시스템 권한으로 실행되며 환경 변수 “VisualStudioVersion”은 VS 2013 설치 관리자에 의해 “사용자”수준에서만 설정되었습니다.

실행중인 레벨 (시스템 또는 사용자) 에서 ” VisualStudioVersion“환경 변수가 ” 12.0“로 설정되어 있는지 확인하십시오 .


답변

이것을 명령 행에서 실행하면 문제도 해결됩니다. SETX VisualStudioVersion “12.0”