파일이 실제로 v10을 참조 할 때 v11.0 \ WebApplications \ Microsoft.WebApplication.targets를 찾을 수 없습니다.


84

먼저 몇 가지 배경. 2012 년 말에 우리는 vs2008 솔루션을 vs2010으로 마이그레이션했지만 여전히 .NET 3.5를 대상으로합니다. (나는 여기서 가장 최근의 가장 위대한 것 외에는 아무것도 모른다!)

사람들이 다음과 같은 오류가 발생하기 시작한 몇 주 전까지는이 설정에 문제가 없었습니다.

"foo.csproj" (Rebuild target) (16:5) ->
  C:\...\foo.csproj(142,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 declaration is correct, and that the file exists on disk.

흥미로운 점은 프로젝트 파일을 보면 Visual Studio 2012를 사용하지 않기 때문에 의미가있는 v10을 참조한다는 것입니다.

이 오류는 한 번에 여러 명에게 영향을 미쳤으며 심지어 몇 달 동안 변경되지 않은 이전 코드 분기에서도 발생했습니다.

나는 일을 혼란스럽게 만드는 일부 업데이트가 우리 컴퓨터에 푸시되었다고 생각하지만 어떻게 해야할지 모르겠습니다.

단기 솔루션은 VS 2012를 설치하고 사용하지 않는 것이었지만 그보다 약간 더 깨끗한 것을 기대하고 있습니다.


17
MSBuild 명령 줄에 "/p:VisualStudioVersion=10.0"을 추가하면이 문제가 사라지지만 여전히 해킹처럼 느껴집니다.
drs9222 2013-07-05

답변:


116

Visual Studio 2013에서 동일한 문제가 발생했습니다. 명령 줄에서 .NET Framework와 함께 제공되는 MSBuild의 이전 버전을 사용하고있었습니다. Microsoft는 이제 Visual Studio 자체의 일부 및 별도의 설치 관리자로 MSBuild를 출시하고 있습니다 ( http://blogs.msdn.com/b/visualstudio/archive/2013/07/24/msbuild-is-now-part-of- visual-studio.aspx ).

해결책은 .NET에있는 MSBuild.exe의 새 버전을 사용하는 것이 었습니다 C:\Program Files (x86)\MSBuild\12.0\Bin. 일단 그렇게하면 모든 타겟 오류가 사라졌습니다.

편집 1

주석에서 언급했듯이 새 버전의 MSBuild마다 새 디렉터리가 제공됩니다. Visual Studio 2015의 경우 C:\Program Files (x86)\MSBuild\14.0\Bin.

2 편집

주석에서 언급했듯이 Visual Studio 2017의 경우 C:\Program Files (x86)\Microsoft Visual Studio\2017\<Edition>\MSBuild\15.0\Bin\MSBuild.exe.


1
TeamCity 포럼에 새 경로 (NuGet 설정 처리 방법)를 통합하라는 요청을 게시했습니다. 바라건대 그들은 이것을 빨리 처리합니다.
David Peden 2013

1
별도의 도구 다운로드에 대한 블로그 게시물의 직접 링크는 더 이상 유효하지 않습니다. 올바른 링크는 microsoft.com/en-us/download/details.aspx?id=40760 입니다.
David Peden 2013

1
그리고 마찬가지로 Jetbrains는 버전 8.0.5로 구출됩니다. 공식 블로그 게시물 : teamcitydev.blogspot.com/2013/11/…
David Peden

1
로컬 Powershell 빌드 스크립트가있는 경우 경로에 추가하고 $env:Path = $env:Path + ";C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\WebApplications"v4 msbuild를 사용할 수 있습니다 (빌드 상자에서도이 작업을 수행 할 수 있음)
Chris S

4
예! 감사합니다-이것이 적절한 해결책입니다.
Josh M.

52

VS2012가 설치되지 않은 빌드 서버가있는 경우 다음 방법으로 해결할 수 있습니다.

a) 솔루션에 MSBuild.Microsoft.VisualStudio.Web.targets 패키지 설치

b) .csproj 파일에서 다음 줄을 바꿉니다.

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

이 줄이 너겟 패키지를 가리키고

<Import Project="..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.11.0.2.1\tools\VSToolsPath\WebApplications\Microsoft.WebApplication.targets" Condition="true" />

편집하다

업데이트 된 행의 버전을 @joedragons 포인트 즉 nuget 패키지 버전을 일치해야합니다으로 대체 targets.11.0.2.1하여 targets.x.x.x.x현재 버전.


1
마찬가지로, 훌륭한 조언!
Kevin Obee 2015 년

