MSBuild를 실행하면 SDKToolsPath를 읽을 수 없습니다.


130

Howdy, VS2008 및 관련 도구로 컴파일 할 때 .Net 2.0 기반 웹 사이트를 올바르게 빌드하는 데 사용되는 NAnt 스크립트를 실행하는 데 약간의 문제가 있습니다. 최근에 모든 프로젝트 / 솔루션 파일을 VS2010으로 업그레이드했으며 이제 다음 오류와 함께 빌드가 실패합니다.

[exec] C : \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Microsoft.Common.targets (2249,9) : 오류 MSB3086 : S dkToolsPath ""또는 레지스트리를 사용하여 "sgen.exe"를 찾을 수 없음 "HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v7.0A"키. SdkToolsPath가 설정되어 있고 도구가 SdkToolsPath 아래의 올바른 프로세서 특정 위치에 있고 Microsoft Windows SDK가 설치되어 있는지 확인하십시오.

이제 빌드 서버에 이전 버전 (.Net 3.5)의 Windows SDK가 설치되어 있고 전체 .Net 4.0 프레임 워크가 설치되어 있지만 .Net 4.0 특정 버전의 Windows SDK에서는 실행되지 않았습니다.

약간의 실험과 연구 끝에 마침내 새로운 환경 변수 "SDKToolsPath"를 설정하고 Windows 6.0 sdk 폴더의 sgen.exe 복사본을 가리 켰습니다. 동일한 오류가 발생했지만 SDKToolsPath 환경 변수가 설정되어 있지만 (명령 행에서 "echo"할 수 있고 예상 값이 있음을 확인했지만) 오류 메시지가 나타납니다. 읽을 수 없습니다 (빈 따옴표에 유의하십시오).

내가 찾은 대부분의 정보는 .Net 3.5 또는 이전 버전입니다. 아직 4.0과 관련이 없습니다. 오류 코드 MSB3086을 검색해도 유용한 정보가 없습니다. 이것이 무엇인지 알 수 있습니까?

스캇


이 게시물의 관련 문제 나는 거기에도 답을 올렸다. stackoverflow.com/questions/1109955/…
Diego C.

답변:


15

이 문제를 해결하려면 총알을 물고 빌드 서버에 VS 2010을 설치해야했습니다. 내가 볼 수있는 한 MSDN의 어느 곳에서나 사용할 수있는 7.0A 버전의 Windows SDK는 없습니다. 그러나 VS 2010을 설치하면 설치되어 Program Files \ Microsoft SDKs \ Windows에 7.0A regkey와 7.0A 폴더가 생성됩니다.


9
서버에 Visual Studio 2010을 설치하지 않는 것이 좋습니다. 현재 Windows SDK를 v7.1로 설정하는 아래 Simmo의 제안을 선호합니다. WindowsSdkVer.exe는 C : \ Program Files \ Microsoft SDKs \ Windows \ v7.1 \ Setup에 있습니다 (C : \ Program Files에 설치된 것으로 가정).
Philippe

55
Windows SDK 7.1 및 .NET 4.0 만 설치하면됩니다. MSBuild는 SDK40ToolsPath 및 SDK35ToolsPath에 대한 올바른 경로를 설정하지 않습니다. 이 문제를 해결하려면 HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ MSBuild \ ToolsVersions \ 4.0에서 몇 가지 항목을 변경해야했습니다. "SDK40ToolsPath"= "$ (레지스트리 : HKEY_LOCAL_MACHINE \\ SOFTWARE \\ Microsoft \\ Microsoft SDKs \\ Windows \\ v7 .1 \\ WinSDK-NetFx40Tools-x86 @ InstallationFolder) "마찬가지로 SDK35ToolsPath 및 FrameworkSDKRoot에서"v7.0A "를"v7.1 "로 변경하십시오.
BlueMonkMN

7
Sheesh-나는 다시 같은 문제를 겪었고 그것을 구글 검색하고 내 자신의 대답을 찾았다! :) 어떤 것이 변경 사항을 재설정 한 것으로 보이며 수동으로 다시 적용해야합니다.
BlueMonkMN

