¿Cómo evitar que los archivos localizados Microsoft.CodeAnalysis. *. Resources.dll sean publicados por ASP.NET Core?

8

Cuando publico un proyecto ASP.NET Core 3.0, obtengo algunas carpetas localizadas donde los 4 ensambles que se muestran están en cada una de estas carpetas. No estoy seguro de por qué se incluyen estas carpetas y archivos. Ninguno de mis paquetes hace referencia a un CodeAnalysispaquete.

He añadido <PreserveCompilationContext>false</PreserveCompilationContext>en el archivo csproj pero no sirvió de nada. ¿Hay alguna manera de excluirlos?

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Tony_Henrich
fuente
Hola, tal vez esto pueda ayudarte a stackoverflow.com/a/58298619/9358386
Kinjal Parmar el

Respuestas:

4

Si CodeAnalysis.dlltiene una referencia de proyecto Microsoft.VisualStudio.Web.CodeGeneration.Design, necesita muchas carpetas de idiomas que contienen archivos en su salida publicada , lo cual es necesario para los controladores de andamios. Si eso es cierto para su proyecto, cambie la referencia del paquete en su .csprojarchivo para incluirExcludeAssets="all"

<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.0.0" ExcludeAssets="All" />

Por ejemplo, *.csprojarchivo antiguo

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <UserSecretsId>aspnet-foo-4E53EF45-B3BE-4943-81BE-2449DC5AA2BC</UserSecretsId>
    <BlazorLinkOnBuild>false</BlazorLinkOnBuild>
  </PropertyGroup>

  <ItemGroup>
    <!-- ... -->
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design"
                      Version="3.0.0" />
  </ItemGroup>

  <ItemGroup>
    <!-- ... -->
  </ItemGroup>
</Project>

El nuevo archivo *.csprojdebe ser

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <UserSecretsId>aspnet-foo-4E53EF45-B3BE-4943-81BE-2449DC5AA2BC</UserSecretsId>
    <BlazorLinkOnBuild>false</BlazorLinkOnBuild>
  </PropertyGroup>

  <ItemGroup>
    <!-- ... -->
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design"
                      Version="3.0.0"
                      ExcludeAssets="All" />
  </ItemGroup>

  <ItemGroup>
    <!-- ... -->
  </ItemGroup>
</Project>
Do Nhu Vy
fuente
55
Hola, mi aplicación utiliza asp net core 3 y agregué * .csproj ExcludeAssets = "All", pero esto no funcionó. ¿Alguna otra idea?)
al.koval
@ al.koval clean and build, o elimine la carpeta bin con su versión, vuelva a compilar.
Andrej Lucansky
3
Experimento el mismo problema. Incluso intenté eliminar completamente la referencia Microsoft.VisualStudio.Web.CodeGeneration.Design. Todavía tengo esta basura en la carpeta de implementación. Eliminando la carpeta bin exct. no ayuda. ¿Tienes alguna otra idea?
Ali Erdogan el
4

En mi caso, la fuente de estas carpetas localizadas era del paquete Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation. Tiene una dependencia en Microsoft.CodeAnalysis.Razor. Puede leer más sobre el propósito del paquete aquí: https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-compilation?view=aspnetcore-3.1

No puede simplemente excluir un activo cuando intenta aprovechar el paquete. Mi solución fue incluir condicionalmente la referencia del paquete siempre que el proyecto esté en modo de depuración. referencia de paquete condicional

Luego utilicé una directiva de preprocesador #if para ejecutar condicionalmente el código que permite la compilación de tiempo de ejecución de afeitar. directiva de pre-procesador razor runtime compilation

Nota: es posible que deba eliminar su carpeta bin para ver las carpetas eliminadas después de una compilación. Además, asegúrese de construir bajo la configuración correcta de la solución.

Pude encontrar un problema de Github que describe este escenario exacto, pero desafortunadamente nunca se resolvió. https://github.com/dotnet/extensions/issues/2247

Kangarosky
fuente