チームが使用するライブラリを、TeamCityからネットワークフォルダーに展開されるnugetパッケージに入れました。ただし、このコードをデバッグすることはできません! SymbolSourceは私が読んだ1つのソリューションですが、Teamcityから直接.pdb/sourceファイルにアクセスする方法を見つけたいと思います。誰もこれを行う方法を知っていますか?
編集チェックすると'Include Symbols and Source'
Nuget Packビルドステップで、TeamCityはネットワークフォルダーに.nupkgファイルに加えて.Symbol.nupkgを作成します。 .Symbol.nupkgには、srcおよび.pdbファイルが含まれています。
編集未チェック'Include Symbols and Source'
をTeamCityに追加し、nuspecファイルに次を追加しました。
<files>
<file src="..\MyLibrary\bin\release\MyLibrary.dll" target="lib\net40" />
<file src="..\MyLibrary\bin\release\MyLibrary.pdb" target="lib\net40" />
<file src="..\MyLibrary\*.cs" target="src" />
<file src="..\MyLibrary\**\*.cs" target="src" />
</files>
これにより、dll、pdb、およびライブラリのソースファイルがnugetパッケージに追加され、シンボルサーバーにのみ必要と思われる.Symbolsファイルは生成されませんでした。
つまり、コードをステップ実行して例外を表示できますが、ブレークポイントを設定する前にディスク上のファイルを見つけて開く必要がある場合があります。明らかに、ソースが正しいリビジョンであることに注意する必要があります。
ステップ1の詳細
現在、Nuspecを使用せずにパッケージ化する場合は、Nuspecを作成し、libフォルダー内のファイルのリストにpdbを追加する必要があります。「NuGet spec」は、 NuGet docs 。次に、Team City Nuget Packステップが新しいnuspecを参照していることを確認します。
ステップ2の詳細
ソリューションを開いたら、[ソリューション]を右クリックし、[プロパティ...共通プロパティ...デバッグソースファイル]を選択して、関連するバイナリリファレンスのルートソースディレクトリを追加します。または [〜#〜] msdn [〜#〜] を参照してください。デバッグ中にソリューションプロパティを開くことはできません。
Visual Studio 2017 15.5 preview2から、次のようなものをプロジェクトファイルに追加できます。
<PropertyGroup>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<IncludeSymbolsInPackage>true</IncludeSymbolsInPackage>
<DebugSymbols>true</DebugSymbols>
<DebugType>portable</DebugType> <!-- Required for EmbedSources -->
<EmbedSources>true</EmbedSources>
</PropertyGroup>
<ItemGroup>
<!-- Does the equivalent of EmbedSources in MSBuild (hopefully won't be needed long term) -->
<Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" />
</ItemGroup>
この方法はまだ初期の段階であり、おそらくその使用にはいくつかの注意事項があります。詳細については このコメント の下部と関連する議論を参照してください。
DotPeekの最新バージョン(無料!)は、シンボルサーバーとして機能し、その場でpdbファイルを生成できます。これにより、teamcity経由で提供されるdllをデバッグできました。
ここからダウンロードしてください:
http://blog.jetbrains.com/dotnet/2014/04/09/introducing-dotpeek-1-2-early-access-program/
ここで設定する方法の説明。
もちろん 独自のシンボルサーバーを設定および構成する が可能ですが、おそらく最も簡単です...
これらはすべて、ProGetの無料版で実行できます。
免責事項-私の仕事は Inedo
.nuspec
(<package>
の直下):
<files>
<file src="bin\$configuration$\$id$.pdb" target="lib\net451\" />
</files>
(net451
をコンパイルするプラットフォームに変更します)
これを行う非常に簡単な方法を見つけました。これについては、ここでブログに書いています:
https://mattfrear.com/2017/11/29/speed-up-development-in-a-nuget-package-centric-solution/
これは、新しい.NET Coreスタイルの.csprojを<PackageReference>
(.NET Coreまたは.NET Frameworkのいずれか)と共に使用している場合にのみ機能します。
これも、NuGetパッケージのソースコードにアクセスできることを前提としています。
C:\Users\matt\.nuget\packages\
です)、上書きします既存のNuGetパッケージ.dll。それでおしまい!デバッグ中にパッケージにステップインできるはずです。 .pdbsまたはソースサーバーをいじることはありません。これにより、開発サイクルが大幅に短縮されました。
パッケージのソースコードがある場合、絶対確実な(ただし面倒な)メソッドは次のとおりです。
NuGetパッケージ内でデバッグしたいメソッドが、コードではなくフレームワークによって呼び出されたため、この方法でそれを行う必要があったため、それに踏み込むことができませんでした。 (私の場合、メソッドはASP.NET DelegatingHandlerでした)。
完了したら、NuGetパッケージが正しく参照されるように、ソース管理を介してすべての変更を元に戻します。
この質問はもともと投稿されていたため、Jetbrainsはこれを達成する方法に関するブログ投稿全体を書いています。手順は次のように要約できます。
Nuget Packageのビルド手順を使用している場合は、[シンボルとソースを含める]をオンにして.symbol.nupkg
これにはPDBが含まれます。 Symbol Files Indexerがこのファイルの内部を見るのに十分スマートであるかどうかに応じて、機能するようにファイル拡張子を変更する必要があります。
詳細については、こちらをご覧ください: https://blog.jetbrains.com/teamcity/2015/02/setting-up-teamcity-as-symbol-and-source-server/
これは私が働いていることがわかったものですが、すべてのステップはおそらく必要ではありません...
注意:これは両方をデバッグすることを許可しません。nugetパッケージまたはそれがインストールされているソリューションのいずれかのみをデバッグします。
Tools > Options > Debugging > General > "Require source files to exactly match the original version"
が[〜#〜] not [〜#〜]にチェックされていることを確認します。"Enable just my code"
が[〜#〜] not [〜#〜]になっていることを確認してくださいTools > Options > Debugging > Symbols
に新しいフォルダーを追加します。 (あなたは文字通りフォルダパスを入力します、下の画像を参照)Debug > Attach to Process...
をクリックしますiisexpress
を見つけます(複数ある場合がありますが、すべてに害を及ぼすことはありません)コードがパブリックGitリポジトリにある場合、または少なくともネットワーク内で認証なしでアクセスできる場合、GitLinkはオプションになります。
https://github.com/GitTools/GitLink
GitLinkは、Gitサーバーを指すようにPDBを変更することにより、シンボルサーバーを廃止します。しかし、前述のように、これによりGitリポジトリがパブリックであることが必要になります。これまでは、プライベートリポジトリにアクセスするときに「適切な」認証方法がありませんでした。