2016-04-29 51 views
-1

我參考使用Reference標籤的另一個.NET程序集在我.csproj文件。我希望能夠在調試我的應用程序時進入該程序集,這需要將與其關聯的.pdb文件複製到輸出目錄。不幸的是,它的.pdb與組件不在同一個目錄中,這意味着MSBuild不會提取它。MSBuild - 如何爲程序集指定關聯的PDB文件?

有什麼辦法指向的MSBuild到.pdb,所以可以將它複製到輸出目錄? (我想我可以用一個Copy任務用於此目的的.pdb複製到剛剛建立之前相同的目錄,但感覺有點hackish。)

TL; DR如何我指定的.pdb爲引用在MSBuild,如果它不在同一目錄中的程序集?

謝謝!

+1

https://msdn.microsoft.com/en-us/library/ ms241613.aspx –

+1

*需要與其關聯的.pdb文件複製到輸出目錄*請參閱德米特里的鏈接,這是不正確的。 orignal pdb文件路徑被硬編碼到dll中,它是調試器尋找它的第一個地方 – stijn

回答

0

有在github回購稱爲msbuild。我不知道該怎麼exaclty它隨.NET框架的MSBuild效用涉及,但有一個hint如何相關的文件可以發現:

private void FindRelatedFiles 
(
    Reference reference 
) 
{ 
    string baseName = reference.FullPathWithoutExtension; 
    // Look for companion files like pdbs and xmls that ride along with 
    // assemblies. 
    foreach (string companionExtension in _relatedFileExtensions) 
    { 
     string companionFile = baseName + companionExtension; 
     if (_fileExists(companionFile)) 
     { 
      reference.AddRelatedFileExtension(companionExtension); 
     } 
    } 
    ... 
} 

其中_relatedFileExtensions是一個充滿the extensions數組:

private string[] _relatedFileExtensions = new string[] { ".pdb", ".xml", ".pri" }; 

所以,我們可以看到,baseName是沒有你的第三方參考擴展的完整路徑。因此,相關的* .pdb必須位於相同的目錄中,如果您希望將其複製爲ResolveAssemblyReferences target。

如果您想從其他來源複製第三方* .pdb文件,則必須處理「hackish」解決方案。其中之一是在AfterBuild目標複製:

<Target Name="AfterBuild"> 
    <Copy SourceFiles="PathToPdb" DestinationFolder="$(OutDir)"/> 
</Target> 

或者您也可以將文件標記爲content

<ItemGroup> 
    <Content Include="PathToPdb"> 
     <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </Content> 
</ItemGroup>