3
아가! 최신 .NET 4.0 패치 (2011-08-11)가 이러한 레지스트리 설정을 덮어 썼습니다!
si618

8
이전 답변을 업데이트하십시오. 64 비트 OS에서는 HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ MSBuild \ ToolsVersions \ 4.0에서 유사한 값을 업데이트해야 할 수도 있으며 8.0 SDK를 설치하거나 HKEY_LOCAL_MACHINE \의 값을 업데이트해야 할 수도 있습니다. SOFTWARE \ Microsoft \ MSBuild \ ToolsVersions \ 4.0 \ 11.0 및 HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ MSBuild \ ToolsVersions \ 4.0 \ 11.0 8.0 SDK 설치를 제외하고 위의 모든 작업을 수행했으며 I까지 컴파일 할 수 없었습니다. step) 모든 4.0 \ 11.0 노드에 대한 업데이트가 포함되었습니다.
BlueMonkMN

227

Visual Studio를 빌드 서버에 배치하는 데 어려움을 겪었습니다.

SDK v7.0A는 Visual Studio 2010과 함께 설치된 SDK입니다 (A는 이것이 VS 릴리스임을 나타냅니다). 그 이후로 최신 버전이 출시되었습니다. Windows 7 및 .NET Framework AKA v7.1 용 Microsoft Windows SDK .

내 빌드 서버에 이것을 설치했습니다. 그런 다음 Windows SDK 7.1 명령 프롬프트 (시작 => 모든 프로그램 => Microsoft Windows SDK 7.1)를 통해 SDK의 기본 버전을 7.1로 설정했습니다.

단계 :

cd Setup

WindowsSdkVer.exe -version:v7.1

LordHits의 의견을 포함하도록 편집하십시오 . 전체 SDK를 설치할 필요는 없습니다. ".NET 개발 / 인텔리 센스 및 참조 어셈블리"및 ".NET 개발 / 도구"옵션 만 설치하면됩니다.


4
이것은 내 VS 컴퓨터에서 C : \ Program Files \ MSBuild \ Microsoft \ Visual Studio \ v10.0 \ WebApplications로 파일을 복사하는 것과 결합하여 완벽하게 작동했습니다.
dnolan

1
나는 원래 저자와 같은 문제에 직면하고 있었고이 답변으로 해결되었습니다! 빌드 컴퓨터에 Visual Studio 2010을 설치할 필요가 없었습니다.
SolutionYogi

37
또한 명확히하기 위해 전체 SDK를 설치할 필요가 없습니다. ".NET 개발 / 인텔리 센스 및 참조 어셈블리"및 ".NET 개발 / 도구"옵션 만 설치하면됩니다. 이것은 dnolan의 의견에서 파일을 복사합니다.
LordHits

이 솔루션에 감사드립니다. 빌드 서버에서 완벽하게 작동했습니다! 참고로 궁금한 점이 있다면 빌드 서버는 Windows Server 2008 x64입니다.
Adam Weber

이 답변에 정말 감사합니다. 이것으로도 같은 문제가 발생했습니다.
Abe

20

값이 Off 인 GenerateSerializationAssemblies 매개 변수를 MsBuild에 전달하기 만하면됩니다.

msbuild.exe /p:GenerateSerializationAssemblies=Off

7
msbuild.exe / p : GenerateSerializationAssemblies = 끄기
다니엘

2
또는 웹 서비스 프로젝트 속성의 빌드 탭에서 "직렬화 어셈블리 생성 : 해제"를 설정하십시오.
samneric

6
이것이 정확히 무엇을합니까?
호감

1
GOTCHA : 빌드 탭에서 끄면 관련 빌드 구성 (빌드 탭 상단의 드롭 다운)에 대해이 작업을 수행해야합니다. 필자의 경우에는 문제가있는 빌드 서버 일 뿐이므로 '릴리스'구성에서이를 변경하십시오.
Myster

14
나는 실제로 무엇을하는지 전혀 모르고 빌드 플래그를 무작위로 전환하는 것을 좋아합니다.
AaronLS

14

빌드 서버의 MSBuild에 변수를 수동으로 전달합니다.

