更新Service Fabric服务时,.Net Framework类库dll总是会更改

我有一个在Service Fabric中运行的无状态.Net Core服务。 在我的服务中,我引用了一个针对.Net Framework 4.7.1的类库。 我通过VSTS部署应用程序,其中一个构建步骤更新了带有更改的服务的应用程序版本。 https://docs.microsoft.com/en-us/vsts/build-release/tasks/utility/service-fabric-versioning

除了始终检测到类库的dll文件的更改外,一切正常。 即使我没有改变代码库中的任何东西! 这会导致构建步骤影响每个服务的版本。 不只是实际有更新的服务。

日志看起来像吼叫。 ‘MyClassLibrary.dll’是一个.Net Framework类库,我没有触及过代码。

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

我知道代码包中的更改检查是二进制比较。 所以二进制文件在编译时显然会发生变化。 但是,我不知道为什么。 我还有针对.Net Standard 2.0的代码库,它们不会导致此问题,因为只有在我实际触及代码时才会检测到更改。

我也知道可以手动省略不应该从应用程序包https://stackoverflow.com/a/34886586更新的文件。但是,这不是一个选项,因为部署链是自动的。

所以我有以下问题:

  1. 是什么原因导致.Net Framework类库的二进制文件发生变化?
  2. 它与.Net标准类库有何不同?
  3. 我如何解决它,以便我的服务只在我做出真正的更改时更新? 从.Net Framework到.Net Standard的端口?

非常感谢对此事的一些见解。

默认情况下,即使您没有进行任何更改,编译器也会创建不同的输出。 使用确定性编译器标志可确保具有相同输入的构建产生相同的输出。

因此,您需要在MSBuild参数中指定/p:Deterministic=true参数。

简单的方法是使用Azure Service Fabric Application构建模板:创建新的构建定义>选择Azure Service Fabric应用程序模板,然后您会发现,有/p:Deterministic=true /p:PathMap=$(Agent.BuildDirectory)=C:\在MSBuild Visual Studio Build任务的参数中。