我最近通过 NuGet 升级了 PostSharp,但它已停止工作,但仅限于极少数情况下。它在我的构建服务器 (TeamCity) 上不起作用,也不适用于我的一个项目。其他项目都正确转换。
我可能会更改哪些内容以仅在我的一个项目中丢失 PostSharp 转换?
最佳答案
如果您遇到这种情况,有两件事需要检查:
首先,确保您的调试和发布配置不包含以下 XML:
<SkipPostSharp>True</SkipPostSharp>
该指令可以出现在一个或两个配置中,如果你像我一样,你只能通过你的构建服务器测试后者。
其次,最近的 PostSharp 版本(至少 2.1.7.28+)改变了 MSBuild 目标导入项目的方式,特别是 NuGet。以前PS只是简单的导入targets,如果PostSharp的targets文件不存在,项目就加载不出来。这很麻烦,因为必须先加载项目,然后 NuGet 才能自动下载目标文件。
现在,导入指令如下所示:
<Import Project="..\packages\PostSharp.2.1.7.28\tools\PostSharp.targets"
Condition="Exists('..\packages\PostSharp.2.1.7.28\tools\PostSharp.targets')" />
这真的很方便,因为这意味着项目仍然可以在 NuGet 完成之前加载。
不幸的是,这也意味着当您第一次加载项目时,不会加载 PostSharp 目标。而在 TeamCity 上,出于某种原因——即使未选中“构建前清理所有文件”——它也从未加载过这些目标。
将以下文件 checkin 源代码管理解决了问题:
最后,作为预防措施,我绝对推荐一些运行时测试(例如单元测试),以确保 PostSharp 正确地转换了您期望的一切。对于每个使用 PostSharp 方面的项目,请考虑这样的单元测试:
Assert.That(MyProject.IsTransformedByPostSharp, Is.True);
其中属性
IsTransformedByPostSharp
只是检查 Post.IsTransformed
属性。关于.net - 为什么 PostSharp 在构建服务器上跳过我的一个项目?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14991781/