2
감사합니다. 훌륭한 솔루션
Pavel

1
분명 할 수도 있지만 대체 할 줄에는 설치 한 패키지의 버전이 포함되어야합니다. 내가 설치 한 것은 12.0.4 였기 때문에 대체 가져 오기를 입력했을 때 동일한 오류가 발생했습니다. ... Web.targets.12.0.4 \ ... all good =)로 전환했을 때 정말 감사합니다!
joedragons

2
이 답변의 b 부분이 더 이상 필요하지 않습니다. 어떤 이유로 SO는 불필요한 세부 사항을 제거하기 위해 편집을 거부했습니다.
bbodenmiller

1
덕분에 나는 마지막 버전 MSBuild.Microsoft.VisualStudio.Web.targets.14.0.0.3와 같은 한
아메드 사미르에게

23

이 문제에 대한 간단한 해결책 :

다음 경로로 이동하십시오.

C : \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio

Visual Studio 2010, 2012 또는 2013 설치에 따라 최신 버전 V10.0, v11.0, v12.0이 표시됩니다.

WebApplications최신 버전 디렉토리 중 하나에서 폴더를 복사 하여 다른 디렉토리에 붙여 넣습니다.

문제가 해결되어야합니다.


1
이 IMO는 가장 좋고 간단한 솔루션입니다. :)
gideon

물론 빌드 서버에서이 작업을 수행하려면 실제로 액세스 할 수 있어야합니다.
Dave

1
... 왜 수동으로해야합니까? (- 지금은 아직 IIS를 설치하지 않았기 때문에 그것은 생각 만 신선한 VS2017로 설치되었다 나를 위해) 덕분에 ..이 VS21017에 나를 위해 그것을 고정
피오트르 쿨라

V14.0으로 복사 할 때도 작동합니다.
Uwe Keim


8

와. 빌드 머신에서도 똑같은 일이 일어나는 것을 보았습니다. 우리는 VS2010을 사용하고 .NET 4.0을 대상으로합니다. 프로젝트 파일은 이러한 타겟의 v10.0 버전을 명시 적으로 가져옵니다. 코드 변경없이 어제 빌드는 괜찮 았고 오늘은 v11.0 버전 누락에 대한 불만으로 실패했습니다. .NET Framework 4.5.1은 어젯밤이 빌드 시스템에 자동 업데이트로 설치 / 업데이트되었습니다. 우리는 매개 변수 (또는 환경 변수)로 v10.0을 강제 할 것입니다. 그러나 이것은 확실히 우리를 놀라게했습니다 ...

업데이트 : 더 이상한 점은 오늘의 msbuild 버전이 기본적으로 사용할 VisualStudioVersion을 결정하기 위해 sln 파일의 첫 번째 줄을 사용하는 것처럼 보이지만 어제 버전은 그렇지 않은 것 같습니다.

Format Version 12.00

수동으로 이것을 11.00으로 변경하는 것을 테스트했고 빌드가 다시 작동하기 시작했습니다.

우리의 경우, 2010 / 4.0에 대한 모든 것을 목표로하고 구축하고 있지만 일부 개발자는 VS2012를 준비하고 있습니다 (MS가 프로젝트 파일이 호환된다고 주장했기 때문에).이 특정 솔루션은 마지막으로 저장되었습니다 (몇 달 전). VS2012. 오늘 전에는 문제가되지 않았습니다.


1
이것은 완전히 다른 상황에 관한 것처럼 보이는 가장 높은 투표 응답보다 훨씬 더 많은 도움이되었습니다.
LambdaCruiser 2014-06-26

@LambdaCruiser와 동일 하게이 답변이 많은 도움이되었습니다. 나는 내 .sln 파일의 역사를 살펴 보았고, 두 # Visual Studio 2010번째 줄은 Format Version 12.00내가 vs2012로 업그레이드했지만 vs2010으로 앞뒤로 전환 한 어떤 단계에서 끝나는 첫 번째 줄을 읽었 습니다 . Wayne과 마찬가지로 CI 서버에서 Windows 업데이트를 실행 한 후이 문제가 발생했습니다
wal

6

나는 같은 문제가 있었다. 위에 나열된 솔루션을 통해 해결되었습니다. 이 문제는 빌드 서버에서 적절한 버전의 Visual Studio 도구 (BuildTools)를 사용할 수 없기 때문에 발생합니다. 위에서 올바르게 지적했듯이 BuildTools를 설치하면 해결할 수 있지만 제 경우에는 옵션이 아닙니다.

