【发布时间】:2013-07-16 18:06:15
【问题描述】:
我正在使用 Mono 的 Mono.Cecil 包,当我从自定义 msbuild 任务调用以下命令时遇到了问题:
ModuleDefinition.Write(AssemblyFileName, new WriterParameters { WriteSymbols = true });
程序集保存完好,完全符合我的需要。如果我更改了程序集文件名以测试是否创建了 pdb,它是并且当替换为另一个 pdb 时,它正在正确调试。但是,当我正常构建时,程序集的 pdb 仍然是旧的 pdb。我认为 mono 正在创建 pdb,而 msbuild 正在用旧的覆盖它。
这是我尝试导入项目的目标:
<PropertyGroup>
<TaskAssemblyFileDir>$(SolutionDir)PropertyObserver.Tasks\$(OutDir)</TaskAssemblyFileDir>
<TaskAssemblyFileUnescapeDir>$([MSBuild]::Unescape('$(TaskAssemblyFileDir)'))</TaskAssemblyFileUnescapeDir>
<TaskAssemblyFile>$(TaskAssemblyFileUnescapeDir)PropertyObserver.Tasks.dll</TaskAssemblyFile>
</PropertyGroup>
<UsingTask TaskName="PropertyObserverTask" AssemblyFile="$(TaskAssemblyFile)" />
<Target Name="PropertyObserver" DependsOnTargets="AfterBuild">
<PropertyObserverTask AssemblyPath="$(TargetPath)" />
</Target>
我不确定创建 pdb 的目标 msbuild 调用是什么。我以为它是 AfterBuild,但事实并非如此。
任何建议都会有所帮助。
【问题讨论】:
-
通常编译器会生成 pdb。所以对 CSC 的调用会生成它。
-
嗨,是的,我已经在http://msdn.microsoft.com/en-us/library/ms171479%28v=vs.90%29.aspx 进行了调查。在我看来,它发生在构建目标中。但是,当我将值“DependsOnTargets”更改为 Build 时,我仍然遇到同样的问题。编辑我在构建后更改 dll。
-
作为参考,您可能想看看 PostSharp 如何设置它的构建目标,因为它也进行编织。您还可以打开详细或诊断构建输出以查看 pdb 何时被写入/覆盖。
-
我设法弄明白了。任务没有更新。因此,当我在构建后事件中运行我的 exe 时,它正在工作并且我可以调试。但是当我尝试使用该任务时,它什么也没做。我重新启动了我的视觉工作室....并且它起作用了。 (-_-) 谢谢大家!
标签: .net msbuild msbuild-task mono.cecil