私はいくつかのステートレスサービスと単一のステートフルサービスを含むサービスファブリックアプリケーションに取り組んでいます。私が初めてパブリッシュすると、すべてが問題なく、ローカルクラスタに展開されます。私は明示的にそれを最初に停止せずにアプリをパッケージまたは公開しようとした場合、この後、私は次のエラーを取得する:サービスファブリックコードが自分のPDBをロックするのはなぜですか?
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によってロックされています。これは私のアプリケーションでの単一のステートフルなサービスです。
- なぜ私のexeは独自のPDBをロックしますか? Visual Studioであれば分かります。
- これは私自身のコードには何も表示されていないので、これは私が呼び出しているファブリックコードの中にあるものと仮定しています。
- PDBはアプリケーションとともに配備されますが、元のソースディレクトリのファイルはロックされています。なぜ、実行中のコードに隣接するPDBではないのですか?
- なぜステートフルサービスではなく、ステートレスサービスに関するこのエラーが表示されるのですか?
- これは、起動時にステートフルサービスが多くのエラーを生成することと関係していると思われます。この場合、Fabricはシンボルを正しく表示する必要があります。
- Visual Studioを使用してデバッグしていない限り、正しいPDBを使用するか、まったく使用しないかはどうしたらいいですか?
編集:Raised on 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).
ステートフルサービスのasp.netコアですか?ソリューションにクラスライブラリプロジェクトがありますか? –
私はasp.netコアまたは.netコアを避けました。ファブリックでプラットフォームと構成権を取得するには、あまりにも多くの問題がありました。ファブリックからのダイレクト・デープは64ビットのみのサービスです。ステートフルサービスを含むこれらのうちの1つまたは2つは、任意のCPUで構築されたソリューション内のクラスライブラリを参照します。それは問題を引き起こす可能性がありますか? – Andyrooger
私は、クラスライブラリのビルド構成を変更した後でこれが起こるという問題を見てきました。その場合、セカンダリビルドによって解決されます。あなたはビルドで立ち往生しているのですか、あるいは別のビルドをやってもいいのですか? –