msbuild.exe MyProject.csproj "/p:TargetFrameworkSDKToolsDirectory=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools" "/p:AspnetMergePath=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools"

1
이것이 Visual Studio 및 Build Tools 2019가없는 서버에서 Windows 10 SDK에 대해 수행 한 결과입니다. 다른 솔루션은 도움이되지 않았으며 깨끗한 방법으로 트릭을 수행했습니다.
Nicolás Fantone

8

최근 빌드 서버에서 비슷한 문제가 발생했습니다.

내 컴퓨터 (VS2010이 설치된)의 7.0A 폴더 (C : \ Program Files \ Microsoft SDKs \ Windows \ 7.0A)를 동일한 위치의 빌드 서버로 복사했습니다.

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v7.0A 레지스트리 키를 만든 후 InstallationFolder를 C : \ Program Files \ Microsoft SDKs \ Windows \ 7.0A로 설정하십시오.

빌드 서버에서 레지스트리로 수행 할 작업에 대해 혼동되는 경우 VS2010이 이미 설치된 시스템에서 레지스트리를 참조 할 수도 있습니다.


나를 위해 Simmo의 대답이 효과가 없었습니다.이 레지스트리 해킹은 (Win 2K3 SP2)을 수행했습니다.
FinnNk

7

VS 2010 Express 를 사용하고 Simmo의 답변 을 사용 하여 SDK 버전을 명시 적으로 설정 하려고 시도 했지만 동일한 오류가 발생 했습니다. ).

Win 7 Prof에서 VS 2010 Express를 사용하고 있으며 항상 필요한 모든 exe가없는 Win SDK v7.0A를 사용하고 싶습니다. 현재 사용중인 버전을 명시 적으로 지정했는지는 중요하지 않습니다. WindowsSdkVer.exe (2010 Ex 만 설치되었지만 VS 2008 용으로 현재 버전의 SDK를 설정 한 것으로 계속보고합니다.)

그래서 싼 해결책 은 v7.0 WIN SDK (또는 v7.1과 같은 다른 버전)를 설치 하고 파일 시스템 폴더의 이름을 v7.0A로 바꾸는 것이 었습니다 . 기본적으로 VS 2010 Express에 거짓말했지만 지금은 작동합니다!


5

프로젝트 중 하나가 sgen.exe (서버 생성기)를 사용하여 웹 서비스를 생성합니다. 서버를 빌드하거나 프로젝트에서 웹 서비스 참조를 제거하려면 SDK를 설치해야합니다.


1
또는 웹 서비스 프로젝트 속성의 빌드 탭에서 "직렬화 어셈블리 생성 : 해제"를 설정하십시오.
samneric

1
GOTCHA : 빌드 탭에서 끄면 관련 빌드 구성 (빌드 탭 상단의 드롭 다운)에 대해이 작업을 수행해야합니다. 필자의 경우에는 문제가있는 빌드 서버 일 뿐이므로 '릴리스'구성에서이를 변경하십시오.
Myster

4

대상 파일이 도구 경로를 재정의하고 있다고 생각합니다.이 파일을 빠르게 살펴보고 거기의 일부 대상에서 SDKToolsPath를 $ TargetFrameworkSDKToolsDirectory로 설정합니다. 어쨌든 환경에서 이것을 설정해야한다고 생각하지는 않지만 프로젝트 파일에서 수정해야 할 수도 있습니다.

이 페이지에 따르면 http://nant.sourceforge.net/ Nant는 .Net 4.0을 지원하지 않습니다. 이것이 실제 문제 일 수 있습니까?

죄송합니다, 이것이 실제로 귀하의 질문에 대답하지 못한다는 것을 알고 있습니다.


맞습니다. NAnt는 아직 VS2010에 대한 프로젝트 / 솔루션 파일 형식을 지원하지 않으므로 실제 컴파일 단계를 위해 MSBuild를 호출합니다. 대상 파일을 체크 아웃합니다.
Scott Mayfield

4

새로운 Windows 10 컴퓨터에서 같은 문제가 발생했습니다. 내 설정 :

  • 윈도우 10
  • Visual Studio 2015 설치
  • Windows 10 SDK

