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

时间:2017-01-19 15:55:16

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

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

  

CSC:错误CS2012:无法打开' C:... \ ProjectFolder \ _ obj \ x64 \ Debug \ ProjectName.pdb'写作 - '进程无法访问文件&C; ... \ ProjectFolder \ _dj \ x64 \ Debug \ ProjectName.pdb'因为它正被另一个进程使用。'

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

  1. 为什么我的exe会锁定自己的PDB?我可以理解它是否是Visual Studio所做的。
    • 我在自己的代码中没有看到任何导致这种情况的内容,所以我假设它在Fabric代码中的某些内容我打电话。
  2. PDB与应用程序一起部署,但它是原始源目录中被锁定的文件 - 为什么不是与正在运行的代码相邻的PDB?
  3. 为什么我只看到与有状态服务有关的错误,而不是无状态服务?
    • 我怀疑这与状态服务有关,在启动时会产生大量错误,Fabric可能需要符号来正确显示。
  4. 我怎么能阻止它发生 - 要么使用正确的PDB,要么根本不使用它们,除非我通过Visual Studio进行调试?
  5. 编辑:在github上加注。目前为workaround

      

    此时的当前解决方法是限制网络服务对构建文件夹(obj \ x64 \ Debug)中pdb的访问。

1 个答案:

答案 0 :(得分:0)

根据引发的issue,看起来现在已经修复了。

  

“我们相信这两个问题现在已经由5.6运行时和1.6工具解决了。”

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