Visual Studio for Mac添加Web引用失败:需前台线程调用DotNetProject_Modified
解决Visual Studio for Mac添加Web引用时的前台线程错误
问题描述
我按以下步骤尝试添加Web服务引用:
- 右键点击项目
- 选择“添加Web引用”
- 粘贴WSDL端点地址
点击“确定”时弹出错误提示:
无法添加Web引用:'DotNetProject_Modified'必须在前台线程调用。
我的环境配置:
- Visual Studio for Mac 版本7.5(build 1254)
- NuGet版本4.3.1.4445
- .NET Core运行时版本2.0.5、2.0.0
完整错误日志:
ERROR [2018-05-12 14:00:46Z]: The web reference could not be added System.InvalidOperationException: 'DotNetProject_Modified' must be called on the foreground thread. at Microsoft.CodeAnalysis.Razor.ForegroundDispatcher.AssertForegroundThread (System.String caller) [0x0001f] in C:\BuildAgent\work\9f4c49cb464f2a60\src\Microsoft.CodeAnalysis.Razor.Workspaces\ForegroundDispatcher.cs:24 at Microsoft.VisualStudio.Mac.LanguageServices.Razor.ProjectSystem.RazorProjectHostBase.DotNetProject_Modified (System.Object sender, MonoDevelop.Projects.SolutionItemModifiedEventArgs args) [0x0000e] in C:\BuildAgent\work\9f4c49cb464f2a60\src\Microsoft.VisualStudio.Mac.LanguageServices.Razor\ProjectSystem\RazorProjectHostBase.cs:124 at (wrapper delegate-invoke) <Module>.invoke_void_object_SolutionItemModifiedEventArgs(object,MonoDevelop.Projects.SolutionItemModifiedEventArgs) at MonoDevelop.Projects.SolutionFolderItem.OnModified (MonoDevelop.Projects.SolutionItemModifiedEventArgs args) [0x00016] in /Users/builder/data/lanes/5965/498923ea/source/monodevelop/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/SolutionFolderItem.cs:452 at MonoDevelop.Projects.Project.OnModified (MonoDevelop.Projects.SolutionItemModifiedEventArgs args) [0x0001a] in /Users/builder/data/lanes/5965/498923ea/source/monodevelop/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/Project.cs:408 at MonoDevelop.Projects.SolutionFolderItem.NotifyModified (System.String hint) [0x00000] in /Users/builder/data/lanes/5965/498923ea/source/monodevelop/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/SolutionFolderItem.cs:439 at MonoDevelop.Projects.Project.OnItemsAdded (System.Collections.Generic.IEnumerable`1[T] objs) [0x00075] in /Users/builder/data/lanes/5965/498923ea/source/monodevelop/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/Project.cs:2337 at MonoDevelop.Projects.DotNetProject.OnItemsAdded (System.Collections.Generic.IEnumerable`1[T] objs) [0x00030] in /Users/builder/data/lanes/5965/498923ea/source/monodevelop/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/DotNetProject.cs:1767 at MonoDevelop.Projects.Project+DefaultMSBuildProjectExtension.OnItemsAdded (System.Collections.Generic.IEnumerable`1[T] objs) [0x00000] in /Users/builder/data/lanes/5965/498923ea/source/monodevelop/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/Project.cs:4636 at MonoDevelop.Projects.ProjectExtension.OnItemsAdded (System.Collections.Generic.IEnumerable`1[T] objs) [0x00000] in /Users/builder/data/lanes/5965/498923ea/source/monodevelop/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/ProjectExtension.cs:266 at MonoDevelop.Projects.ProjectExtension.OnItemsAdded (System.Collections.Generic.IEnumerable`1[T] objs) [0x00000] in /Users/builder/data/lanes/5965/498923ea/source/monodevelop/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/ProjectExtension.cs:266 at MonoDevelop.Projects.ProjectExtension.OnItemsAdded (System.Collections.Generic.IEnumerable`1[T] objs) [0x00000] in /Users/builder/data/lanes/5965/498923ea/source/monodevelop/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/ProjectExtension.cs:266 at MonoDevelop.Projects.ProjectExtension.OnItemsAdded (System.Collections.Generic.IEnumerable`1[T] objs) [0x00000] in /Users/builder/data/lanes/5965/498923ea/source/monodevelop/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/ProjectExtension.cs:266 at MonoDevelop.Projects.ProjectExtension.OnItemsAdded (System.Collections.Generic.IEnumerable`1[T] objs) [0x00000] in /Users/builder/data/lanes/5965/498923ea/source/monodevelop/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/ProjectExtension.cs:266 at MonoDevelop.Projects.ProjectExtension.OnItemsAdded (System.Collections.Generic.IEnumerable`1[T] objs) [0x00000] in /Users/builder/data/lanes/5965/498923ea/source/monodevelop/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/ProjectExtension.cs:266 at MonoDevelop.Projects.ProjectExtension.OnItemsAdded (System.Collections.Generic.IEnumerable`1[T] objs) [0x00000] in /Users/builder/data/lanes/5965/498923ea/source/monodevelop/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/ProjectExtension.cs:266
原因分析
这是Visual Studio for Mac 7.5版本中Razor语言服务的已知bug:添加Web引用触发项目修改事件时,Razor相关代码试图在后台线程执行必须在前台UI线程运行的操作,导致断言失败抛出错误。
解决方案
按优先级推荐以下几种解决办法:
升级Visual Studio for Mac到最新版本
Microsoft在后续版本(比如8.0及以上)中修复了这个Razor线程问题,升级后可以彻底避免该错误,这是最根本的解决方式。临时禁用Razor语言服务(紧急场景)
如果暂时无法升级,可尝试临时禁用Razor相关服务:- 打开IDE偏好设置(
Visual Studio > Preferences) - 导航到
Text Editor > Source Code - 找到Razor相关选项,取消勾选启用,重启IDE后再尝试添加Web引用。完成操作后可重新启用该服务。
- 打开IDE偏好设置(
使用.NET CLI命令添加服务引用
绕开IDE的UI问题,直接用命令行工具添加:dotnet svcutil <你的WSDL端点URL>执行命令后,生成的服务引用文件会自动添加到项目中,后续可在IDE中正常使用。
手动迁移服务引用文件
也可以在Windows环境下用Visual Studio添加Web引用,生成对应的.cs文件和配置项,再将这些文件复制到Mac上的项目中,手动配置相关引用和设置。
内容的提问来源于stack exchange,提问作者Cristian Kumul
相关产品推荐
相关产品推荐

