通过UiPath Assistance运行自动化时遇XamlObjectWriterException错误
嘿,我看你在运行UiPath自动化时碰到了这个头疼的元数据缓存错误,核心原因是项目没法识别Microsoft.Identity.Client.IPublicClientApplication这个类型,大概率是依赖包没配置对。下面我一步步帮你解决:
先理清楚错误本质
这个System.Xaml.XamlObjectWriterException异常,说白了就是XAML解析器找不到IPublicClientApplication类型的定义——要么是没装对应的MSAL(Microsoft Authentication Library)包,要么是引用配置出了问题,导致缓存活动元数据的时候直接报错。
你的完整错误信息
活动'Main'的CacheMetadata抛出'System.Xaml.XamlObjectWriterException: 无法创建未知类型'{http://schemas.microsoft.com/netfx/2009/xaml/activities}Variable({clr-namespace:Microsoft.Identity.Client;assembly=Microsoft.Identity.Client}IPublicClientApplication)'。
调用栈:
at System.Xaml.XamlObjectWriter.WriteStartObject(XamlType xamlType)
at System.Xaml.XamlWriter.WriteNode(XamlReader reader)
at System.Xaml.XamlServices.Transform(XamlReader xamlReader, XamlWriter xamlWriter, Boolean closeWriter)
at System.Activities.XamlIntegration.FuncFactory1.Evaluate() at System.Activities.DynamicActivity.OnInternalCacheMetadata(Boolean createEmptyBindings) at System.Activities.Activity.InternalCacheMetadata(Boolean createEmptyBindings, IList1& validationErrors)
at System.Activities.ActivityUtilities.ProcessActivity(ChildActivity childActivity, ChildActivity& nextActivity, Stack1& activitiesRemaining, ActivityCallStack parentChain, IList1& validationErrors, ProcessActivityTreeOptions options, ProcessActivityCallback callback)
at System.Activities.ActivityUtilities.ProcessActivityTreeCore(ChildActivity currentActivity, ActivityCallStack parentChain, ProcessActivityTreeOptions options, ProcessActivityCallback callback, IList1& validationErrors) at System.Activities.ActivityUtilities.CacheRootMetadata(Activity activity, LocationReferenceEnvironment hostEnvironment, ProcessActivityTreeOptions options, ProcessActivityCallback callback, IList1& validationErrors)
at System.Activities.XamlIntegration.ActivityXamlServices.RequiresCompilation(IDynamicActivity dynamicActivity, LocationReferenceEnvironment environment, String& language)'.
at System.Activities.XamlIntegration.ActivityXamlServices.RequiresCompilation(IDynamicActivity dynamicActivity, LocationReferenceEnvironment environment, String& language)
at System.Activities.XamlIntegration.ActivityXamlServices.Compile(IDynamicActivity dynamicActivity, LocationReferenceEnvironment environment)
at System.Activities.XamlIntegration.ActivityXamlServices.Load(XamlReader xamlReader, ActivityXamlServicesSettings settings)
at System.Activities.XamlIntegration.ActivityXamlServices.Load(XmlReader xmlReader, ActivityXamlServicesSettings settings)
at System.Activities.XamlIntegration.ActivityXamlServices.Load(Stream stream, ActivityXamlServicesSettings settings)
at UiPath.Executor.WorkflowRuntime.Load(String workflowFile)
at UiPath.Executor.RobotRunner.InitWorkflowApplication()
at UiPath.Executor.RobotRunner.d__84.MoveNext()
一步步解决问题
第一步:检查并安装MSAL依赖包
打开UiPath Studio的「管理包」面板(顶部菜单栏点Packages->Manage Packages),切换到All Packages标签,搜索Microsoft.Identity.Client。如果没看到已安装的标记,选一个和你的UiStudio版本兼容的稳定版(比如UiPath 2023.x适配MSAL 4.x/5.x),点击安装。第二步:修正变量定义
要是已经装了包,那大概率是变量类型选得不对:- 找到你定义的那个
IPublicClientApplication变量,删掉重新建,不要手动输入类型字符串,从类型下拉列表里找到Microsoft.Identity.Client.IPublicClientApplication选上——手动输入很容易写错命名空间或者程序集名称。
- 找到你定义的那个
第三步:清理缓存重建项目
有时候旧的缓存会搞事情,试试这招:- 关掉UiPath Studio,找到项目文件夹,删掉
.nuget和obj这两个文件夹; - 重新打开项目,等NuGet包自动还原完成;
- 点顶部菜单栏的
Project->Clean,再点Build,重新编译项目。
- 关掉UiPath Studio,找到项目文件夹,删掉
第四步:排查版本兼容性
如果装了最新包还是报错,可能是版本不兼容。去UiPath官方文档查一下你当前Studio版本推荐的MSAL版本,降级到对应版本试试。
额外小提示
要是你是手动引用外部dll的情况,确保dll文件放在项目的lib文件夹里,并且在「项目设置」里已经添加了这个dll的引用,别漏了这一步。
内容的提问来源于stack exchange,提问作者Karunakaran

