VisualC++ Project System Package 正しく読み込まれませんでした

 

blogs.yahoo.co.jp

リンク先クローズしたので記載内容転記

Visual Studio 2015 Community版をインストールし、Visual C++のモジュール追加後、いきなり下記のエラーが出て、プロジェクトを作成できない。
 
イメージ 1
最悪だ。仕方なく「ActivityLog.xml」を見ると、下記の出力内容

LegacySitePackage failed for package [Visual C++ Project System Package]Source: 'Microsoft.VisualStudio.ProjectSystem.Utilities.v14.0' Description: MSBuild に "VCTargetsPath" プロパティの値が含まれていません。
Microsoft.VisualStudio.ProjectSystem.ProjectException: MSBuild に "VCTargetsPath" プロパティの値が含まれていません。 場所
Microsoft.VisualStudio.ProjectSystem.Utilities.ProjectErrorUtilities.ThrowProjectExceptionHelper(Exception innerException, String unformattedMessage, Object[] args) 場所
Microsoft.VisualStudio.ProjectSystem.Utilities.ProjectErrorUtilities.ThrowProjectException(String message) 場所
Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCPlatformExtensionService.<GetInstalledPlatformsAsync>d__13.MoveNext() --- 直前に例外がスローされた場所からのスタック トレースの終わり --- 場所
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 場所
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 場所
Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCProjectEngineShim.<ReadInstalledPlatformsAsync>d__242.MoveNext() --- 直前に例外がスローされた場所からのスタック トレースの終わり --- 場所
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 場所
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 場所
Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCProjectEngineShim.<>c__DisplayClass55_0.<<Initialize>b__0>d.MoveNext() --- 直前に例外がスローされた場所からのスタック トレースの終わり --- 場所
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 場所
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 場所
Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.ApartmentMarshaler.<>c__DisplayClass7_0.<<Invoke>b__0>d.MoveNext() --- 直前に例外がスローされた場所からのスタック トレースの終わり --- 場所
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 場所 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 場所 Microsoft.VisualStudio.Threading.JoinableTask.CompleteOnCurrentThread() 場所
Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.ApartmentMarshaler.Invoke(Func`1 method) 場所
Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCProjectEngineShim.Initialize(IntPtr instResources, Object sp, Object browser, IVCBuildPackageInternal bldPkg)

 
はっきり言って良くわからない。とりあえず、「VCTargetsPath」っていう環境変数かプロパティ、レジストリが設定されいないからダメって感じぐらい。
ネットで検索したら、下記の投稿が手掛かりになりそうなので、参考に自分で試行錯誤してみた。
 
 
どうやら「VCTargetsPath」の設定場所は、レジストリですなぁ。
手掛かりからすると、下記の2箇所が該当すると推測できる。
・HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0
・HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSBuild\ToolsVersions\14.0
 
...で、レジストリエディタで見てみると、Wow6432Node側キーには「VCTargetsPath」のレジストリがない。
とりあえず、32bit側と同じ下記のレジストリを追加してみた(横線囲み内をテキストファイル「xxx.reg」として保存して、ファイルをダブルクリックすればレジストリ追加できます)。

Windows Registry Editor Version 5.00
 
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSBuild\ToolsVersions\14.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V140\\'))"
"VCTargetsPath10"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath10)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V110\\'))"
"VCTargetsPath12"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath12)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V120\\'))"
"VCTargetsPath14"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath14)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V140\\'))"
 

64bit側の設定なのに「MSBuildExtensionsPath32」が混じっているのが気になるが、インストールしたVisual Studioには64bitのバイナリ等は含まれてなかったので無視。
 
うん、うまく行った!
原因とかはどうでもいいや、これでVisual C++を使えるようになって良かった。