microsoft - MsBuild 조건 평가 속성 포함



microsoft msbuild (2)

내가 아는 한, 아이템 메타 데이터가 아닌 속성 에만 문자열 기능 (예 : 코드에 Contains 을 사용할 수 있습니다. 그러나 %(Filename) 대해 Contains 를 호출하려고했는데 이것은 Content 항목의 메타 데이터입니다.

자세한 내용을 보려면 MSDN 링크를 참조하십시오. 마지막 단락은 엄격히 말합니다 :

속성 함수는 메타 데이터 값 내에 나타나지 않을 수 있습니다. 예를 들어, %(Compile.FullPath.Substring(0,3)) 는 허용되지 않습니다.

그러나 Regex 클래스의 정적 메서드를 사용할 수 있습니다. 나는 다음 코드가 당신이 원하는 것이라고 믿는다.

<Target Name="Test" AfterTargets="Build">
    <Message Text="Project $(ProjectName) Test PostBuild" Importance="high" />
    <Message Text="%(Content.FullPath)" Condition=" $([System.Text.RegularExpressions.Regex]::IsMatch('%(FullPath)', '.+\.css\.aspx')) " Importance="high" />
</Target>

그렇지 않은 경우 정규식을 원하는 방식으로 수정할 수 있습니다.

https://ffff65535.com

파일 유형이있는 대상에서 사용할 항목 그룹을 만들려고합니다. - Filename.CSS.ASPX

<Target Name="Test" AfterTargets="Build">
    <Message Text="Project $(ProjectName) Test PostBuild" Importance="high" />
    <Message Text="%(Content.FullPath)" Condition="%(Extension) == '.aspx' AND %(Filename.Contains(css))" Importance="high" />
</Target>

컴파일시;

Error   1   Expected "%(Filename.Contains(css))" to evaluate to a boolean instead of "%(Filename.Contains(css))", in condition "%(Extension) == '.aspx' AND %   (Filename.Contains(css))".  C:\Projects\TestProj\TestProj\TestProj.csproj   58  38  TestProj

평가를 위해 속성을 확장하는 것에 대한 조언이 있습니까?


비슷한 질문에 대한 답변 MSBuild에서 MetaData 항목에 String.Replace 함수를 사용할 수 있습니까? 정적이 아닌 System.String 메서드에 액세스 할 수있는 임시 해결 방법으로 [System.String]::Copy() 를 사용하는 것이 좋습니다.

따라서 코드는 다음과 같이 다시 작성할 수 있습니다.

    <Target Name="Test" AfterTargets="Build">
        <Message Text="Project $(ProjectName) Test PostBuild" Importance="high" />
        <Message Text="%(Content.FullPath)" Condition="%(Content.Extension) == '.aspx' AND $([System.String]::Copy(%(Content.Filename)).Contains('css'))" Importance="high" />
    </Target>




msbuild