그러나 .NET 4.0 프로젝트를 빌드 할 수 없었습니다.

Aufgabe konnte "AL.exe"dem dem SdkToolsPath-Wert ""또는 dem registrierungsschlüssel "HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v8.0A \ WinSDK-NetFx40Tools-x86

해결 방법 : .NET 4.0 SDK도 포함되어 있기 때문에 Windows 7 SDK를 설치하려고했지만 실패한 후 Windows 8 SDK를 설치하고 ".NET Framework 4.5 SDK"가 설치되어 있는지 확인해야합니다.

미쳤지 만 ... 효과가있었습니다.


이것은 Windows 10에서도 정확하게 도움이되었습니다.
bourbert

3

실제로 SDK 버전 7.0A가 설치되어 있지 않습니까? 해결해야 할 문제입니다. VS2010 설치 로그 파일에서 무엇이 잘못되었는지 확인하십시오. SDK는 c : \ program files \ microsoft sdks \ windows \ 7.0a에 있어야하며 나열된 레지스트리 키도 있어야합니다. 6.0a 버전의 sgen.exe로 실행하는 것은 좋지 않습니다. 잘못된 컴파일러를 사용해야합니다.


1
이 서버는 빌드 서버이므로 완전한 VS2010 환경을 설치하는 것이 나의 첫 선택이 아니었다는 것을 기억하십시오.
Scott Mayfield

3
문제가 보이지 않습니다. 구성이 설정된 머신에서 빌드를 실행하면 개발 머신과 일치하지 않습니다. 이는 빨리 마모되는 문제입니다.
Hans Passant

3

설치 디렉토리 이외의 위치를 ​​지정 Sdk40ToolsPath하지 말고 설정하십시오 SdkToolsPath.

SDK를 설치하지 않고 빌드 시스템에 도구를 xcopi하여 일반적인 레지스트리 키가 없기 때문에 AL.exe와 비슷한 문제가 발생했습니다. 진단 출력 (/ verbosity : diagnostic)으로 빌드를 실행하고 Sdk40ToolsPath, Sdk35ToolsPath 및 SdkToolsPath와 같은 몇 가지 SDK 도구 경로가 정의되어 있음을 알았습니다. 적절한 SDK 버전의 bin 폴더를 가리 키도록 Sdk40ToolsPath를 설정하면 문제가 해결되었습니다.


Sdk40ToolsPath를 어디에 설정 했습니까?
Michael Freidgeim

환경 경로에 추가해야한다고 가정합니다. 그러나 그것은 나를 위해 작동하지 않았습니다.
Timothy Lee Russell

오래 전에 죄송하지만 세부 정보를 잊어 버렸지 만 환경 변수이거나 MSBuild 프로젝트 파일에 설정된 것 같습니다. 또한 원래 질문은 .NET Framework 4.0 / VS2010과 관련이 있지만 이후 프레임 워크 버전에는 다른 변수가 필요할 수 있습니다.
IanS

2

IanS의 답변에 동의합니다. 새로운 SDK를 설치할 필요가 없습니다. 레지스트리 키 값 SDK35ToolsPath 및 MSBuild 용 SDK40ToolPath가 올바른 레지스트리 키 값을 가리키고 있는지 확인하십시오.

필자의 경우 내 프로젝트는 .NET 3.5를 대상으로했으며 HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ MSBuild \ ToolsVersions \ 4.0의 SDK35ToolsPath를 $ (Registry : HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v6.0A \로 설정해야했습니다. WinSDKNetFxTools @ InstallationFolder). 그리고 모든 것이 효과가있었습니다.


2

우리는 winXP 빌드 PC를 가지고 있으며 Visual Build Pro 6을 사용하여 소프트웨어를 빌드합니다. 일부 개발자가 VS 2010을 사용하기 때문에 프로젝트 파일에 이제 "도구 버전 4.0"에 대한 참조가 포함되어 있으며, 내가 말할 수있는 것은 Visual Build에서 .NET 3.5 용으로 만 빌드하더라도 sdk7.x를 찾아야한다는 것을 나타냅니다. . 이로 인해 lc.exe를 찾을 수 없었습니다. PC에 설치된 VS2008과 함께 제공된 6.0A SDK를 모든 매크로를 가리켜 서 속이려고했지만 작동하지 않았습니다.

