C# msbuild的自定义IL重写插件
我想创建一个自定义msbuild任务,将IL rwriting应用于我的输出程序集 目前我已经在使用PostSharp,现在尝试扩展重写功能 对于某些特殊情况,我使用Mono.Cecil将一些代理类型重写到程序集中。现在这个很好用 但是现在我想截取实际构建和PostSharp转换之间的构建过程,以便在下一步由PostSharp实现的代理类型上生成方面 我已经联系了PostSharp的支持人员并得到了指示: PostSharp通过重写MSBuild属性CompiledPendson(有关MSDN的更多信息),将其自身注入到生成过程中 您可以在编译后但在PostSharp之前执行自己的任务,方法是在*.csproj文件中的PostSharp.targets import语句之前重写compiledPendson属性。PostSharp通过重写MSBuild属性compiledPendson(有关MSDN的详细信息)将其自身注入生成过程 通过在*.csproj文件中的PostSharp.targets导入语句之前重写compiledPendson属性,可以在编译之后、PostSharp之前执行自己的任务 我已在PostSharp.targets文件中找到包含覆盖的位置:C# msbuild的自定义IL重写插件,c#,msbuild,postsharp,msbuild-task,mono.cecil,C#,Msbuild,Postsharp,Msbuild Task,Mono.cecil,我想创建一个自定义msbuild任务,将IL rwriting应用于我的输出程序集 目前我已经在使用PostSharp,现在尝试扩展重写功能 对于某些特殊情况,我使用Mono.Cecil将一些代理类型重写到程序集中。现在这个很好用 但是现在我想截取实际构建和PostSharp转换之间的构建过程,以便在下一步由PostSharp实现的代理类型上生成方面 我已经联系了PostSharp的支持人员并得到了指示: PostSharp通过重写MSBuild属性CompiledPendson(有关MSDN的
<PropertyGroup Condition="'$(InjectPostSharp30)' != 'False'">
<PostSharp30DependsOn>
$(PostSharp30DependsOn);
PostSharp30ExtractBinaries;
BeforePostSharpTransformation; // I added this one
</PostSharp30DependsOn>
<PostSharpInspectDependsOn>
$(PostSharpInspectDependsOn);
PostSharp30InspectConstants;
PostSharp30InspectReferences;
PostSharp30DisablePreviousVersions
</PostSharpInspectDependsOn>
<CoreCompileDependsOn>
PostSharpInspect;
PostSharp30DefineConstant;
$(CoreCompileDependsOn)
</CoreCompileDependsOn>
<CompileDependsOn>
PostSharp30TimestampBeforeCompile;
$(CompileDependsOn);
PostSharp30TimestampAfterCompile;
PostSharp30
</CompileDependsOn>
<BuildDependsOn>
$(BuildDependsOn);
PostSharp30Verify
</BuildDependsOn>
<CleanDependsOn>
$(CleanDependsOn);
PostSharp30Clean
</CleanDependsOn>
该错误是FileNotFoundException,因为缺少输出程序集
基本上,我需要知道如何使用msbuild覆盖CompiledPendson属性,如所述的postsharp支持。我不太熟悉msbuild脚本,很抱歉,转换目标的正确位置是
<CompileDependsOn>
PostSharp30TimestampBeforeCompile;
$(CompileDependsOn);
HERE;
PostSharp30TimestampAfterCompile;
PostSharp30
</CompileDependsOn>
编译前的后期处理;
美元(已编撰);
在这里
后编译;
后夏普30
我的解决方案将PostSharp与我们的入口点完全解耦:
<!-- If PostSharp is imported, override with combined targets -->
<PropertyGroup Condition="'$(InjectPostSharp30)' == 'True'">
<CompileDependsOn>
PostSharp30TimestampBeforeCompile;
$(CompileDependsOn);
ApplyILRewriting;
PostSharp30TimestampAfterCompile;
PostSharp30
</CompileDependsOn>
<BuildDependsOn>
$(BuildDependsOn);
PostSharp30Verify;
AfterILRewritingPostBuild
</BuildDependsOn>
</PropertyGroup>
<!-- If PostSharp is not imported, override with necessary targets -->
<PropertyGroup Condition="'$(InjectPostSharp30)' != 'True'">
<CompileDependsOn>
$(CompileDependsOn);
HERE
</CompileDependsOn>
<BuildDependsOn>
$(BuildDependsOn);
AfterILRewritingPostBuild
</BuildDependsOn>
</PropertyGroup>
编译前的后期处理;
美元(已编撰);
应用写作;
后编译;
后夏普30
$(BuildDependsOn);
事后验证;
后重写后构建
美元(已编撰);
在这里
$(BuildDependsOn);
后重写后构建
因此,我的脚本可以用于PostSharp和非PostSharp项目
<!-- If PostSharp is imported, override with combined targets -->
<PropertyGroup Condition="'$(InjectPostSharp30)' == 'True'">
<CompileDependsOn>
PostSharp30TimestampBeforeCompile;
$(CompileDependsOn);
ApplyILRewriting;
PostSharp30TimestampAfterCompile;
PostSharp30
</CompileDependsOn>
<BuildDependsOn>
$(BuildDependsOn);
PostSharp30Verify;
AfterILRewritingPostBuild
</BuildDependsOn>
</PropertyGroup>
<!-- If PostSharp is not imported, override with necessary targets -->
<PropertyGroup Condition="'$(InjectPostSharp30)' != 'True'">
<CompileDependsOn>
$(CompileDependsOn);
HERE
</CompileDependsOn>
<BuildDependsOn>
$(BuildDependsOn);
AfterILRewritingPostBuild
</BuildDependsOn>
</PropertyGroup>