Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# msbuild的自定义IL重写插件_C#_Msbuild_Postsharp_Msbuild Task_Mono.cecil - Fatal编程技术网

C# msbuild的自定义IL重写插件

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的

我想创建一个自定义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文件中找到包含覆盖的位置:

<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>