【问题标题】:MSBuild : Remove a previously <imported>ed Target dependencyMSBuild :删除以前 <imported>ed 的目标依赖项
【发布时间】:2021-03-04 21:58:52
【问题描述】:

在我的 csproj 中,我正在导入一个非常大且频繁使用的目标文件(目前我不允许将其分解)。但是,此目标文件使用 AfterTargets='Build' 设置各种目标依赖项/顺序。

在我导入这个大型目标文件的 csproj 中,我想删除一些 After build 目标依赖项。例如,假设导入了以下目标:

<!-- This is in the large targets file -->
<Target Name="Target1" AfterTargets="Build">
</Target> 

如何从执行中删除 Target1 在构建 csproj 后,我将其导入。 有什么好的方法可以做到这一点?

【问题讨论】:

    标签: visual-studio msbuild msbuild-target


    【解决方案1】:

    您必须覆盖目标Target1,然后为其目标设置一个空,这意味着您已经删除了之前的Target1

    虽然它仍然出现在构建日志上,但它是空的,没有任何操作。这是唯一的方法。而如果你想让Target1不出现,你必须在大目标文件下删除它。

    您应该注意,您必须在前一个之后写新的Target1,以使新的覆盖​​旧的。

    举个例子,

        <!-- This is in the large targets file -->
    
        <Target Name="Target1" AfterTargets="Build"> // the old one 
        
        //do some larget opertion
        </Target> 
        
        ........
        
        ........
        
        <Target Name="Target1"> // the new one and make it empty
        </Target> 
    

    【讨论】:

    • 澄清两点: 1. 新的定义应该在csproj之后的大targets文件中导入? 2.在新定义中,为什么需要'AfterTargets="Build"'?
    • 1) 当然。应该在Target1之后添加它来覆盖旧目标,无论是在目标文件的底部还是在导入节点后的csproj文件中。 2)当然。你说的对。它完全不需要AfterTargets="Build"。我已经更新了我的答案,你可以检查一下。
    猜你喜欢
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多