Opublikuj witrynę bez Roslyn

93

Próbuję utworzyć aplikację internetową przy użyciu programu Visual Studio 2015 i .NET 4.5.1. Kiedy publikuję witrynę, Visual Studio tworzy folder o nazwie roslyn.

wprowadź opis obrazu tutaj

Wiem, że jest używany do kompilowania kodu w locie, ale niestety mój dostawca hostingu nie pozwala mi na uruchomienie kompilatora na swoim serwerze.

Jak opublikować witrynę bez roslynpodobnej poprzedniej wersji Visual Studio?

EDYCJA: Otrzymałem ten błąd podczas próby uzyskania dostępu do mojej witryny.

wprowadź opis obrazu tutaj

Wygląda na to, że usługi IIS próbują się uruchomić, roslyn\csc.exeale moje konto użytkownika nie ma na to uprawnień. W poprzedniej wersji programu Visual Studio ten błąd nie pojawia się.

Niyoko
źródło
Ponadto Roslyn to tylko zestaw bibliotek DLL. Gospodarz nie może wiedzieć ani dbać o to, co robią.
SLaks
3
@Slaks IIS próbuje wykonać csc.exe. Zobacz edycję.
Niyoko,
Jeśli korzystasz z Pleska, możesz wyłączyć „Dedykowaną pulę aplikacji IIS dla swoich witryn”, nie musisz nawet usuwać tych pakietów!
Vahid Amiri

Odpowiedzi:

184

Właśnie stanąłem przed tym samym problemem. Podczas tworzenia nowego projektu sieci Web dwa pakiety NuGet są automatycznie dodawane do projektu. Jeśli je usuniesz, problem powinien zostać rozwiązany. Nazwy pakietów to: „ Microsoft.CodeDom.Providers.DotNetCompilerPlatform ” i „ Microsoft.Net.Compilers ”.

Kemal Kefeli
źródło
To zadziałało i jest zgodne z zewnętrznymi dostawcami usług hostingowych. Masz dwa pytania na ten temat: 1) Czy usunięcie tych pakietów Nuget może wpłynąć w jakikolwiek sposób na produkt? 2) Czy te pakiety można usunąć z samego szablonu projektu, aby za każdym razem uniknąć tego ćwiczenia?
nura
1) Nie ma żadnego wpływu na przepływ pracy lub logikę produktu; ale adres URL ( itorian.com/2015/09/roslyn-cscexe-and-vbcexe-deployment-on.html ), który jest dostarczany przez @ Ajay2707, mówi, że ten pakiet ma wpływ na czas ładowania strony. 2) Nie wiem, jak możesz to zrobić, ale jeśli możesz, nie będzie żadnego problemu.
Kemal Kefeli,
3
Usunięto oba pakiety NuGet. Usunięto deklarację konfiguracji. Ten folder jest nadal tworzony podczas kompilacji lub publikowania. Jedynym pakietem NuGet, którego używa moja aplikacja, jest „Newtonsoft.Json”. Czy muszę go też odinstalować?
Ranjan Kumar
8
Należy pamiętać, że usunięcie tych pakietów przerwie korzystanie z funkcji języka C # 6. Można to rozwiązać, odznaczając opcję „Zezwalaj na aktualizację prekompilowanej witryny”, co wstępnie kompiluje widoki itp.
Rutix
9
@RanjanKumar: Otwórz plik csproj w edytorze tekstu i usuń węzły odpowiadające pakietom NuGet opisanym w odpowiedzi Kemala. Może to obejmować Importwęzły, Targetwęzły (ZapewnijNugetPackageBuildImports) i Referencewęzły. Usuń także <system.codedom>węzeł swojego pliku web.config.
Brian
16

Miałem ten sam problem. Postępowałem zgodnie z instrukcjami tutaj . Gruntownie:

  1. Odinstaluj pakiet

    Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform <Your Web API project name>
    
  2. W ustawieniach swojego profilu publikowania odznacz „Zezwalaj na aktualizację prekompilowanej witryny”. Możesz to znaleźć w Ustawienia> Prekompilacja podczas publikowania> Konfiguruj

Midas
źródło
7
W ten sposób nie można używać funkcji języka C # 6 w widokach.
RokX
2

Po przeszukaniu tego samego wydanego, z którym się spotykam, właśnie tu przyszedłem. Przeczytałem powyższą odpowiedź, która jest poprawna.

Daję odpowiedź, ponieważ Oto dobry artykuł do wyjaśnienia:

  1. Dlaczego kod publikacji ma to exe, a także środowisko programistyczne?
  2. Jaka jest korzyść i jak usunąć?

To także bardzo dobry artykuł o historii tego exe

Ajay2707
źródło
2

Po niezliczonych wysiłkach ... i według tej strony . Uważam, że można użyć /p:UseWPP_CopyWebApplication=true /p:PipelineDependsOnBuild=falsew programie MSBuild do przekształcenia pliku web.config, co obejmuje również kompilator Roslyn w kompilacji. Dane wyjściowe są takie same, jak w przypadku publikowania w programie Visual Studio w systemie plików

code4j
źródło
Nie rozumiem artykułu pod linkiem do witryny, ale postępując zgodnie z twoją radą, aby dodać, że parametry kompilacji w programie MSBuild działają. Dzięki
Bruce
2

W repozytorium Roslyn jest otwarty błąd dotyczący tego problemu.

W moim przypadku wszystko, co musiałem zrobić, to obniżyć dll Microsoft.CodeDom.Providers.DotNetCompilerPlatformz wersji 1.0.6do 1.0.5.

Felipe Miosso
źródło
0

Miałem ten sam problem we wrześniu 2016 r., Kiedy przejąłem istniejący program ASP.NET. Okazało się, że w różnych projektach rozwiązania było zainstalowanych wiele wersji dwóch pakietów kompilatora, o których wspomniał Kemal.

Więc najpierw zaktualizowałem, aby uzyskać takie same. VS nie informuje, że aktualizacje są dostępne w tym scenariuszu (a może je przegapiłem?)

Następnie musiałem ponownie uruchomić VS2015, aby pakiety zostały poprawnie wyczyszczone.

Rob Von Nesselrode
źródło