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

Posted

技术标签:

【中文标题】错误 MSB4018:“CreateRiaClientFilesTask”任务意外失败 - 尝试访问已卸载的 AppDomain【英文标题】:Error MSB4018: The "CreateRiaClientFilesTask" task failed unexpectedly - Attempted to access an unloaded AppDomain 【发布时间】:2012-03-28 19:48:43 【问题描述】:

这个问题与here 和here 发布的问题不同,尽管标题相同。

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

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 Services SP2)。使用 Silverlight 4 工具时出现,升级到 Silverlight 5 并没有解决问题。在 VS 11 的 beta 版本中也仍然存在该问题。

我无法按照here(引用自here)的描述更改构建顺序,因为 MSBuild 抱怨循环依赖并且 Visual Studio 说我不能引用非 Silverlight 项目来自 Silverlight 的。在该页面上,我还尝试关注this link,并将注册表中的默认 ToolsVersion 从 2.0 更改为 4.0。

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

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

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

【问题讨论】:

备案:一个密切相关的问题是***.com/q/4450340/223837。 【参考方案1】:

就我而言,此异常是由 McAffee 的防病毒应用程序引起的。禁用“On-Access”(或者是“On-Demand”)功能解决了这个问题。

过去,我在使用 Microsoft 的 Security Essentials 时遇到过类似问题,通过添加以下排除项解决了该问题。我怀疑这是解决此处问题所需的“临时 ASP.Net 文件”文件夹排除项。

排除的文件和位置

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 并安装了其他东西。 这也为我们修复了它。但由于公司政策,我们无法永久禁用 McAfee 或更改排除项,我们找到了一种将“临时 ASP.Net 文件”移动到其他位置的方法。我正在为此添加一个单独的答案。【参考方案2】:

这个异常快把我逼疯了!我还尝试清理 ASP.Net 临时文件夹,清理解决方案中的所有项目,以管理员身份运行 VS 等。但我仍然有这个问题。我对该问题的解决方案是两次重建 Web 项目。

【讨论】:

【参考方案3】:

在我们的案例中,我们遇到了与同一问题 (https://***.com/a/14125687/223837) 的另一个答案中报告的相同的问题:McAfee 奇怪地干扰了“临时 ASP.NET 文件”中的文件。但在我们的案例中,由于公司政策,我们无法禁用 McAfee 或更改排除的文件夹。

但我们找到了不同的解决方案:我们所做的是更新machine.config 文件(在我们的例子中为C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config),并添加一个&lt;compilation tempDirectory="..."/&gt; 元素,如下所示:

<configuration>
    <!-- snip -->
    <system.web>
        <!-- snip -->
        <compilation tempDirectory="c:\A_FOLDER_THAT_IS_SKIPPED_BY_MCAFEE\TempASP.NETFiles\"/>
    </system.web>
    <!-- snip -->
</configuration>

(此解决方案方向的灵感来自对相关问题的回答:https://***.com/a/1255303/223837。)

【讨论】:

Grmph。这个解决方案似乎对相当多的构建有帮助,但现在我们连续有两个失败的构建。所以问题又回来了……【参考方案4】:

我的几个项目也发生了完全相同的事情。我发现(确实推断)它与我的 RIA 和 Silverlight 的升级路径有关。我得到了一台新机器,所有更新都打开了,它仍然发生。但是,当我从头开始重新创建项目(复制文件和设置,而不是“生成”的程序集信息)时,问题就消失了。

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

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

【讨论】:

这里有同样的经历:我们在构建服务器上遇到过这种情况,但只有在我们移到新服务器时它才会消失。我在我的开发系统上有它(但很少),我很确定一旦我转移到一个新系统它就会消失。还是很烦人。【参考方案5】:

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

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

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

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

【讨论】:

【参考方案6】:

在构建期间删除或禁用您的病毒扫描程序。也为我工作!

【讨论】:

【参考方案7】:

我遇到了同样的问题。

我刚刚更改了“Assembly Version”号,我的项目没问题。

【讨论】:

以上是关于错误 MSB4018:“CreateRiaClientFilesTask”任务意外失败 - 尝试访问已卸载的 AppDomain的主要内容,如果未能解决你的问题,请参考以下文章

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

MSB4018 “ResolveComReference”任务意外失败

Visual Studio 2019 编译.Net Core Console项目出现MSB4018 The "CreateAppHost" task failed unexpec(

使用 MSBuild 命令行实用程序时出错

我的代码错误类型警告 1 警告 C4018 和更多错误

安装 VS 2012 后无法编译我的 c++ 项目