我在将Roslyn与VS2017配合使用时遇到的问题及解决方法的日志:
为什么空的VS2017项目变得可见是因为MSBuildWorkspace WorkspaceFailed事件被钩入了。
第一轮失败是:
MSB0001:内部MSBuild错误:Microsoft.Build.Utilities.ToolLocationHelper的类型信息在白名单缓存中存在,例如Microsoft.Build.Utilities.ToolLocationHelper,Microsoft.Build.Utilities.Core,Version = 15.1.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a ,但无法加载该类型。意外为空])
通过安装NuGet包Microsoft.Build.Locator 1.1.2和Microsoft.Build.Utilities.Core 15.9.20来解决此问题
第二轮失败是:
Msbuild在处理文件'C:\ Users ... vbproj'时失败,消息如下:
C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Enterprise \ MSBuild \ 15.0 \ Bin \ Microsoft.Common.CurrentVersion.targets:(1491,5):
任务“Microsoft.Build.Tasks.AssignProjectConfiguration”无法从程序集Microsoft.Build.Tasks.Core、Version=15.1.0.0、Culture=neutral、PublicKeyToken=b03f5f7f11d50a3a中加载。
无法加载文件或程序集'Microsoft.Build.Tasks.Core、Version=15.1.0.0、Culture=neutral、PublicKeyToken=b03f5f7f11d50a3a'或它的某个依赖项。
系统找不到指定的文件。请确认声明正确,程序集及其所有依赖项可用,并且任务包含实现Microsoft.Build.Framework.ITask的公共类。])
通过添加NuGet Microsoft.Build.Tasks.Core 15.9.20来解决此问题
第三轮失败是:
=== Msbuild在处理文件'C:\ Users ... vbproj'时失败,消息如下:
C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Enterprise \ MSBuild \ 15.0 \ Bin \ Microsoft.Common.CurrentVersion.targets:(1657,5):
无法从程序集“C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Enterprise \ Common7 \ IDE \ CommonExtensions \ Microsoft \ NuGet \ NuGet.Build.Tasks.dll”实例化“GetReferenceNearestTargetFrameworkTask”任务。
请验证任务程序集是使用与计算机上安装的Microsoft.Build.Framework程序集相同的版本构建的,
并且您的主机应用程序没有缺少Microsoft.Build.Framework的绑定重定向。
无法将类型为'NuGet.Build.Tasks.GetReferenceNearestTargetFrameworkTask'的对象转换为类型'Microsoft.Build.Framework.ITask'。)
请注意项目的Microsoft.Build.Framework.dll = 15.1.0.0但消息提到了“MSBuild \ 15.0 \ Bin”
添加到app.config - 解决了!cf 链接在此 我现在可以从VS2017解决方案中加载项目。
<dependentAssembly>
<assemblyIdentity name="Microsoft.Build.Framework" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-15.1.0.0" newVersion="15.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Build" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-15.1.0.0" newVersion="15.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Build.Utilities.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-15.1.0.0" newVersion="15.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Build.Tasks.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-15.1.0.0" newVersion="15.1.0.0" />
</dependentAssembly>