我可以更改我的帖子编译器的顺序吗?

时间:2014-03-17 11:36:13

标签: c# visual-studio code-contracts postsharp

如何在visual studio中更改我的后期编译器的顺序?

具体来说,我想在Postsharp之后使代码合同发布后发生。默认情况下,它是相反的。

2 个答案:

答案 0 :(得分:2)

也许这会指向正确的方向:

PostSharp由Program Files\PostSharp 2.1\PostSharp.targets

执行

包含在Program Files\MSBuild\v4.0\Custom.After.Microsoft.Common.targets

包含在Windows\Microsoft.NET\Framework\v4.0\Microsoft.Common.targets

包含在Windows\Microsoft.NET\Framework\v4.0\Microsoft.CSharp.targets

包含在YourProject.csproj

必须有像

这样的东西

<Import Project="$(ContractsPath)\Microsoft.Contract.targets" />

围绕所有以前的文件。找到它并将其放在行之后

<Import Project="C:\Program Files (x86)\PostSharp 2.1\PostSharp.targets" Condition=" '$(DontImportPostSharp)' == '' AND Exists('C:\Program Files (x86)\PostSharp 2.1\PostSharp.targets')" />

Custom.After.Microsoft.Common.targets

并尝试编译。

注意:替换版本和目录以匹配您的环境和安装路径。

答案 1 :(得分:2)

首先,不推荐在CodeContracts重写器之前执行PostSharp重写器,因为CodeContracts重写器在PostSharp更改后可能无法理解输入程序集。

以下是如果您仍想要操作它,如何确定构建步骤顺序的说明。

PostSharp使用标准MSBuild扩展点将自身插入到构建过程中 - &#34; DependsOn&#34;属性,如MSDN上所述:How to: Extend the Visual Studio Build Process

特别是被覆盖的属性&#34; CompileDependsOn&#34;在编译步骤后插入PostSharp后编译器。你可以在PostSharp.targets文件中找到这篇文章:

<CompileDependsOn>
  PostSharp30TimestampBeforeCompile;
  $(CompileDependsOn);
  PostSharp30TimestampAfterCompile;
  PostSharp30
</CompileDependsOn>

要调试整个构建过程,您可以在&#34;工具&#34;中启用MSBuild的诊断详细程度。 - &GT; &#34;选项&#34; - &GT; &#34;项目和解决方案&#34; - &GT; &#34;构建并运行&#34;。查找字符串&#34; CompileDependsOn =&#34;在构建输出中查看构建步骤的顺序。 CodeContractInstrument将在此列表中的PostSharp30之前。

您可以操纵&#34; CompileDependsOn&#34;的值。构建/项目文件中的属性,用于更改任务的顺序。