lad*_*dge 3 .net teamcity postsharp
我最近通过NuGet升级了PostSharp并且它已停止工作,但仅限于非常精选的情况.它在我的构建服务器(TeamCity)上不起作用,并且它不仅适用于我的一个项目.其他项目都正确转换.
我可以改变什么才能在我的一个项目中失去PostSharp转换?
如果发生这种情况,有两件事需要检查:
首先,确保您的调试和发布配置都不包含以下XML:
<SkipPostSharp>True</SkipPostSharp>
Run Code Online (Sandbox Code Playgroud)
该指令可以存在于一个或两个配置中,如果您像我一样,您只能通过构建服务器测试后者.
其次,最近的PostSharp版本(至少2.1.7.28+)改变了MSBuild目标导入项目的方式,特别是NuGet.过去,PS只是导入目标,如果PostSharp目标文件不存在,则项目无法加载.这是一个麻烦,因为在NuGet可以自动下载目标文件之前必须加载项目.
现在,import指令如下所示:
<Import Project="..\packages\PostSharp.2.1.7.28\tools\PostSharp.targets"
Condition="Exists('..\packages\PostSharp.2.1.7.28\tools\PostSharp.targets')" />
Run Code Online (Sandbox Code Playgroud)
这非常方便,因为这意味着在NuGet完成它之前项目仍然可以加载.
不幸的是,这也意味着当您第一次加载项目时,将不会加载PostSharp目标.而在TeamCity上,出于某种原因 - 即使在"未构建清除所有文件"之前 - 它也从未加载过这些目标.
将以下文件检入源代码控制可以解决问题:
最后,作为预防措施,我绝对推荐一些运行时测试(例如单元测试),以确保PostSharp正确转换了您期望的所有内容.对于使用PostSharp方面的每个项目,请考虑以下单元测试:
Assert.That(MyProject.IsTransformedByPostSharp, Is.True);
Run Code Online (Sandbox Code Playgroud)
酒店IsTransformedByPostSharp只是检查Post.IsTransformed财产.