2016-04-29 15 views
-1

.csprojファイルのReferenceタグを使用して別の.NETアセンブリを参照しています。私は、出力ディレクトリにコピーされている.pdbファイルを必要とする私のアプリをデバッグ中にこのアセンブリにステップインできるようにしたいと思います。残念ながら、そのための.pdbは、アセンブリと同じディレクトリに存在しません。つまり、MSBuildがそのディレクトリを認識しません。MSBuild - アセンブリに関連するPDBファイルを指定する方法は?

MSBuildを.pdbにポイントする方法はありますか?そのため、出力ディレクトリにコピーできますか? (私はちょうど、ビルド前と同じディレクトリに.pdbをコピーするには、この目的のためにCopyタスクを使用することができたとし、それはハックビットを感じている。)

TL; DRは、私が参照用.pdbを指定する方法同じディレクトリにない場合、MSBuildのアセンブリ?

ありがとうございます!

+1

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

+1

*関連する.pdbファイルを出力ディレクトリにコピーする必要があります。*ドミトリーのリンクを参照してください。これは当てはまりません。 orignalのpdbファイルのパスはdllにハードコードされており、デバッガが探している最初の場所です – stijn

答えて

0

msbuildと呼ばれるgithubのレポがあります。私はそれは、.NET Frameworkに同梱されてMSBuildのユーティリティで関連exaclty方法を知りませんが、見つけることができますどのように関連するファイルについてhintがあります:

_relatedFileExtensionsthe extensionsでいっぱい配列です
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); 
     } 
    } 
    ... 
} 

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

これまでのように、baseNameは、サードパーティのリファレンスを拡張していない完全なパスです。したがって、関連する* .pdbは、ResolveAssemblyReferencesターゲットでコピーしたい場合は、同じディレクトリになければなりません。

thirdparty * .pdbファイルを別のソースからコピーする場合は、「ハッキリ」の解決策に対処する必要があります。そのうちの一つAfterBuildターゲットにそれをコピーすることです:

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

それとも、contentとしてファイルにマークを付けることができます。

<ItemGroup> 
    <Content Include="PathToPdb"> 
     <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </Content> 
</ItemGroup> 
関連する問題