결국 SDK 7.1을 다운로드하여 설치하여 작동하게했습니다. 그런 다음 7.0A에 대한 레지스트리 키를 작성하고 설치 경로를 7.1 SDK의 설치 경로로 지정했습니다. 이제 행복하게 호환되는 "lc.exe"를 찾고 모든 코드가 정상적으로 컴파일됩니다. VS2010이 설치되어 있지 않아도 .NET 4.0 코드를 컴파일 할 수 있다는 느낌이 들지만 아직 시도하지 않았습니다.


2

ToolsVersion = "4.0"은 내 MSBuild 프로젝트에서 나를 위해 수행합니다.

<Project DefaultTargets="Do" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

글쎄, 내 경우에는 내가 VS 2015 ToolsVersion = "14.0"를 사용하고이 문제 해결
AndrewSilver

2

먼저 dotNetFx40_Full_x86_x64.exe를 이미 다운로드하고 설치했는지 확인하십시오 (일반적으로 Visual Stdio와 바인딩 됨).

그런 다음 시스템 변수에서 새로운 환경 변수를 빠르게 설정하십시오. 아래처럼 : "TargetFrameworkSDKToolsDirectory":"C:\Program Files (x86)\Microsoft SDKs\Windows\vxx.0A\bin\NETFX 4.6.1 Tools" //note:the path:'\vxx.0A\' is a variable indicating your version. it's '\v10.0A\' for me.


이것은 문제를 해결하는 것입니다. 누군가가 I과 동일한 문제가있는 경우 힌트를 제공합니다 .Env 변수는 SdkToolsPath가 아닌 TargetFrameworkSDKToolsDirectory 여야합니다!
Markus

1

나는이 같은 문제가 있었고 Windows SDK 7.0과 Windows SDK 7.1을 설치했지만 문제가 해결되지 않았습니다. 나에게 문제의 원인은 문제 클래스 라이브러리가 .NET Framework 2.0의 대상 프레임 워크로 빌드 되었기 때문입니다.

.NET Framework 4.0으로 변경하고 로컬에서 작업했으며 빌드 서버에서 체크인하면 성공적으로 빌드되었습니다.


1

나는 비슷한 문제가 있었다, 특히 msbuild를 실패 MSB3086, MSB3091 : "를 AL.exe를", "resgen.exe는"을 (를) 찾을 수 없습니다

64 비트 Windows 7 컴퓨터에서 .Net framework 4.5.1과 Windows 8.1 용 Windows SDK를 설치했습니다.

SDK 설정에서 최신 버전이라고 말했지만 그렇지 않은 것 같습니다. 설치된 모든 버전의 SDK를 제거한 다음 다음 순서대로 설치하여 문제를 해결했습니다.

http://www.microsoft.com/en-us/download/details.aspx?id=3138

http://www.microsoft.com/en-us/download/details.aspx?id=8279

http://msdn.microsoft.com/en-us/windows/desktop/hh852363.aspx

http://msdn.microsoft.com/en-us/windows/desktop/aa904949.aspx


1

짧은 대답 : .csproj 파일에는 SGenToolPath를 사용하여 sgen.exe의 경로를 지정하는 방법이 있습니다.

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">
  <PropertyGroup>
    <SGenToolPath>C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools</SGenToolPath>
  </PropertyGroup>

경로는 다를 수 있지만 SGenToolPath가 원하는 것입니다.

다른 일반적인 MSBuild 프로젝트 속성 목록은 https://msdn.microsoft.com/en-us/library/bb629394.aspx를 참조하십시오.

빌드 서버에서 레지스트리 값을 편집하는 대신 .csproj 파일에서이 SGenToolPath 설정을 사용했습니다. 로컬 컴퓨터에서 레지스트리 값을 편집해도 효과가 있었지만 조금 더 복잡하여 빌드 서버의 레지스트리를 망가 뜨리고 싶지 않았습니다.

