c# - 为什么我的 Service Fabric 代码会锁定它自己的 PDB?

标签 c# visual-studio-2015 azure-service-fabric pdb-files

我正在开发一个包含大量无状态服务和一个有状态服务的 Service Fabric 应用程序。当我第一次发布时,一切正常,并且已部署到我的本地集群。在此之后,如果我尝试打包或发布应用程序而不先明确停止它,我会收到以下错误:

CSC : error CS2012: Cannot open 'C:...\ProjectFolder\obj\x64\Debug\ProjectName.pdb' for writing -- 'The process cannot access the file 'C:...\ProjectFolder\obj\x64\Debug\ProjectName.pdb' because it is being used by another process.'

根据 process explorer ,PDB 被我自己的 ProjectName.exe 锁定了。这是我的应用程序中的单一有状态服务。

  1. 为什么我的 exe 会锁定它自己的 PDB?如果是 Visual Studio 做的,我能理解。
    • 我在我自己的代码中没有看到任何应该导致此问题的东西,所以我假设它是我正在调用的 Fabric 代码中的东西。
  2. PDB 与应用程序一起部署,但锁定的是原始源目录中的文件 - 为什么不是与运行代码相邻的 PDB?
  3. 为什么我只看到与有状态服务相关的错误,而不是与无状态服务相关的错误?
    • 我怀疑这与在启动时生成大量错误的有状态服务有关,Fabric 可能需要符号才能正确显示。
  4. 我如何才能阻止它发生 - 使用正确的 PDB 或根本不使用它们,除非我通过 Visual Studio 进行调试?

编辑:在 github 上提出.当前 workaround为此:

A current workaround at this point in time would be to restrict the Network Service access to the pdb in the build folder (obj\x64\Debug).

最佳答案

基于issue已提出,看起来现在已修复。

"Going to close the issue as we believe both issues have now been addressed by the 5.6 runtime and the 1.6 tooling."

似乎升级现在是第 4 点的答案。如果有人能回答 1-3,我会很乐意移动大绿色对勾。

关于c# - 为什么我的 Service Fabric 代码会锁定它自己的 PDB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41746210/

相关文章:

c# - 将 AutoMapper 与 WCF 数据服务和 EF4 集成的最佳实践

java - 无法使用 Visual Studio 2015 的 Java 扩展进行调试

visual-studio-2015 - fopen 用于写入但不独占

load-balancing - Service Fabric 是否提供 api 来在运行时在分区之间移动参与者

rest - Azure Service Fabric 中的服务远程处理与 RestFul 调用

c# - 以线程安全的方式添加到 Parallel.ForEach 循环中的列表

c# - 将整数添加到 ListView 进行排序

c# - 400 错误请求仅在 Android 应用程序中无效的主机名

c++ - 使用 std::distance 来初始化 const 成员有时会出错

azure - 无状态和有状态服务之间的可靠服务通信