【问题标题】:.Net Framework Class Library dll always changes when updating Service Fabric services.Net Framework 类库 dll 总是在更新 Service Fabric 服务时发生变化
【发布时间】:2018-08-20 12:27:34
【问题描述】:

我有一个在 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 Standard 类库有何不同?
  3. 如何解决此问题,以便我的服务仅在我进行真正的更改时更新?从 .Net Framework 移植到 .Net Standard?

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

【问题讨论】:

  • 它正在更新项目,因为库已经重新构建,可能是因为它发现了一个更改,可能是时间戳、依赖关系或其他内容。您使用的是托管构建还是 OnPrem?在托管时,您无需保留历史记录来跟踪更改,因此每次构建都会创建一个新包。

标签: c# azure-devops azure-service-fabric .net-standard-2.0


【解决方案1】:

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

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

简单的方法是使用Azure Service Fabric Application构建模板:新建一个构建定义>选择Azure Service Fabric Application模板,然后你会发现,有@ Visual Studio Build 任务的 MSBuild Arguments 中的 987654322@。

【讨论】:

  • 我已经在使用 Azure Service Fabric 应用程序模板,因此在构建 sln 文件时已经设置了确定性标志。但是,在构建 Service Fabric 应用程序的 sfproj 文件时,未在下一步中设置它。在那里设置标志解决了这个问题。/t:Package /p:PackageLocation=$(build.artifactstagingdirectory)\applicationpackage /p:Deterministic=true
猜你喜欢
  • 2016-02-24
  • 2019-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-17
  • 2016-12-13
  • 2018-08-27
  • 1970-01-01
相关资源
最近更新 更多