我正在使用Afterthought(与PostSharp类似)通过修改输出程序集将后构建更改应用于某些代码。目前,我的项目文件中(略)是这样的:构建完成后MSBuild从IntermediateOutputPath复制
<Target Name="AfterBuild">
<AfterThoughtTask TargetAssembly="$(TargetPath)" AmendWith="$(TargetDir)Amendments.dll" />
</Target>
基本上它说:编译之后,使用的运行过程中修改与Amendments.dll发现代码的输出组件AfterThoughtTask。这工作得很好,就像我期望的那样,用附加代码修改了输出到MyProject\bin\Debug\MyProject.dll
的MyProject.dll输出。
然后,我让我的项目文件,这个细微的变化:
<PropertyGroup>
<OutputPath>SomeOtherProjectLocation\bin\</OutputPath>
</PropertyGroup>
因此,所有我所做的就是改变输出路径。现在我调试AfterThoughtTask
,并在所有代码执行完成后点击一个断点。当我停在这个断点处时,文件SomeOtherProjectLocation\bin\MyProject.dll
(这是我打算修改的文件,坐在我期望它所在的文件夹中)似乎被修改过(文件大小为117kb,未修改时为103kb)。看起来好像现在事情进展良好。然后我释放断点,并突然文件大小下降到103kb,不知何故被替换为原始未修改的文件。查看诊断构建报告,AfterThoughtTask
是最后一个运行后的任务,没有报告的文件副本。
在同一个断点处再次运行,我发现坐在IntermediateOutputPath
目录(obj \ Debug)中的文件仍然是103kb(未修改),因此我试着查看是否覆盖修改的文件。当我处于断点处(任务执行结束时,但在控制权返回给构建之前),我将IntermediateOutputPath
目录中的文件重命名为MyProject.dll_hidden。我没有得到任何错误,但是我的文件不再被写入。
所以我只能假设该文件是从IntermediateOutputPath
目录复制到目标文件,但生成日志似乎并没有表明这一点,我不明白为什么改变OutputPath
会使它发生这种方式与之前的默认OutputPath
相比如何。任何人有任何指导吗?提前致谢。