레지스트리의 경우 : 문제는 HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ MSBuild 아래의 SDK40ToolsPath가 레지스트리 값 $ (레지스트리 : HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v8.0A를 가리키고 있다는 것입니다. 존재하지 않는 \ WinSDK-NetFx40Tools-x86 @ InstallationFolder). 방금 실제 경로로 직접 대체했습니다.


1

나도 엉망인 직장 컴퓨터에서 Visual Studio 2017을 사용하여 플러그인을 만들려고 할 때이 문제가 발생했습니다. 인터넷에서 "resgen.exe를 찾을 수 없습니다"를 검색하면 ' regedit를 사용하여 Windows 레지스트리를 편집하고 여기에 새 키를 만들고이 폴더의 내용을 복사하여 붙여 넣는 것과 같은 모든 조언을 찾을 수 있습니다. 이 다른 폴더, blah blah blah. '

regedit로 Windows 레지스트리를 엉망으로 만드는 데 몇 주가 걸렸을 것입니다. 아마도 수십 개의 하위 키를 추가하고 ResGen.exe를 여러 다른 디렉토리에 복사하여 때로는 'bin'폴더에 넣고 때로는 메인 폴더에 보관합니다. 기타

결국 "저는 Visual Studio에 더 자세한 오류 메시지가 표시되면 문제가되지 않습니다"라고 깨달았습니다. 따라서 오류에 대한 자세한 내용을 얻으려면 명령 줄에서 * .csproj 파일에서 MSBuild.exe를 직접 실행했습니다 .

 "C:/Windows/Microsoft.NET/Framework/v4.0.3.0319/MSBuild.exe C:/Users/Todd/Plugin.csproj -fl -flp:logfile="C:/Users/Todd/Desktop/error_log.log";verbosity=diagnostic"

물론 상황에 맞게 경로 세부 정보를 변경해야하지만 1) MSBuild.exe의 전체 경로 2) * .csproj 파일의 전체 경로 3) -fl -flp : logfile = 부분, MSBuild가 프로세스에서 수행 한 각 단계의 로그 파일을 작성하도록 지시합니다. 4) * .log 파일을 저장하려는 위치와 5); verbosity = diagnostic, 기본적으로 MSBuild에 지시합니다. * .log 파일에 TONS 세부 사항을 포함합니다.

이렇게하면 빌드가 항상 실패하지만 MSBuild가 ResGen.exe 파일을 찾은 위치정확하게 나타내는 * .log 파일이 남게됩니다. 필자의 경우 * .log 파일의 맨 아래 근처에서 다음을 발견했습니다.

Compiling plug-in resources (Task ID:41)
Looking in key SOFTWARE\WOW6432Node\Microsoft\Microsoft SDKs\NETFXSDK\4.6.2\WinSDK-NetFx40Tools-x86 (Task ID:41)
Looking in key SOFTWARE\WOW6432Node\Microsoft\Microsoft SDKs\NETFXSDK\4.6.1\WinSDK-NetFx40Tools-x86 (Task ID:41)
Looking in key SOFTWARE\WOW6432Node\Microsoft\Microsoft SDKs\NETFXSDK\4.6\WinSDK-NetFx40Tools-x86 (Task ID:41)
Looking in key SOFTWARE\WOW6432Node\Microsoft\Microsoft SDKs\Windows\v8.1a\WinSDK-NetFx40Tools-x86 (Task ID:41)
Looking in key SOFTWARE\WOW6432Node\Microsoft\Microsoft SDKs\Windows\v8.0a\WinSDK-NetFx40Tools-x86 (Task ID:41)
MSBUILD: error : Failed to locate ResGen.exe and unable to compile plug-in resource file "C:/Users/Todd/PluginResources.resx"

따라서 기본적으로 MSBuild는 ResGen.exe에 대해 5 개의 별도 디렉터리 를 찾은 다음 포기했습니다. 이것은 Visual Studio 오류 메시지에서 얻을 수없는 종류의 세부 사항이며 문제를 해결합니다. 간단히 regedit를 사용하여 다섯 위치 중 하나에 대한 키를 만듭니다. "InstallationFolder"값을 키에 넣습니다. 이 파일은 ResGen.exe가있는 폴더를 가리켜 야합니다 (내 경우에는 "C : \ Program Files \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.7.2 도구").

