【问题标题】:Why is PostSharp skipping one of my projects on the build server?为什么 PostSharp 跳过我在构建服务器上的一个项目?
【发布时间】:2013-02-21 07:21:17
【问题描述】:

我最近通过 NuGet 升级了 PostSharp,但它已停止工作,但仅在极少数情况下。它不适用于我的构建服务器 (TeamCity),并且它仅不适用于我的 一个 项目。其他项目都正确转换。

如果只在我的一个项目中丢失 PostSharp 转换,我可能会做出哪些改变?

【问题讨论】:

    标签: .net teamcity postsharp


    【解决方案1】:

    如果发生这种情况,有两件事需要检查:

    首先,确保您的调试和发布配置不包含以下 XML:

    <SkipPostSharp>True</SkipPostSharp>
    

    这个指令可以出现在一个或两个配置中,如果你和我一样,你只能通过你的构建服务器测试后者。


    其次,最近的 PostSharp 版本(至少 2.1.7.28+)改变了将 MSBuild 目标导入项目的方式,特别是使用 NuGet。以前是 PS 只是简单地导入了目标,如果 PostSharp 目标文件不存在,则项目没有加载。这很麻烦,因为必须先加载项目,然后 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 上,出于某种原因 - 即使未选中“在构建之前清理所有文件” - 它从未加载这些目标。

    将以下文件签入源代码管理解决了该问题:

    • PostSharp.properties
    • PostSharp.targets
    • PostSharp.tasks

    最后,作为预防措施,我绝对推荐一些运行时测试(例如单元测试),以确保 PostSharp 正确地转换了您所期望的一切。对于每个使用 PostSharp 方面的项目,请考虑这样的单元测试:

    Assert.That(MyProject.IsTransformedByPostSharp, Is.True);
    

    IsTransformedByPostSharp 属性仅检查 Post.IsTransformed 属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-10
      • 1970-01-01
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      • 2013-03-11
      • 2022-07-10
      相关资源
      最近更新 更多