2012-03-28 12 views
5

To pytanie różni się od pytań opublikowanych pod here i here, mimo że tytuły są takie same.Błąd MSB4018: Zadanie "CreateRiaClientFilesTask" nieoczekiwanie zakończyło się niepowodzeniem - próba uzyskania dostępu do rozładowanego AppDomain

Problem pojawia się sporadycznie. Błąd zawsze występuje, jeśli projekt został oczyszczony lub jest budowany ze świeżego kasy. Ponowne przesuwanie kompilacji natychmiast powoduje zazwyczaj powodzenie kompilacji. StackTrace pojawia się:

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() 

Problem występuje także sporadycznie podczas regularnych cyklach edit-build-wykonać, a czasami restart z Visual Studio jest wymagane, aby pracować przy takich okazjach.

Problem występuje zarówno w programie MSBuild, jak i Visual Studio 2010. Mam zainstalowane wszystkie najnowsze aktualizacje (WCF RIA Services SP2). Wystąpił on podczas korzystania z narzędzi Silverlight 4, a uaktualnienie do Silverlight 5 nie rozwiązało problemu. Problem nadal występuje także w wersji beta VS 11.

Nie byłem w stanie zmienić kolejność kompilacji jak opisano here (odwołanie od here) jako MSBuild skarży się na okrągłym uzależnienia i Visual Studio mówi, że nie może odwoływać się do projektu innego niż Silverlight z projektu Silverlight. Z tej strony próbowałem również podążać za this link i zmienić domyślną wersję ToolsVersion z wersji 2.0 na 4.0 w rejestrze.

Zdecydowanie używam 32-bitowej wersji MSBuild, ponieważ próba użycia wersji 64-bitowej kończy się niepowodzeniem i nie działa Hydratacja modelu struktury encji. Nie używam przełącznika/m do budowania go równolegle.

Projekt był początkowo projektem internetowym (który obsługuje witrynę, na której kontroler Silverlight wciąż działa, usługi RIA i zawiera logikę biznesową) oraz projektem Silverlight. Zmiana tego na 3 projekty (z biblioteką klas zawierającą logikę) nie robi żadnej różnicy.

Następną rzeczą, którą planuję spróbować, jest to, że projekt hostujący usługę RIA jest oddzielny od tego, który obsługuje aplikację Silverlight, ale to nie jest dla nas idealne (i nie jestem nawet pewien, czy to zadziała).

+0

Dla przypomnienia: ściśle powiązane pytanie to http://stackoverflow.com/q/4450340/223837. –

Odpowiedz

0

Znalazłem rozwiązanie tego problemu, które jak dotąd rozwiązało problem na każdym serwerze i kliencie, z którego go uruchomiłem.

Mój początkowy układ projektu miał projekt internetowy, który działał jako host zarówno dla komponentów RIA, jak i samej aplikacji Silverlight. Stworzyłem bibliotekę klas dla usług RIA, przeniosłem tam całą logikę RIA i dodałem do niej odniesienie z Web Project. Następnie zaktualizowałem łącze RIA w Silverlight, aby wskazać na ten nowy projekt.

Musiałem dodać następujący wiersz do pliku aplikacji Silverlight app.xaml.cs, aby uwierzytelnianie zadziałało.

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

Miałem dokładnie to samo, co kilka moich projektów. Znalazłem (wywnioskowałem naprawdę), że było to związane z moją ścieżką aktualizacji RIA i Silverlight. Mam nową maszynę, z wszystkimi aktualizacjami i to się stało. Jednak po ponownym utworzeniu projektów od zera (skopiowanie plików i ustawień, a NIE "wygenerowanych" informacji o złożeniu) problem zniknął.

Nie jest to ostateczna odpowiedź, jakiej można się spodziewać, i szczerze mówiąc, ponowne stworzenie rozwiązania od podstaw było uciążliwe. Podejrzewam (i jedyny wniosek, jaki mogłem wnieść) związany był z deklaracją GAC lub inną, która domagała się wcześniejszej wersji RIA.

I HAD zainstalował wersję RIA i zakodował przy jej użyciu, a było kilka aktualizacji Silverlight, które miały miejsce w krótkim odstępie czasu w tym czasie. Od tego czasu nie miałem żadnych problemów.

+0

To samo doświadczenie: mieliśmy to na serwerze kompilacji i odszedł dopiero, gdy przenieśliśmy się do nowego. Mam go w moim systemie programistycznym (ale rzadko) i jestem prawie pewien, że zniknie, gdy przejdę na nowy. Nadal denerwujące. –

1

Ten wyjątek doprowadza mnie do szału! Próbowałem również wyczyścić folder tymczasowy ASP.Net, wyczyścić wszystkie projekty w roztworze, uruchomić VS jako administrator itp. Ale nadal mam ten problem. Moim rozwiązaniem tego problemu jest dwukrotny przebudowanie projektu WWW.

3

W moim przypadku ten wyjątek został spowodowany przez aplikację antywirusową McAffee. Wyłączenie funkcji "On-Access" (lub "On-Demand") rozwiązało problem.

W przeszłości miałem podobny problem z programem Microsoft Security Essentials, który został rozwiązany przez dodanie poniższych wyjątków. Podejrzewam, że jest to wykluczenie folderów tymczasowych ASP.Net, które byłoby wymagane do rozwiązania problemu tutaj.

wykluczonych plików i Lokalizacje

  • C: \ Temp \ default \ NuGet.exe
  • C: \ Temp \ NativeImage \ NuGet.exe
  • C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files
  • NuGet.exe

Wykluczanie d Procesy

  • 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
+0

Naprawiono to również dla mnie, chociaż zamiast wykluczać rzeczy, usunąłem McAfee i zainstalowałem coś innego. – BenCr

+0

Naprawiliśmy to również dla nas. Nie możemy jednak na stałe wyłączyć programu McAfee ani zmienić jego wyłączeń z powodu zasad obowiązujących w firmie, a także znaleźliśmy sposób na przeniesienie "Tymczasowych plików ASP.Net" do innej lokalizacji. Dodaję do tego osobną odpowiedź. –

0

Usuń lub wyłącz swoje wirus-skaner podczas kompilacji. Pracował też dla mnie!

1

W naszym przypadku wystąpił ten sam problem, co w innej odpowiedzi na to samo pytanie (https://stackoverflow.com/a/14125687/223837): McAfee dziwnie zakłócał pliki w "Tymczasowych plikach ASP.NET". Ale w naszym przypadku nie mogliśmy wyłączyć McAfee ani zmienić wykluczonych folderów z powodu polityki firmy.

ale znaleźliśmy inne rozwiązanie: Co zrobiliśmy to update plik machine.config (w naszym przypadku C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config) i dodać element <compilation tempDirectory="..."/>, co następuje:

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

(inspiracją dla tego kierunku rozwiązań pochodzi odpowiedź na powiązane pytanie: https://stackoverflow.com/a/1255303/223837.)

+0

Grmph. To rozwiązanie wydawało się pomocne w przypadku niektórych wersji, ale teraz mamy dwie nieudane kompilacje z rzędu. Więc problem powrócił ... –

0

Miałem ten sam problem.

Właśnie zmieniłem numer "Wersji montażowej" i mój projekt był OK.

Powiązane problemy