我使用Reference
文件中的.csproj
标记引用了另一个.NET程序集。我希望能够在调试我的应用程序时进入此程序集,这需要将与其关联的.pdb
文件复制到输出目录。不幸的是,它的.pdb
与程序集不在同一目录中,这意味着MSBuild不会接收它。
有没有办法将MSBuild指向.pdb
,所以它可以将它复制到输出目录? (我想我可以为此目的使用Copy
任务在构建之前将.pdb
复制到同一目录,但这感觉有点hackish。)
TL; DR 如果在MSBuild中引用的程序集指定.pdb
,它是否不在同一目录中?
谢谢!
答案 0 :(得分:0)
github上有一个名为msbuild的回购。我不知道它与.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 目标复制。
如果要从其他来源复制第三方* .pdb文件,则必须处理“hackish”解决方案。其中之一是在AfterBuild目标中复制它:
<Target Name="AfterBuild">
<Copy SourceFiles="PathToPdb" DestinationFolder="$(OutDir)"/>
</Target>
或者您可以将文件标记为content:
<ItemGroup>
<Content Include="PathToPdb">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>