Publikuję stronę internetową ASP.NET Core MVC 3.0, a folder wyjściowy zawiera wiele odniesień w wielu językach do Microsoft.CodeAnalysis
librairies, ktoś wie dlaczego?
Oczywiście FxCopAnalyzers
pakiet Nuget jest zainstalowany w projekcie, ale nie został opublikowany we wcześniejszej wersji projektu, więc nie rozumiem, dlaczego jest teraz, ponieważ powinien być użyteczny tylko w czasie projektowania, a nie w środowisku produkcyjnym.
asp.net-core
fxcop
microsoft.codeanalysis
Jonathan
źródło
źródło
Odpowiedzi:
Ten sam problem napotkałem, gdy korzystałem z wersji 3.0. Ale nie sądzę, że jest to spowodowane kompilacją widoków .net core 3 przy publikacji, ponieważ w gałęzi znajduje się również View ViewCompilation
release/2.1
.Wierzę, że masz rację. Analizy te powinny być używane tylko w czasie devtime.
Ale kiedy ręcznie odinstalowuję SDK (3.0) i ponownie instaluję najnowszy SDK , nie mogę już go odtworzyć. Nie wiem, dlaczego tak się dzieje, może teraz zostało to naprawione. Jest to bardziej prawdopodobne z innego powodu: dodałem dodatkowe odniesienie do innych pakietów, które zależą od Microsoft.CodeAnalysis przez przypadek). W każdym razie najpierw zaktualizuj swój zestaw SDK do najnowszej wersji.
Inną ważną rzeczą jest to, że przy użyciu programu Visual Studio w celu dodania kontrolera zostanie automatycznie dodane odwołanie
Microsoft.VisualStudio.Web.CodeGeneration.Design
. Uwaga: ten pakiet jest zależny odMicrosoft.CodeAnalysis.Common
pakietu pośrednio. OtoMicrosoft.CodeAnalysis.Common
udostępniony pakiet używany przez platformę kompilatora Microsoft .NET („Roslyn”). Jeśli pobierzesz ten pakiet i rozpakujesz tę bibliotekę ręcznie, zobaczysz, żeMicrosoft.CodeAnalysis.dll
:Ten pakiet jest potrzebny tylko w Dev-Time. Jeśli nie usuniesz tej zależności, otrzymasz całkiem sporo bibliotek dll powiązanych z
Microsoft.CodeAnalysis
folderem publikowania.Usuń te pakiety, które zależą
Microsoft.CodeAnalysis
, a następnie nie powinieneś dostać żadnychMicrosoft.CodeAnalysis
powiązanych bibliotek dll:źródło
dotnet aspnet-codegenerator controlller ...
Dla mnie ten wiersz w
*.csproj
pliku w jakiś sposób rozwiązał problem. Nadal wdrażaMicrosoft.CodeAnalysis
, ale tylko dlaen
:Zobacz komentarz (autorstwa Jonathona Marolfa) w sprawie Github.
źródło
Oto moje starania, aby rozwiązanie było łatwiejsze do zobaczenia.
Problem, bardziej niż prawdopodobne, to użycie
AddRazorRuntimeCompilation()
. Mówiąc dokładniej, w startup.cs możesz dodać kompilację środowiska wykonawczego razor w następujący sposób:i aby to wesprzeć, twój projekt internetowy prawdopodobnie ma odniesienie do
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
Ten pakiet nuget jest zależny od
Microsoft.CodeAnalysis
tego, że generuje wszystkie niechciane dane wyjściowe w folderze publikowania.Rozwiązaniem jest edycja pliku projektu i uzależnienie zależności od trybu debugowania w następujący sposób:
a następnie w pliku startup.cs warunkowo wywołać
AddRazorRuntimeCompilation()
tak:Spowoduje to, że wszystkie te
Microsoft.CodeAnalysis
librairie będą dostępne tylko podczas kompilacji w trybie debugowania. Więc teraz, kiedy publikujesz w trybie Release, nie będą one częścią danych wyjściowych.źródło
Może to może komuś pomóc, w moim przypadku problemem był „Microsoft.VisualStudio.Web.CodeGeneration.Desig”, musiałem zmienić odniesienie do pakietu w pliku „.csproj”, aby uwzględnić ExcludeAssets = „all”:
źródło