다른 대안이 있습니다-Nuget 사용

Install-Package MSBuild.Microsoft.VisualStudio.Web.targets -Version 14.0.0.3

시작 프로젝트를 식별하고 사용중인 Visual Studio 버전에 따라 web.targets를 설치합니다. 필요한 변경 사항이 포함 된 다음 파일이 수정됩니다.

packages.config에서 :

<package id="MSBuild.Microsoft.VisualStudio.Web.targets" version="14.0.0.3" targetFramework="net45" />

.csproj에서 :

<Import Project="..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.14.0.0.3\build\MSBuild.Microsoft.VisualStudio.Web.targets.props" Condition="Exists('..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.14.0.0.3\build\MSBuild.Microsoft.VisualStudio.Web.targets.props')" />

도움이 되었기를 바랍니다!!! 행운을 빕니다,

건배,


1
완벽한 대답-csproj 파일을 사용하거나 빌드 서버에서 항목을 복사 할 필요가 없습니다. 여러 버전의 Visual Studio 및 MSBuild 2017에서 작업했습니다. "WebApplication.targets"줄을 수동으로 제거했지만 nuget이 자동으로 제거하지 않았습니다.
Gedas Kutka

3

해킹했지만 c : \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ WebApplications *. *를 c : \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0에 복사하여 해결했습니다. \ WebApplications *. *


1

TeamCity 설치 구성이나 MSBuild 설치 또는 소스 코드를 변경하지 않고 11 월 말에이 오류가 발생했습니다. 내 빌드 서버에서 Visual Studio가 설치되지도 않았고, VS2010에서 VS2012 로의 변경은 당시 아무런 문제없이 8 월 말에 이루어졌습니다.

내 MSBuild 버전은 4.0.30319.18408이고, 빌드 서버는 TeamCity v6.5.3이 설치된 Windows Server 2008 R2 SP1입니다.

영향을받지 않은 다른 빌드 서버에서 v11 폴더를 복사하여 문제를 해결했습니다.

제 생각에는 이것이 두 가지 방식으로 발생할 수 있습니다.

  1. v11 폴더의 삭제를 트리거하는 항목이 업데이트되었습니다. .NET에 대한 Windows 업데이트일까요?

  2. 내 TeamCity / MSBuild 구성을 v10 사용에서 v11로 변경 한 것이 업데이트되었으며 v11이 존재하지 않았기 때문에 빌드가 작동하지 않습니다.

12 월 3 일에 .NET Framework 4.5.1에 ​​대한 업데이트가 있는데 그게 이유일까요?

Brgds

조나스


0

나는 최근에 같은 문제에 봉착했습니다. 그리고 내 결론은 모든 버전의 VS (v10, v11, v12)가 MSBuildBinPath.

따라서 올바른 버전의 파일이 설치되어 있지 않을 수도 있으므로 정확한 버전의 VS를 지정하는 것은 해킹이 아닙니다. 따라서 매개 변수를 지정하고 컴퓨터에있는 대상을 사용하는 것이 좋습니다.

드문 경우지만 특정 버전의 VS 및 Web Deploy 패키지를 설치해야 할 수도 있습니다. 제 경우에는 버전만으로도 문제를 해결할 수있었습니다.


0

다음과 같이 VisualStudioVersion 속성을 추가 할 수 있습니다.

<ItemGroup>
  <ProjectToBuild Include="$(MSBuildProjectDirectory)\..\MySolution.sln">
    <Properties>Configuration=$(BuildConfiguration);WarningLevel=0;VisualStudioVersion=12.0</Properties>
  </ProjectToBuild>
</ItemGroup>
<MSBuild Projects="@(ProjectToBuild)" Targets="Rebuild"/>

0

이 문제를 해결하는 방법을 찾고있을 때 거의 모든 사람들이 누락 된 MSBUILD 폴더를 복사하거나 일부 버전의 SDK를 설치하도록 권장했습니다.

운 좋게도 Donovan Brown이 작성한이 매우 유용한 게시물을 찾았습니다. http://donovanbrown.com/post/So-sick-of-MicrosoftWebApplicationtargets-was-not-found-build-errors!

간단히 말해, 빌드 정의에서 빌드가 사용해야하는 VisualStudio 버전을 구성하는 것이 아이디어입니다.

오른쪽 클릭-> "빌드 정의 편집 ..."

"Procss"-> "3. Advanced"로 이동합니다.

"MSBuild Arguments"를

/p:VisualStudioVersion=12.0

VS2019에서 "빌드 정의 편집 ..."을 찾을 수 없음
Laser42
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.