@@ -587,6 +587,84 @@ Copyright (c) .NET Foundation. All rights reserved.
587
587
</ItemGroup >
588
588
</Target >
589
589
590
+ <!--
591
+ Target to detect presence of .razor files and set related properties for embedded ValidatableTypeAttribute support
592
+ This target runs after component items are resolved to ensure accurate detection
593
+ -->
594
+ <Target Name =" _AddEmbeddedValidationAttribute" BeforeTargets =" GenerateGlobalUsings" DependsOnTargets =" ResolveRazorComponentInputs;ResolveRazorGenerateInputs" >
595
+ <PropertyGroup Condition =" '$(_TargetingNET100OrLater)' == 'true'" >
596
+ <_HasRazorFiles Condition =" '@(RazorComponent)' != '' OR '@(RazorGenerate->WithMetadataValue('Extension', '.razor'))' != '' OR '@(Content->WithMetadataValue('Extension', '.razor'))' != ''" >true</_HasRazorFiles >
597
+
598
+ <!-- Set embedded attribute generation property based on .razor file detection -->
599
+ <GenerateEmbeddedValidatableTypeAttribute Condition =" '$(GenerateEmbeddedValidatableTypeAttribute)' == '' AND '$(_HasRazorFiles)' == 'true'" >true</GenerateEmbeddedValidatableTypeAttribute >
600
+ <GenerateEmbeddedValidatableTypeAttribute Condition =" '$(GenerateEmbeddedValidatableTypeAttribute)' == ''" >false</GenerateEmbeddedValidatableTypeAttribute >
601
+
602
+ <!-- Set global using property based on attribute generation -->
603
+ <IncludeEmbeddedValidationGlobalUsing Condition =" '$(IncludeEmbeddedValidationGlobalUsing)' == '' AND '$(GenerateEmbeddedValidatableTypeAttribute)' == 'true'" >true</IncludeEmbeddedValidationGlobalUsing >
604
+ <IncludeEmbeddedValidationGlobalUsing Condition =" '$(IncludeEmbeddedValidationGlobalUsing)' == ''" >false</IncludeEmbeddedValidationGlobalUsing >
605
+ </PropertyGroup >
606
+
607
+ <PropertyGroup Condition =" '$(GenerateEmbeddedValidatableTypeAttribute)' == 'true' AND '$(_TargetingNET100OrLater)' == 'true'" >
608
+ <_EmbeddedAttributeFile >$(IntermediateOutputPath)EmbeddedAttribute.cs</_EmbeddedAttributeFile >
609
+ <_ValidatableTypeAttributeFile >$(IntermediateOutputPath)ValidatableTypeAttribute.cs</_ValidatableTypeAttributeFile >
610
+ </PropertyGroup >
611
+
612
+ <!-- Generate EmbeddedAttribute source file -->
613
+ <ItemGroup Condition =" '$(GenerateEmbeddedValidatableTypeAttribute)' == 'true' AND '$(_TargetingNET100OrLater)' == 'true'" >
614
+ <_EmbeddedAttributeLines Include =" // < auto-generated/> " />
615
+ <_EmbeddedAttributeLines Include =" namespace Microsoft.CodeAnalysis" />
616
+ <_EmbeddedAttributeLines Include =" {" />
617
+ <_EmbeddedAttributeLines Include =" internal sealed partial class EmbeddedAttribute : global::System.Attribute" />
618
+ <_EmbeddedAttributeLines Include =" {" />
619
+ <_EmbeddedAttributeLines Include =" }" />
620
+ <_EmbeddedAttributeLines Include =" }" />
621
+ </ItemGroup >
622
+
623
+ <WriteLinesToFile
624
+ Condition =" '$(GenerateEmbeddedValidatableTypeAttribute)' == 'true' AND '$(_TargetingNET100OrLater)' == 'true'"
625
+ File =" $(_EmbeddedAttributeFile)"
626
+ Lines =" @(_EmbeddedAttributeLines)"
627
+ Overwrite =" true"
628
+ WriteOnlyWhenDifferent =" true" />
629
+
630
+ <!-- Generate ValidatableTypeAttribute source file -->
631
+ <ItemGroup Condition =" '$(GenerateEmbeddedValidatableTypeAttribute)' == 'true' AND '$(_TargetingNET100OrLater)' == 'true'" >
632
+ <_ValidatableTypeAttributeLines Include =" // < auto-generated/> " />
633
+ <_ValidatableTypeAttributeLines Include =" namespace Microsoft.Extensions.Validation.Embedded" />
634
+ <_ValidatableTypeAttributeLines Include =" {" />
635
+ <_ValidatableTypeAttributeLines Include =" [global::Microsoft.CodeAnalysis.EmbeddedAttribute]" />
636
+ <_ValidatableTypeAttributeLines Include =" [global::System.AttributeUsage(global::System.AttributeTargets.Class)]" />
637
+ <_ValidatableTypeAttributeLines Include =" internal sealed class ValidatableTypeAttribute : global::System.Attribute" />
638
+ <_ValidatableTypeAttributeLines Include =" {" />
639
+ <_ValidatableTypeAttributeLines Include =" }" />
640
+ <_ValidatableTypeAttributeLines Include =" }" />
641
+ </ItemGroup >
642
+
643
+ <WriteLinesToFile
644
+ Condition =" '$(GenerateEmbeddedValidatableTypeAttribute)' == 'true' AND '$(_TargetingNET100OrLater)' == 'true'"
645
+ File =" $(_ValidatableTypeAttributeFile)"
646
+ Lines =" @(_ValidatableTypeAttributeLines)"
647
+ Overwrite =" true"
648
+ WriteOnlyWhenDifferent =" true" />
649
+
650
+ <!--
651
+ Conditional inclusion of embedded ValidatableTypeAttribute source files for .NET 10.0+
652
+ -->
653
+ <ItemGroup Condition =" '$(GenerateEmbeddedValidatableTypeAttribute)' == 'true' AND '$(_TargetingNET100OrLater)' == 'true'" >
654
+ <Compile Include =" $(_EmbeddedAttributeFile)" />
655
+ <Compile Include =" $(_ValidatableTypeAttributeFile)" />
656
+ <FileWrites Include =" $(_EmbeddedAttributeFile)" />
657
+ <FileWrites Include =" $(_ValidatableTypeAttributeFile)" />
658
+ </ItemGroup >
659
+
660
+ <!--
661
+ Conditional global using for embedded validation namespace
662
+ -->
663
+ <ItemGroup Condition =" '$(IncludeEmbeddedValidationGlobalUsing)' == 'true' AND '$(_TargetingNET100OrLater)' == 'true'" >
664
+ <Using Include =" Microsoft.Extensions.Validation.Embedded" />
665
+ </ItemGroup >
666
+ </Target >
667
+
590
668
<!-- This target validates that there is at most one scoped css file per component, that there are no scoped css files without a
591
669
matching component, and then adds the associated scope to the razor components that have a matching scoped css file.
592
670
-->
0 commit comments