Les dll .Net Framework Class Library changent toujours lors de la mise à jour des services Service Fabric

J’ai un service .Net Core sans état qui s’exécute dans Service Fabric. Dans mes services, je fais référence à une bibliothèque de classe qui cible .Net Framework 4.7.1. Je déploie l’application via VSTS et l’une des étapes de la création met à jour la version de l’application pour les services avec les modifications. https://docs.microsoft.com/en-us/vsts/build-release/tasks/utility/service-fabric-versioning

Tout fonctionne bien sauf que les modifications sont toujours détectées pour le fichier dll de la bibliothèque de classes. Même si je n’ai rien changé dans la bibliothèque de code! Cela amène l’étape de construction à modifier la version de chaque service. Pas seulement les services qui ont réellement des mises à jour.

Les journaux ressemble à ci-dessous. ‘MyClassLibrary.dll’ est une bibliothèque de classes .Net Framework pour laquelle je n’ai pas touché le code.

2018-03-12T11:39:51.1989307Z Searching service 'MyServicePkg' for changes... 2018-03-12T11:39:51.2247570Z Searching package 'Code' for changes... 2018-03-12T11:39:51.9878149Z The file 'MyClassLibrary.dll' has changed. 2018-03-12T11:39:54.3850926Z Updated package 'MyServicePkg\Code' from version '1.0.0' to '1.0.1'. 

Je suis conscient que la vérification des modifications dans le package de code est une comparaison binary. Donc, le binary change évidemment lorsque le projet est compilé. Cependant, je ne sais pas pourquoi. J’ai également des bibliothèques de code qui ciblent .Net Standard 2.0 et elles ne causent pas ce problème car les modifications sont détectées uniquement lorsque j’ai touché le code.

Je sais également qu’il est possible d’omettre manuellement les fichiers qui ne devraient pas être mis à jour à partir du package d’application https://stackoverflow.com/a/34886586. Cependant, ce n’est pas une option, car la chaîne de déploiement est automatisée.

J’ai donc les questions suivantes:

  1. Qu’est-ce qui fait que le binary d’une bibliothèque de classes .Net Framework change?
  2. En quoi diffère-t-il d’une bibliothèque de classes .Net Standard?
  3. Comment puis-je contourner le problème afin que mes services ne soient mis à jour que lorsque j’apporte de réels changements? Port de .Net Framework à .Net Standard?

Un aperçu de la question est grandement apprécié.

Par défaut, le compilateur créera différentes sorties même si vous n’avez apporté aucune modification. Utilisez l’indicateur de compilateur déterministe pour vous assurer que les versions avec les mêmes entrées produisent les mêmes sorties.

Donc, vous devez spécifier /p:Deterministic=true dans les arguments MSBuild.

La méthode la plus simple consiste à utiliser un modèle de génération d’ application Azure Service Fabric : créez une nouvelle définition de construction> Sélectionnez un modèle d’ application Azure Service Fabric /p:Deterministic=true /p:PathMap=$(Agent.BuildDirectory)=C:\ in MSBuild Arguments de la tâche Visual Studio Build.