Je publie un site Web ASP.NET Core MVC 3.0 et le dossier de sortie contient de nombreuses références dans de nombreuses langues à Microsoft.CodeAnalysis
librairies, quelqu'un sait pourquoi?
Bien sûr, le package FxCopAnalyzers
Nuget est installé sur le projet, mais il n'a pas été publié dans une version antérieure du projet, donc je ne comprends pas pourquoi il l'est maintenant car il ne devrait être utile qu'au moment du développement non dans un environnement de production.
contient de nombreuses références dans de nombreuses langues aux bibliothèques Microsoft.CodeAnalysis
J'ai rencontré le même problème lorsque j'ai utilisé la version 3.0. Mais je ne pense pas que cela soit dû au fait que .net core 3 compile des vues sur la publication car il y a aussi View ViewCompilation dans le release/2.1
branche .
il ne devrait être utile qu'au moment du développement et non dans un environnement de production.
Je pense que vous avez raison. Ces analyses doivent être utilisées uniquement lors du développement.
Mais lorsque je désinstalle le SDK (3.0) manuellement et réinstalle le dernier SDK , je ne peux plus ne pas reproduire. Je ne sais pas pourquoi cela se produit, peut-être qu'il a été corrigé maintenant. Cela est probablement dû à une autre raison: j'ai ajouté une référence supplémentaire sur d'autres packages qui dépend de Microsoft.CodeAnalysis par accident). Quoi qu'il en soit, veuillez d'abord mettre à niveau votre SDK vers la dernière version.
Une autre chose importante est que lorsque vous utilisez Visual Studio pour ajouter un contrôleur, il ajoutera une référence sur Microsoft.VisualStudio.Web.CodeGeneration.Design
automatiquement. Notez que ce package a une dépendance sur Microsoft.CodeAnalysis.Common
package indirectement. Ici le Microsoft.CodeAnalysis.Common
est un package partagé utilisé par la plate-forme du compilateur Microsoft .NET ("Roslyn"). Si vous téléchargez ce package et décompressez cette lib manuellement, vous constaterez qu'il y a un Microsoft.CodeAnalysis.dll
:
Microsoft.codeanalysis.common.3.3.1 / ├───lib / │ └───netstandard2.0 / │ ├─── ... │ ├─── Microsoft.CodeAnalysis.dll │ ├─── Microsoft.CodeAnalysis.pdb │ ├─── Microsoft.CodeAnalysis.xml │ └─── ... ├─ ──package / │ └─── ... └───_rels /
Ce package n'est nécessaire que pour Dev-Time. Si vous ne supprimez pas cette dépendance, vous obtiendrez un grand nombre de DLL liées à Microsoft.CodeAnalysis
dans votre dossier de publication.
<ItemGroup>
<!-- this is not necessary when publishing -->
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.0.0" />
</ItemGroup>
Supprimez les packages qui dépendent de Microsoft.CodeAnalysis
, et vous ne devriez pas obtenir de Microsoft.CodeAnalysis
DLL liées:
Pour moi, cette ligne à l'intérieur *.csproj
file a résolu le problème d'une manière ou d'une autre. Il déploie toujours le Microsoft.CodeAnalysis
, mais uniquement pour en
:
<PropertyGroup>
<!-- ... -->
<SatelliteResourceLanguages>en</SatelliteResourceLanguages>
</PropertyGroup>
Voir le commentaire (par Jonathon Marolf) sur la question Github.
Voici ma façon d'essayer de rendre la solution plus facile à voir.
Le problème, plus que probable, est l'utilisation de AddRazorRuntimeCompilation()
. Plus précisément, dans startup.cs, vous ajouterez probablement une compilation d'exécution de rasoir comme ceci:
IMvcBuilder builder = services.AddControllersWithViews()
.AddRazorRuntimeCompilation();
et pour soutenir cela, votre projet web a probablement une référence à Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
Ce paquet nuget a une dépendance sur Microsoft.CodeAnalysis
Qui produit toute cette sortie indésirable dans le dossier de publication.
Le correctif consiste à modifier le fichier de projet et à conditionner la dépendance au mode débogage comme suit:
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
Version="3.1.0" Condition="'$(Configuration)' == 'Debug'" />
</ItemGroup>
puis dans le fichier startup.cs appeler conditionnellement AddRazorRuntimeCompilation()
comme ceci:
IMvcBuilder builder = services.AddControllersWithViews();
#if DEBUG
if (Env.IsDevelopment()) {
builder.AddRazorRuntimeCompilation();
}
#endif
Cela provoquera la sortie de toutes ces bibliothèques Microsoft.CodeAnalysis
Uniquement lors de la compilation en mode débogage. Alors maintenant, lorsque vous publiez en utilisant le mode Release, ils ne feront pas partie de la sortie.
Peut-être que cela peut aider quelqu'un, dans mon cas, le problème était "Microsoft.VisualStudio.Web.CodeGeneration.Desig", je devais changer la référence du package dans le fichier ".csproj" pour inclure ExcludeAssets = "all":
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.1" ExcludeAssets="All" />