2011-03-01 28 views
10

Obecnie pracuję nad projektem MVC3 z Razor. Mam switchen na kompilacji widoków, aby mieć świadomość błędów ortograficznych itp. Podczas kompilacji.MVC3 Dziwny błąd po włączeniu kompilacji widoków

Jak tylko włączyć <MvcBuildViews> prawda </MvcBuildViews > w pliku konfiguracyjnym projekty get następujący błąd podczas kompilacji:

Error 1 Błędem jest użycie sekcji zarejestrowanej jako allowDefinition = "MachineToApplication" poza poziomem aplikacji. Ten błąd może być spowodowany tym, że katalog wirtualny nie jest skonfigurowany jako aplikacja w usługach IIS.

Przeczytałem kilka możliwych rozwiązań problemu, głównie dotyczących IIS i katalogów wirtualnych lub aplikacji. Problem polega na tym, że nie używam usług IIS, ale zamiast tego używam domyślnego programu Visual Studio Development Server.

Co mogę zrobić, aby rozwiązać ten problem?

Odpowiedz

21

Próbowałem wielu różnych rozwiązań dostępnych w sieci, ale albo nie pasowały one do mojego problemu, albo nie działały.

Podsumowując mój problem:

Po włączeniu CompileViews na, od razu dostał powyższy błąd podczas kompilacji. Używam domyślnego serwera Visual Studio Development VS2010 do przetestowania mojej aplikacji MVC.

Dzisiaj otworzyłem wniosek na wsparcie Microsoft Developer, i - Jestem prawie wstydzę się do tego przyznać - mam moją odpowiedź około 30 sekund do oddzwonienia z technik:

Powiedział tylko: Proszę goto swój obj folder i usuń całą zawartość. Następnie skompiluj ponownie.

I to było wszystko, czego potrzeba.

Po wielu wstrząsających trzewiach o sobie chciałem podzielić się z tobą wynikami.

+0

Dziękujemy za zalogowanie tutaj. Właśnie spotkałem to samo i już drapałem w głowę, dlaczego tak prosta zmiana może mieć taki efekt. – Rudi

+0

Otrzymałem ten sam błąd, co wynik innej konfiguracji niż oryginalny opis. Ale wyczyszczenie folderu obj rozwiązało również mój problem. Dzięki za udostępnienie rozwiązania, jest to nadal istotne prawie rok później. –

+0

super rozwiązanie.Uratowałeś mój dzień :) –

3

Ten problem występuje, gdy w folderze obj znajduje się wynik projektu WWW (szablony web.config lub pliki tymczasowego publikowania). Użyty kompilator ASP.NET nie jest wystarczająco inteligentny, aby zignorować elementy w folderze obj, więc zamiast tego generuje błędy.

Kolejną poprawką jest nuke opublikowania danych wyjściowych tuż przed wywołaniem <AspNetCompiler>. Otwórz .csproj i zmienić:

<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'"> 
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" /> 
</Target> 

do tego:

<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'"> 
    <ItemGroup> 
    <ExtraWebConfigs Include="$(BaseIntermediateOutputPath)\**\web.config" /> 
    <ExtraPackageTmp Include="$([System.IO.Directory]::GetDirectories(&quot;$(BaseIntermediateOutputPath)&quot;, &quot;PackageTmp&quot;, System.IO.SearchOption.AllDirectories))" /> 
    </ItemGroup> 
    <Delete Files="@(ExtraWebConfigs)" /> 
    <RemoveDir Directories="@(ExtraPackageTmp)" /> 
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" /> 
</Target> 

To spowoduje usunięcie wszystkich web.configs pod \ obj, jak również wszystkie foldery PackageTmp pod \ obj.

+0

To najlepsze rozwiązanie, moim zdaniem. W przeciwieństwie do innych, nie wymaga to ręcznego wykonywania kroków, aby usunąć folder obj-folder, a także uniemożliwi kompilatorowi rekompilację całego projektu. – Carsten

Powiązane problemy