错误 MSB4018: "CreateRiaClientFilesTask" 任务意外失败 - 尝试访问未加载的应用程序域。

6
这个问题与发布在这里这里的问题不同,尽管标题相同。问题间歇性出现。如果项目已被清理或正在进行新的检查,错误总会发生。立即再次推送构建通常会导致构建成功。我获得的堆栈跟踪如下:
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() 

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

这个问题在MSBuild和Visual Studio 2010中都存在。我已经安装了所有最新的更新(WCF RIA服务SP2)。在使用Silverlight 4工具时它就出现了,并且升级到Silverlight 5并没有解决这个问题。这个问题在VS 11的beta版中仍然存在。

我无法像这里所描述的更改构建顺序(引用自这里),因为MSBuild会报告循环依赖关系,而Visual Studio则表示我不能从Silverlight项目中引用非Silverlight项目。从那个页面上,我还尝试了按照这个链接所述,在注册表中将默认的ToolsVersion从2.0更改为4.0。

我肯定是在使用32位版本的MSBuild,因为尝试使用64位版本会失败,提示无法加载实体框架模型。我也没有使用/m开关进行并行构建。

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

我计划尝试的下一步是将托管RIA服务的项目与托管Silverlight应用程序的项目分开,但这对我们来说并不理想(而且我甚至不确定它是否有效)。


记录一下:一个密切相关的问题是 https://dev59.com/SlLTa4cB1Zd3GeqPcq4l。 - MarnixKlooster ReinstateMonica
7个回答

3
在我的情况下,这个异常是由McAfee的反病毒应用程序引起的。禁用“On-Access”(或者是“On-Demand”)功能可以解决这个问题。
过去我曾经遇到过类似的问题,当时使用Microsoft的安全卫士添加了以下排除项来解决。我认为在这里需要排除“Temporary ASP.Net Files”文件夹才能解决问题。
排除的文件和位置:
- C:\Temp\Default\NuGet.exe - C:\Temp\NativeImage\NuGet.exe - C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files - NuGet.exe 排除的进程:
- C:\Program Files (x86)\Common Files\microsoft shared\DevServer\11.0\WebDev.WebServer40.EXE - C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe - C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\Microsoft.VisualStudio.Web.Host.exe - C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe

这对我也起作用了,尽管我没有排除任何东西,而是卸载了 McAfee 并安装了其他软件。 - BenCr
这对我们也解决了问题。但是由于公司政策,我们无法永久禁用 McAfee 或更改排除项,因此我们找到了一种将“临时 ASP.Net 文件”移动到不同位置的方法。我会为此添加一个单独的答案。 - MarnixKlooster ReinstateMonica

1

这个异常让我崩溃了!我也尝试过清除ASP.Net临时文件夹,清理解决方案中的所有项目,以管理员身份运行VS等。但我仍然遇到了这个问题。我的解决方案是两次重新构建Web项目。


1
在我们的情况下,我们遇到了与另一个回答中报告的同样问题相同的问题(https://dev59.com/bWLVa4cB1Zd3GeqPsxKd#14125687):McAfee奇怪地干扰了“Temporary ASP.NET Files”中的文件。但由于公司政策,我们无法禁用McAfee或更改排除的文件夹。
但我们找到了一个不同的解决方案:我们所做的是更新machine.config文件(在我们的情况下是C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config),并添加一个<compilation tempDirectory="..."/>元素,如下所示:
<configuration>
    <!-- snip -->
    <system.web>
        <!-- snip -->
        <compilation tempDirectory="c:\A_FOLDER_THAT_IS_SKIPPED_BY_MCAFEE\TempASP.NETFiles\"/>
    </system.web>
    <!-- snip -->
</configuration>

(这个解决方向的灵感来自于一个相关问题的答案:https://dev59.com/jnVC5IYBdhLWcg3wykaj#1255303。)

Grmph. 这个解决方案似乎在很多构建中都有所帮助,但现在我们连续出现了两个失败的构建。所以问题又回来了... - MarnixKlooster ReinstateMonica

0

我遇到了同样的问题。

我只是改变了“程序集版本”号码,我的项目就没问题了。


0

在编译期间移除或禁用您的病毒扫描器。这对我也起作用了!


0

我在我的几个项目中也遇到了完全相同的问题。我发现(实际上是推断出来的),这与我的RIA和Silverlight升级路径有关。我买了一台新机器,安装了所有更新,但仍然出现了这个问题。然而,当我从头开始重新创建项目(复制文件和设置,而不是“生成”的程序集信息),问题就解决了。

我想这并不是你期望得到的明确答案,老实说,从头开始重新创建解决方案很麻烦。我怀疑(也是我能得出的唯一结论)这与某些GAC声明或其他要求RIA框架早期版本的内容有关。

我曾经安装过RIA的一个版本并使用它进行编码,在此期间发生了几次Silverlight更新。自那以后我就没有遇到过任何问题。


我有同样的经历:我们在一个构建服务器上遇到了这个问题,只有当我们切换到新服务器后才消失。虽然我在我的开发系统上也有这个问题(但很少),但我相信一旦我换到新的系统就会消失。尽管如此,这仍然很烦人。 - MarnixKlooster ReinstateMonica

0

我找到了一个解决这个问题的方法,迄今为止,我从每个服务器和客户端运行它都已经修复了这个问题。

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

我不得不在Silverlight app.xaml.cs文件中添加以下行,以使身份验证工作。

((WebAuthenticationService)WebContext.Current.Authentication).DomainContext 
    = new RiaNamespace.AuthenticationDomainContext();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接