컴퓨터에 배경 지식이없는 나와 같은 인문학을 전공한다면 Windows 레지스트리에서 지옥을 편집하고 다음과 같은 오류가 발생했을 때 ResGen.exe를 복사하여 붙여 넣기 만하면됩니다. 물론, 나쁜 습관). 1) * .csproj 파일에서 직접 MSBuild.exe를 실행하여 MSBuild가 ResGen.exe를 찾는 정확한 위치를 찾은 다음 2) MSBuild가 ResGen을 찾을 수 있도록 Windows 레지스트리를 정확하게 편집하십시오. exe.


나는 이것을 시도했지만 어떤 이유로 당신이 표시하는 경로 목록을 얻지 못했습니다. 이 사이트에 당신과 비슷한 게시물을 발견 : community.sdl.com/developers-more/developers/... 나는 그것이 작동한다는 것을 알 수 있도록하지만, 아무 소용이 있습니다. 어떤 MSBuild 버전을 사용하고 있습니까?
user11809641

MSBuild 버전 4.0.30319를 사용하고있는 것 같습니다. 이 컴퓨터에 버전 3.5, 3.0 및 2.0.50727도 설치되어 있습니다. 내 * .csproj 파일에서 위의 MSBuild 버전을 실행하려고했지만 (위에서 설명한 것과 같은 방식으로) 작동하지 않았습니다. *. log 파일을 만들지도 않았습니다. /// * .csproj 파일에서 MSBuild를 실행할 때 컴퓨터가 최소한 * log 파일을 생성합니까? 내 이해는 로그 파일이 있다는 것입니다. ResGen.exe를 찾을 때 검색된 경로와 관련된 특정 정보는 없습니다. 맞습니까?
todbott

동일한 버전의 MSBuild (4.0.30319)가있는 것 같습니다. 네, 그렇습니다. 로그 파일을 받고 있지만 레지스트리 경로에 대한 정보를 제공하지 않습니다. 위에 게시 한 5 가지 경로 중 어느 것을 사용하셨습니까?
user11809641

목록의 첫 번째 경로를 사용했습니다. SOFTWARE \ WOW6432Node \ Microsoft \ Microsoft SDKs \ NETFXSDK \ 4.6.2 \ WinSDK-NetFx40Tools-x86 키에 "InstallationFolder"가 추가되었습니다. 또한 * .log 파일은 실제로 매우 긴 줄입니다. 제 경우에는 수천 줄입니다. 육안으로 경로 정보를 찾을 수 없습니다. 메모장에서 * .log 파일을 열고 "ResGen.exe"를 검색하여 관련 영역 (경로 정보)을 주목했습니다.
todbott

1
축하합니다! 오류와 수수께끼로 싸워 실제로 Trados 용 플러그인을 성공적으로 컴파일 한 소수의 사람들 (수백 명, 추측 할 것입니다) 중 하나가되었습니다. 플러그인 출판에 행운을 빕니다. SDL 앱 스토어에서 만나요!
todbott

1

msbuild.exe에 이것을 명령 줄 매개 변수로 전달하여 수정했습니다.

마일리지는 시스템에있는 SDK 버전에 따라 다릅니다

/p:TargetFrameworkSDKToolsDirectory="C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools

0

레지스트리 모드 외에도 Visual Studio에서 설정 한 .net sdk 버전을 변경해야 할 수도 있습니다.

이 문제가 발생하여 프로젝트 디버그 설정을 확인하기로 결정했습니다.

프로젝트 => 툴바 속성 => 디버그 사전 컴파일 옵션 버튼

대상 프레임 워크 (모든 구성)가 시스템에없는 3.0으로 설정되었습니다.

4.0으로 변경 한 다음 프로젝트와 Visual Studio 2010을 다시 시작해야했습니다.

