错误MSB4018:"CreateRiaClientFilesTask"任务意外失败 - 尝试访问已卸载的AppDomain

Mat*_*les 5 msbuild silverlight wcf-ria-services

这个问题与此处此处发布的问题不同,即使标题相同.

这个问题间歇性地出现了.如果项目已清理或正在通过新结账构建,则始终会发生错误.立即再次推送构建通常会导致构建成功.我得到的堆栈跟踪是:

error MSB4018: The "CreateRiaClientFilesTask" task failed unexpectedly. 
System.AppDomainUnloadedException: Attempted to access an unloaded AppDomain. 
  at System.IDisposable.Dispose() 
  at Microsoft.ServiceModel.DomainServices.Tools.CreateRiaClientFilesTask.GenerateClientProxies() 
  at Microsoft.ServiceModel.DomainServices.Tools.CreateRiaClientFilesTask.ExecuteInternal() 
  at Microsoft.ServiceModel.DomainServices.Tools.RiaClientFilesTask.Execute() 
  at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() 
  at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__1c.MoveNext() 
Run Code Online (Sandbox Code Playgroud)

在常规编辑 - 构建 - 执行周期期间,问题也会间歇性地发生,有时需要从Visual Studio重新启动才能使其在这些情况下工作.

在MSBuild和Visual Studio 2010中都会出现此问题.我已安装所有最新更新(WCF RIA Services SP2).它发生在使用Silverlight 4工具时,升级到Silverlight 5并没有解决问题.VS 11的测试版中仍然存在这个问题.

我无法改变这里描述的构建顺序(从这里引用),因为MSBuild抱怨循环依赖,Visual Studio说我不能从Silverlight引用非Silverlight项目.从该页面我也尝试了这个链接,并在注册表中将默认的ToolsVersion从2.0更改为4.0.

我肯定使用的是32位版本的MSBuild,因为试图使用64位版本失败,因为它没有实现水合实体框架模型.我没有使用/ m开关来并行构建它.

该项目最初是一个Web项目(托管Silverlight控件所在的站点,RIA服务,包含业务逻辑)和Silverlight项目.将此更改为3个项目(包含逻辑的类库)没有任何区别.

我正计划尝试的下一件事是将托管RIA服务的项目与托管Silverlight应用程序的项目分开,但这对我们来说并不理想(我甚至不确定它是否可行).

Mat*_*les 0

我找到了这个问题的解决方案,到目前为止,它已经解决了我运行它的每台服务器和客户端上的问题。

我最初的项目布局有一个 Web 项目,它充当 RIA 组件和 Silverlight 应用程序本身的宿主。我为 RIA 服务创建了一个类库,将所有 RIA 逻辑移至其中,并从 Web 项目添加了对它的引用。然后我更新了 Silverlight 中的 RIA 链接以指向这个新项目。

我必须将以下行添加到 Silverlight app.xaml.cs 文件中,以便身份验证起作用。

((WebAuthenticationService)WebContext.Current.Authentication).DomainContext 
    = new RiaNamespace.AuthenticationDomainContext();
Run Code Online (Sandbox Code Playgroud)