Como impedir que os arquivos Microsoft.CodeAnalysis. *. Resources.dll localizados sejam publicados pelo ASP.NET Core?

8

Quando publico um projeto do ASP.NET Core 3.0, recebo algumas pastas localizadas em que os 4 assemblies mostrados estão em cada uma dessas pastas. Não sei por que essas pastas e arquivos são incluídos. Nenhum dos meus pacotes faz referência a um CodeAnalysispacote.

Eu adicionei <PreserveCompilationContext>false</PreserveCompilationContext>no arquivo csproj, mas não ajudou. Existe uma maneira de excluí-los?

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Tony_Henrich
fonte
Hey talvez isso pode ajudá-lo stackoverflow.com/a/58298619/9358386
Kinjal Parmar

Respostas:

4

Você recebe muitas pastas de idiomas que contêm CodeAnalysis.dllarquivos na saída publicada, se você tiver uma referência ao projeto Microsoft.VisualStudio.Web.CodeGeneration.Design, necessária para os controladores de andaimes. Se isso for verdade para o seu projeto, altere a referência do pacote no seu .csprojarquivo para incluirExcludeAssets="all"

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

Por exemplo, *.csprojarquivo antigo

<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>

Novo arquivo *.csprojdeve 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
fonte
4
Olá, meu aplicativo usa asp net core 3 e adicionei * .csproj ExcludeAssets = "All", mas isso não funcionou. Alguma outra idéia?)
al.koval 02/12/19
@ al.koval, limpe e construa ou exclua a pasta bin com sua versão, construa novamente.
Andrej Lucansky
2
Estou com o mesmo problema. Eu até tentei excluir completamente a referência Microsoft.VisualStudio.Web.CodeGeneration.Design. Ainda tenho essa ninhada na pasta de implantação. Excluindo exct da pasta bin não ajuda. Doy, você tem alguma outra idéia?
Ali Erdoğan
4

No meu caso, a origem dessas pastas localizadas era do pacote Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation. Depende do Microsoft.CodeAnalysis.Razor. Você pode ler mais sobre o objetivo do pacote aqui: https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-compilation?view=aspnetcore-3.1

Você não pode simplesmente excluir um ativo ao tentar tirar proveito do pacote. Minha solução alternativa foi incluir condicionalmente a referência do pacote sempre que o projeto estiver no modo de depuração. referência de pacote condicional

Em seguida, usei uma diretiva #if pré-processador para executar condicionalmente o código que permite a compilação do razor runtime. diretiva pré-processador compilação em tempo de execução

Observação: pode ser necessário excluir sua pasta bin para ver as pastas removidas após uma compilação. Além disso, verifique se está construindo com a configuração correta da solução.

Consegui encontrar um problema no Github descrevendo esse cenário exato, mas infelizmente nunca foi resolvido. https://github.com/dotnet/extensions/issues/2247

canguru
fonte