2014-04-15 74 views
4

我們正在爲我們的開發團隊設置一個本地SymbolSource服務器。我們跟着a nice article written on SymbolSource server。我們使用TeamCity進行構建。對於每個版本,使用nuget push命令將.symbols.nupkg推送到本地SymbolSource,並將nuget包推送到本地NuGet服務器。SymbolSource服務器問題

的問題,我們正在經歷:

對於NuGet包MyPackage.1.1.0如果我們推到同一符號服務器它創建哈希,這就是它是如何關聯的每個版本的文件夾加載.pdb文件和.cs文件。 (這是我的理解,如果我錯了,請糾正我)。

在Visual Studio中設置符號服務器配置後,我們嘗試調試該項目。我們所遇到的是由Visual Studio生成的用於加載符號的哈希與在404結束於符號服務器上使用nuget push進行註冊時生成的哈希完全不同。(請參閱帶有提琴手狀態碼的附加文件。)如果我們創建在Symbol服務器上手動使用相同散列的文件夾,我們可以得到期望的結果,即進入代碼。

爲什麼在同一版本的dll/nuget文件中存在兩種不同的哈希值?

Two different guid's generated Fiddler output

回答

2

你所得到的值不散列(如它們不是文件內容哈希),他們是GUIDs。每個DLL-PDB對在構建時都會分配一個GUID。每個構建的DLL有一個不同的 GUID,即使它們是從完全相同的源代碼構建的!這意味着從符號服務器獲取PDB的唯一方法是如果使用完全相同的DLL。你得到一個完全不同的GUID的事實表明你沒有使用相同的DLL。所以在這種情況下,我可以想出的場景是:

  • 你的符號nuget包與你的正常nuget包有不同的dll。這似乎不太可能,如果您同時生成兩個,但是如果您不止一次構建包和二進制文件,這是可能的。
  • 您沒有使用從NuGet包中的DLL有其標誌包你的符號服務器中註冊
  • 你是不是在所有

的原因,你的「修復使用DLL從NuGet包'的作品是因爲Visual Studio顯然只使用GUID創建符號搜索路徑,但在加載它時不檢查PDB GUID。換句話說,它假定(公平)符號服務器將符號放在正確的位置。

解決您的問題的最佳方法是找出您從哪裏獲取不同的DLL。您可以通過使用

dumpbin.exe /headers mypackage.dll 

這應該產生某處包含PDB文件(!)鏈接該DLL的GUID和路徑的輸出使用dumpbin工具來找出哪些PDB鏈接到哪個DLL PDB。如果您將計算機上DLL的GUID和時間戳與符號服務器上的DLL/PDB中的GUID和時間戳進行比較,您應該能夠找出問題出在哪裏。

+0

這不是一個GUID,它是一個時間戳。您可以使用'.formats '將時間戳轉換爲WinDbg中的日期時間值。 '.formats 5011B05E'會輸出'Thu Jul 26 23:02:22 2012'。 –

+0

也許我錯了。看起來他們有一個GUID *和*一個時間戳。 –

+0

哇!這樣的詳細答案,甚至沒有我把圖像。感謝您花時間把我放在正確的道路上。感謝托馬斯閱讀我的問題,並試圖幫助我!我查看了細節,發現這兩個DLL都有不同的GUID生成。它現在讓我的問題變得更有趣了,「爲什麼這樣的行爲?」。我會嘗試可能的選擇,並會問社區如果我沒有得出結論。再次感謝 !! –