正在检查项目在MSBuild中是否具有特定目标

正在检查项目在MSBuild中是否具有特定目标,msbuild,Msbuild,我的一些.csproj项目文件有一个特殊的目标“AssembleJS”,它将项目中包含的所有.js文件合并到一个大文件中(即webcontrols.csproj有目标“AssembleJS”和输出“webcontrols.js”) 所以如果我有projectparts.csproj 具有目标集合的 参考文献project WebControl.csproj 引用没有任何JavaScript和AssembleJS目标的实用工具项目utils.csproj 我希望parts.csproj的目标Ass

我的一些.csproj项目文件有一个特殊的目标“AssembleJS”,它将项目中包含的所有.js文件合并到一个大文件中(即webcontrols.csproj有目标“AssembleJS”和输出“webcontrols.js”)

所以如果我有projectparts.csproj

  • 具有目标集合的
  • 参考文献project WebControl.csproj
  • 引用没有任何JavaScript和AssembleJS目标的实用工具项目utils.csproj
  • 我希望parts.csproj的目标AssembleJS在webcontrols.csproj中执行AssembleJS(与MSBuild使用标准生成目标时相同)

    差不多

    <MSBuild Project="@ReferencedProjects" Targets="AssembleJS"/> 
    
    
    
    无法工作,因为utils.csproj没有目标AssembleJ

    有没有办法根据项目是否有特定的目标来过滤@ReferencedProjects


    关于如何处理这种情况还有其他想法吗?

    您不能做您需要的事情。但是你可以通过批处理来实现它

    <Project xmlns=''>
        <ItemGroup>
            <ReferencedProjects Include="webcontrols.csproj">
                <Type>Web</Type>
            </ReferencedProjects>
            <ReferencedProjects Include="utils.csproj">
                <Type>NonWeb</Type>
            </ReferencedProjects>
        </ItemGroup>
    
       <Target Name="BuildWebProjects">
            <MSBuild Projects="@(ReferencedProjects)" Condition=" '%(ReferencedProjects.Type)' == 'Web' " />
       </Target>
    
    </Project>
    
    
    网状物
    非网络
    
    搜索MSBuild批处理,并在上找到一些结果以了解更多信息 信息


    我是否应该对此进行扩展?

    这可能是MSBuild的最佳选择,但它所创建的大量手动工作使其无法使用。还有一件事,它是“ProjectReference”,而不是“ReferencedProjects”。好的,我只是讨论一下您在示例中创建的名称。