Estoy publicando un sitio web ASP.NET Core MVC 3.0 y la carpeta de salida contiene muchas referencias en muchos idiomas a Microsoft.CodeAnalysis
bibliotecas, ¿alguien sabe por qué?
Por supuesto, el FxCopAnalyzers
paquete Nuget está instalado en el proyecto, pero no se publicó en una versión anterior del proyecto, por lo que no entiendo por qué es ahora, ya que debería ser útil solo en el momento del desarrollo, no en un entorno de producción.
asp.net-core
fxcop
microsoft.codeanalysis
Jonathan
fuente
fuente
Respuestas:
Encontré el mismo problema cuando utilicé la versión 3.0. Pero no creo que sea causado por .net core 3 compilando vistas en la publicación porque también hay View ViewCompilation en la
release/2.1
rama.Creo que tienes razón. Estos análisis deben usarse solo en tiempo de desarrollo.
Pero cuando desinstalo el SDK (3.0) manualmente e instalo el último SDK nuevamente , no puedo reproducir más. No sé por qué sucede, tal vez ya se ha solucionado. Es más probable que sea causado por otra razón: agregué una referencia adicional en otros paquetes que depende de Microsoft.CodeAnalysis por accidente). De todos modos, primero actualice su SDK a la última versión.
Otra cosa importante es que, cuando use Visual Studio para agregar un controlador, agregará una referencia
Microsoft.VisualStudio.Web.CodeGeneration.Design
automáticamente. Tenga en cuenta que este paquete dependeMicrosoft.CodeAnalysis.Common
indirectamente del paquete. AquíMicrosoft.CodeAnalysis.Common
hay un paquete compartido utilizado por la plataforma compiladora de Microsoft .NET ("Roslyn"). Si descarga este paquete y descomprime esta lib manualmente, encontrará que hay unMicrosoft.CodeAnalysis.dll
:Este paquete solo es necesario en Dev-Time. Si no elimina esta dependencia, obtendrá bastantes dlls relacionados
Microsoft.CodeAnalysis
en su carpeta de publicación.Elimine los paquetes que dependen
Microsoft.CodeAnalysis
, y luego no debería obtenerMicrosoft.CodeAnalysis
dlls relacionados:fuente
dotnet aspnet-codegenerator controlller ...
Para mí, esta línea dentro del
*.csproj
archivo resolvió el problema de alguna manera. Todavía implementa elMicrosoft.CodeAnalysis
, pero solo paraen
:Vea el comentario (por Jonathon Marolf) sobre el tema de Github.
fuente
Aquí está mi opinión al tratar de hacer que la solución sea más fácil de ver.
El problema, más que probable es el uso de
AddRazorRuntimeCompilation()
. Más específicamente, en el startup.cs es probable que agregue la compilación de tiempo de ejecución de la maquinilla de afeitar de esta manera:y para respaldar eso, su proyecto web probablemente tenga una referencia a
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
Ese paquete nuget depende de
Microsoft.CodeAnalysis
que esté produciendo toda esa salida no deseada en la carpeta de publicación.La solución es editar el archivo del proyecto y hacer que la dependencia sea condicional en el modo de depuración de la siguiente manera:
y luego en el archivo startup.cs condicionalmente llame
AddRazorRuntimeCompilation()
así:Esto hará que todas esas
Microsoft.CodeAnalysis
bibliotecas solo estén fuera cuando se compile en modo de depuración. Entonces, cuando publique usando el modo Release, no serán parte de la salida.fuente
Tal vez esto pueda ayudar a alguien, en mi caso el problema fue "Microsoft.VisualStudio.Web.CodeGeneration.Desig", necesitaba cambiar la referencia del paquete en el archivo ".csproj" para incluir ExcludeAssets = "all":
fuente