그런 다음 프로젝트는 오류없이 빌드되고 실행되었습니다.


다음 위치에서 실수했습니다. Project => Toolbar Properties => Compil Advance Compile Options 버튼 또한 새 프로젝트를 만들었고 새 프로젝트 .net은 3.0으로 설정되었습니다. 따라서 기본 설정도 변경해야합니다. Scott A. Tovey
Scott Tovey

프로젝트를 만들 때 창 상단에 모든 프레임 워크의 드롭 다운 목록이 있다는 것을 알았습니다. 설치 여부에 관계없이 모든 것이 나열됩니다. 프레임 워크를 선택하고 해당 목록에서 프로젝트를 생성하면 새 프로젝트의 다른 프레임 워크로 변경할 때까지 기본 설정이 유지됩니다. 이것은 약간 무모합니다. 목록에는 시스템에 설치된 프레임 워크 만 포함되어야합니다.
Scott Tovey

0

나는 비슷한 문제가 있었다. 사용하여 프로젝트를 수행 한 Visual Studio 2010다음을 사용하여 컴파일 할 때 위의 오류가 발생했습니다 Visual Studio 2012. I의 단순의 모든 내용 복사 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A로를 C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A하고 내 문제를 해결했다.


3
나는 세계 최악의 해결책에 대한 투표가 있었으면 좋겠다. 이거 야.
jonypony3

0

Visual Studio 2010에서 원래 만들어졌고 Visual Studio 2010 및 TFS 2010에서 빌드 된 .sln 파일에서이 오류가 발생했습니다. 특정 구성으로 빌드되지 않아야하는 프로젝트를 빌드하지 않도록 솔루션 파일을 수정했으며 Visual Studio는 솔루션 파일의 헤더를 다음에서 변경했습니다.

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010

에:

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.24720.0
MinimumVisualStudioVersion = 10.0.40219.1

원래 2010 버전으로 다시 설정하면 문제가 해결되었습니다. Visual Studio의 이전 버전과의 호환성은 여전히 ​​완벽하지 않은 것 같습니다.


0

Visual Studio의 "수리"를 사용해보십시오. 그것은 나를 위해 일했다.


0

CMD 래퍼
나는 여기에서 더 많은 것을 시도했습니다. 아무것도 도와주지 않았습니다.

MSBuild 및 DevEnv.com에 CMD 래퍼를 적용했습니다.
이러한 래퍼 내부의 주요 아이디어는 Visual Studio 공급에서 명령 프롬프트를 호출하여 준비된 환경을 만드는 것입니다. 그런 다음 표준 입력 매개 변수를 MSBuild 또는 DevEnv.com 호출에 전달합니다.

어쨌든 이제 빌드 서버에서 다른 Visual Studio 버전의 프로젝트를 빌드 할 수 있습니다.

사용 방법
배치 파일 래퍼에 대한 호출로 MSBuild 및 DevEnv에 대한 호출을 대체해야했습니다.
그리고 입력 매개 변수를 변경하지 않았습니다. 내 MSBuild 래퍼 호출의 예 :

MsBuild_Wrapper.bat MySolution.sln /target Build /property:Configuration=Release

준비된 솔루션
실제로 VS 2010에서 VS 2015 로의 마이그레이션으로 인해 더 많은 문제가 발생했습니다.
그래서 빌드 서버에 대한 저의 적당한 구조 레시피 가 여기 있습니다. 아마도이 모든 CMD 스타일을 처음부터 이해하기는 어렵지만 어떤 논리도 분명합니다.

힌트
가 있습니다
MSBuild Command Prompt for Visual StudioDeveloper Command Prompt for Visual Studio
나는 MSBuild를하고 DevEnv.com을 위해 적절하게 사용합니다. 그러나 아마도 MSBuild 명령 프롬프트로 충분할 것입니다.

VS 2015의 경우 해당 명령 프롬프트가 여기에 있습니다. C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\ . 또는 Windows 프로그램 메뉴를 살펴보십시오.

내가 사용한 배치 파일 내에서 모든 입력 매개 변수를 MSBuild 또는 DevEnv에 전달하려면 CALL MSBuild %*

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