Próbuję uruchomić projekt Asp.net MVC pobrany z kontroli źródła TFS. Dodałem wszystkie odwołania do zestawu i jestem w stanie zbudować i skompilować pomyślnie bez żadnych błędów lub ostrzeżeń.
Ale w przeglądarce pojawia się następujący błąd:
Nie można znaleźć części ścieżki „C: \ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe”.
Oto pełny zrzut ekranu ze stroną błędu.
Po kilku dniach badań zrozumiałem, że Roslyn jest platformą kompilatora .Net, która oferuje zaawansowane funkcje kompilacji. Nie rozumiem jednak, dlaczego moja kompilacja próbuje znaleźć \ bin \ roslyn \ csc.exe, ponieważ nie skonfigurowałem niczego związanego z Roslyn ani nie zamierzam używać Roslyn w moim projekcie.
.csproj
pliku.Odpowiedzi:
Problem z domyślnymi szablonami VS2015 polega na tym, że kompilator nie jest kopiowany do katalogu tfr \ bin \ roslyn \, a raczej do katalogu {outdir} \ roslyn \
Dodaj ten kod do pliku .csproj:
źródło
TL; DR
uruchom to w konsoli Menedżera pakietów:
Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r
Więcej informacji
Ten problem nie jest związany z samym programem Visual Studio, więc odpowiedzi sugerujące dodanie kroków kompilacji w celu skopiowania plików są raczej obejściem. To samo dotyczy ręcznego dodawania plików binarnych kompilatora do projektu.
Kompilator Roslyn pochodzi z pakietu NuGet, aw niektórych wersjach tego pakietu występuje błąd (nie wiem dokładnie, które). Rozwiązaniem jest ponowna instalacja / aktualizacja tego pakietu do wersji wolnej od błędów. Pierwotnie zanim napisałem odpowiedź w 2015 roku, naprawiłem ją, instalując następujące pakiety w określonych wersjach:
Potem zajrzałem do .csproj i upewniłem się, że ścieżki do pakietów są poprawne (w moim przypadku .. \ .. \ packages \ *. *) Wewnątrz znaczników
<ImportProject>
u góry i<Target>
na dole z nazwą „ZapewnijNuGetPackageBuildImports”. Dotyczy to MVC 5 i .NET Framework 4.5.2.źródło
Twoja kompilacja próbuje znaleźć,
\bin\roslyn\csc.exe
ponieważ do twojego projektu dodano następujące pakiety. Po prostu przejrzyj swójpackages.config
plik, możesz mieć je obajeśli nie chcesz korzystać z Roslyn, wykonaj poniższe czynności, aby go usunąć
1. Usuń pakiety NuGet, użyj następujących poleceń z konsoli pakietów Nuget
2. Po wykonaniu tej czynności plik web.config powinien zostać automatycznie zaktualizowany. W przeciwnym razie poszukaj poniższego kodu w
web.config
pliku, a jeśli go znajdziesz, usuń ten fragment kodu.źródło
Czyszczenie i przebudowa działały dla mnie!
źródło
Copying file from "C:\Users\medmondson\Source\UK\Portal\Branches\v12\Source\packages\Microsoft.Net.Compilers.1.3.2\tools\csi.exe" to "bin\Debug\roslyn\csi.exe".
Oto więcej sposobów na wykonanie tego przez MSBuild.
Ale zauważam, że pliki roslyn są również w moim katalogu bin (nie w folderze). Wygląda jednak na to, że aplikacja działa.
źródło
Jak zauważono w numerze w projekcie Roslyn na GitHub , rozwiązaniem (które działało dla mnie) jest po prostu rozładowanie i ponowne załadowanie projektu w Visual Studio.
Folder „bin \ roslyn” nie został utworzony podczas kompilacji lub przebudowy, dopóki nie przeładowałem projektu.
źródło
Postępowałem zgodnie z tymi krokami i działało idealnie
Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r
źródło
Po wypróbowaniu wszystkich poprawek bez cygara naprawiłem go, aktualizując ten pakiet Nuget w Visual Studios:
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Mój był od 1.0.0 do 2.0.0 w celach informacyjnych (błąd już nie pokazuje)
źródło
roslyn
folder jest tworzony w mojej ścieżce wyjściowej. Nie widzę też odniesienia do „roslyn” w moim csproj. To może być , żeTarget Name="CopyRoslyn...
jest rzeczą VS2015 i nie konieczne (wersja) 2017 mam. Warto zauważyć: Ponieważ zaktualizowałem DotnetCompilerPlatform, zanim zacząłem grać z dodaniem celu kopiowania (tego, o którym wspomniałem), mam czystszy csproj.źródło
Ctrl C
gdy byłem w trakcie sprawdzania gałęzi,git
co zepsuło moje repozytorium.git reset --hard
nie działało, więcgit clean -xdf
musiałem odbudować projekt. Wystąpił jednak ten błąd, więc po prostu wyczyściłem i ponownie przebudowałem projekt i zadziałało to dla mnie.Musisz zainstalować Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFix, został stworzony specjalnie dla tego błędu
źródło
Spowoduje to ponowne zainstalowanie wszystkich zależności i plików pakietu (takich jak csc.exe)
źródło
Tak więc odpowiedź Roba Cannona zasadniczo działała dla mnie, ale musiałem dostosować garść opcji. W szczególności musiałem usunąć warunek na obiekcie docelowym, a także zmienić atrybut Include, ponieważ $ CscToolPath był pusty, gdy projekt był budowany na naszym serwerze kompilacji. Co ciekawe, $ CscToolPath NIE był pusty podczas uruchamiania lokalnego.
źródło
Aktualizacja pakietów nuget działała dla mnie Kliknij prawym przyciskiem myszy rozwiązanie> Zarządzaj pakietami NuGet dla rozwiązania i zaktualizuj wszystkie pakiety, a zwłaszcza: Microsoft.Net.Compilers i Microsoft.CodeDom.Providers.DotNetCompilerPlatform
źródło
Jest to znany problem z Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.6. Obniżenie wersji do wersji 1.0.5 naprawiło to dla mnie.
źródło
W przypadku VS 2019 usuń całkowicie następujący węzeł:
źródło
Na komentarz Daniela Neela powyżej:
Wersja 1.0.3 pakietu Microsoft.CodeDom.Providers.DotNetCompilerPlatform Nuget działa dla mnie, ale wersja 1.0.6 powoduje błąd w tym pytaniu
Przejście na wersję 1.0.3 rozwiązało ten problem.
źródło
W moim przypadku miałem problem w Jenkins, gdy próbował wdrożyć go w Octopus z następującym błędem:
Przyczyna
Po pewnym czasie korzystałem z wewnętrznego komponentu, który był używany
Microsoft.Net.Compilers
. Powodem, dla którego wewnętrzny komponent był używany,Microsoft.Net.Compilers
było przezwyciężenie tego problemu ( C #: wyrzucanie niepoprawnej kompilacji wyrażeń ) i zostało rozwiązane w ten sposób ( Jak korzystać z C # 7 w Visual Studio 2015? ). To powoduje, że kiedy instaluję komponent w głównym programie,Microsoft.Net.Compilers
dodaje się go automatycznie.Rozwiązanie
Moje obejście polegało na odinstalowaniu następujących elementów z naszego wewnętrznego komponentu przez (zgodnie z odpowiedzią @malikKhalil)
I wybrał kompilator C # 7 w Jenkins zamiast C # 6 i przebudował, aby upewnić się, że wszystko działa i buduje poprawnie.
W końcu w moim głównym programie próbowałem zaktualizować mój wewnętrzny komponent. I wszystko niż budowanie ponownie. Zbudował bez żadnych problemów i problemów.
źródło
W moim przypadku musiałem tylko przejść do katalogu bin w Visual Studio Solution Explorer (projekt aplikacji internetowej) i bezpośrednio dołączyć projekt roslyn. Klikając folder prawym przyciskiem myszy i wybierając opcję Uwzględnij w projekcie. I sprawdź ponownie rozwiązanie, aby uruchomić proces kompilacji.
Folder Roslyn nie został domyślnie dołączony.
źródło
Uaktualnienie
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
z 1.0.0 do 1.0.1 naprawiło to dla mnie.źródło
Otwórz plik projektu i usuń wszystkie odwołania za pomocą Import Project = ".. \ packages \ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0 ....
Otwórz web.config i usuń wszystkie atrybuty kompilatorów system.codedom
źródło
Jak już wspomniano przez /programming/32780315#34391473 , szybka poprawka jest użyć menedżera pakietów,
Tools
>Nuget Package Manager
>Package Manager Console
, aby uruchomićAle alternatywnym rozwiązaniem (które automatycznie i cicho odtwarza pakiety, jeśli ich brakuje) jest usunięcie atrybutu
Web.config
pliku projektu .(
Web.config
znajduje się w tym samym katalogu co twój.csproj
plik).Otwórz
Web.config
plik w edytorze tekstu (lub w programie Visual Studio).- W tagu
configuration
>system.codedom
>compilers
>compiler language="c#;cs;csharp"
całkowicie usunąćtype
atrybut.Krótko mówiąc, usuń linię zaczynającą się od
type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft
.(Prawdopodobnie ta sama poprawka działa zarówno dla Visual Basic, jak i dla Csharp, ale nie próbowałem.)
Visual Studio zajmie się resztą. Nie więcej
Server Error in '/' Application
.W przykładowym kodzie, który podałem w pliku zip powyżej, otrzymasz teraz,
HTTP Error 403
gdy naciśniesz Ctrl+ F5.Spróbuj zamienić
http://localhost:64195
w przeglądarce nahttp://localhost:64195/api/products
.Interfejs API sieci Web wyświetla się teraz tak, jak powinien:
Jako prowokację próbowałem usunąć cały
package
katalog mojego rozwiązania Visual Studio.Został on automatycznie i cicho odtworzony, gdy tylko go (ponownie) zbudowałem.
Last but not least, tutaj jest kod, który odtwarza błąd: http://schulze.000webhostapp.com/vs/SrvrErr-repruce.zip (Oryginalnie z https://github.com/aspnet/AspNetDocs/tree/master/aspnet / web-api / Overview / advanced / call-a-web-api-from-a-net-client / sample / server / ProductsApp )
źródło
W moim przypadku po prostu usunięcie wszystkiego z folderu bin i ponowna kompilacja zrobiły dla mnie całą pracę.
źródło
Miałem również ten sam problem podczas uruchamiania projektu. Oto kroki, które wykonałem.
Tym razem nie widziałem tego samego błędu. Działa to zgodnie z oczekiwaniami.
źródło
Jeśli dodajesz ASPNETCOMPILER do kompilacji widoków Razor w MVC, tak jak w tym pytaniu StackOverflow , zmień PhysicalPath na miejsce, w którym znajduje się pakiet nuget Roslyn (zwykle wskazywany przez zmienną $ CscToolPath ):
źródło
Problem z domyślnymi szablonami VS2015 polega na tym, że kompilator nie jest kopiowany do
{outdir}_PublishedWebsites\tfr\bin\roslyn\
katalogu, a raczej do{outdir}\roslyn\
katalogu. Prawdopodobnie różni się to od lokalnego środowiska, ponieważAppHarbor
buduje aplikacje przy użyciu katalogu wyjściowego zamiast budować rozwiązanie „na miejscu”.Aby to naprawić, dodaj następujący kod na końcu
.csproj
pliku zaraz po bloku xml<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">...</Target>
Odniesienie: https://support.appharbor.com/discussions/problems/78633-cant-build-aspnet-mvc-project-generated-from-vstudio-2015-enterprise
źródło
W moim przypadku, podobnie jak Basim, istniał pakiet NuGet informujący kompilator, że potrzebujemy C # 6, czego nie zrobiliśmy.
Musieliśmy usunąć pakiet NuGet,
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
który następnie usunął:<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net452" />
z pliku packages.config<system.codedom> <compilers> <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" /> <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" /> </compilers> </system.codedom>
W
system.codedom
węźle możesz zobaczyć, dlaczego przyniósł Roslyn:compilerOptions="/langversion:6
źródło
Usuń folder Bin w eksploratorze rozwiązań i ponownie zbuduj rozwiązanie. To rozwiązałoby problem
źródło
Miałem ten sam problem podczas instalowania mojej aplikacji na serwerze, gdy wszystko działało idealnie na localhost.
Żadne z tych rozwiązań nie zadziałało, zawsze miałem ten sam błąd:
Skończyło się na tym, że:
bin/roslyn
folderpackages\Microsoft.Net.Compilers.1.3.2\tools
To rozwiązało mój problem.
źródło
Uruchom ponownie system Windows.
Jest to jedyne rozwiązanie, które działało dla mnie po próbie przebudowania, usunięcia zawartości
bin
i przebudowania, ponownego uruchomienia programu Visual Studio.To kolejny przykład tego, jak okropne są narzędzia do budowania C # / .NET.
Myślę (po przeczytaniu wielu odpowiedzi) ogólny wniosek jest taki, że przyczyna i rozwiązanie tego problemu w dużej mierze zależy od konfiguracji i projektu, więc jeśli jedna odpowiedź nie działa, po prostu spróbuj innej. Wypróbuj rozwiązania nieinwazyjne / destrukcyjne, takie jak ponowne uruchomienie programu Visual Studio, ponowne uruchomienie, przebudowa itp., PIERWSZE, zanim zadzwonisz z pakietami NuGet lub ponownie zainstalujesz narzędzia programistyczne. Powodzenia!
(UWAGA: przy użyciu programu Visual Studio 2019, a plik projektu został pierwotnie utworzony w programie Visual Studio 2015. Może to pomoże komuś zbadać problem)
(EDYCJA: Czy może to być spowodowane ponownym uruchomieniem po instalacji / modyfikacji instalacji programu Visual Studio lub aktualizacji programu Visual Studio, gdy instalator wyświetli monit o ponowne uruchomienie?)
źródło
Mam webproject bez pliku csproj, a wymienione tutaj rozwiązania nie działały dla mnie.
Zmiana docelowego frameworka .NET, ponowna instalacja pakietów (
Update-Package -reinstall
), a następnie zbudowanie projektu działało dla mnie. Możesz nawet zmienić docelową strukturę po tej operacji (upewnij się, że ponownie instalujesz pakiety nuget po tym).źródło
update-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -reinstall