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

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

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

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 应用程序的项目分开,但这对我们来说并不理想(我什至不确定它是否会起作用)。

【问题讨论】:

标签: silverlight msbuild wcf-ria-services


【解决方案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://stackoverflow.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://stackoverflow.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”号,我的项目没问题。

        【讨论】:

          猜你喜欢
          • 2011-05-25
          • 2011-10-06
          • 1970-01-01
          • 2016-02-23
          • 1970-01-01
          • 1970-01-01
          • 2021-08-31
          • 2021-03-22
          • 2020-07-18
          相关资源
          最近更新 更多