AvaloniaBuildTasks.targets 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  2. <PropertyGroup>
  3. <_AvaloniaUseExternalMSBuild>$(AvaloniaUseExternalMSBuild)</_AvaloniaUseExternalMSBuild>
  4. <_AvaloniaUseExternalMSBuild Condition="'$(_AvaloniaForceInternalMSBuild)' == 'true'">false</_AvaloniaUseExternalMSBuild>
  5. <AvaloniaXamlReportImportance Condition="'$(AvaloniaXamlReportImportance)' == ''">low</AvaloniaXamlReportImportance>
  6. <_AvaloniaSkipXamlCompilation Condition="'$(_AvaloniaSkipXamlCompilation)' == ''">false</_AvaloniaSkipXamlCompilation>
  7. <AvaloniaUseCompiledBindingsByDefault Condition="'$(AvaloniaUseCompiledBindingsByDefault)' == ''">false</AvaloniaUseCompiledBindingsByDefault>
  8. </PropertyGroup>
  9. <PropertyGroup>
  10. <!-- Enable property page if VisualStudioVersion is great or equal 17.0 and Language is'not VB.NET -->
  11. <AvaloniaEnablePropertyPage Condition="'$(AvaloniaEnablePropertyPage)' == '' and '$(VisualStudioVersion)' &gt;= '17.0' and '$(Language)' != 'VB'">true</AvaloniaEnablePropertyPage>
  12. </PropertyGroup>
  13. <ItemGroup Label="Avalonia Property Page">
  14. <PropertyPageSchema Include="$(MSBuildThisFileDirectory)\AvaloniaRules.Project.xml" Condition="'$(AvaloniaEnablePropertyPage)' == 'true'">
  15. <Context>Project</Context>
  16. </PropertyPageSchema>
  17. </ItemGroup>
  18. <!-- Unfortunately we have to update default items in .targets since custom nuget props are improted before Microsoft.NET.Sdk.DefaultItems.props -->
  19. <ItemGroup Condition="'$(EnableDefaultItems)'=='True'">
  20. <Compile Update="**\*.paml.cs">
  21. <DependentUpon>%(Filename)</DependentUpon>
  22. <SubType>Code</SubType>
  23. </Compile>
  24. <Compile Update="**\*.axaml.cs">
  25. <DependentUpon>%(Filename)</DependentUpon>
  26. <SubType>Code</SubType>
  27. </Compile>
  28. <None Remove="**\*.axaml" />
  29. <None Remove="**\*.paml" />
  30. </ItemGroup>
  31. <UsingTask TaskName="GenerateAvaloniaResourcesTask"
  32. AssemblyFile="$(AvaloniaBuildTasksLocation)"
  33. />
  34. <UsingTask TaskName="CompileAvaloniaXamlTask"
  35. AssemblyFile="$(AvaloniaBuildTasksLocation)"
  36. />
  37. <Target Name="AddAvaloniaResources"
  38. BeforeTargets="ResolveReferences"
  39. Condition="('@(AvaloniaResource->Count())' &gt; 0) or ('@(AvaloniaXaml->Count())' &gt; 0)">
  40. <PropertyGroup>
  41. <AvaloniaResourcesTemporaryFilePath Condition="'$(AvaloniaResourcesTemporaryFilePath)' == ''">$(IntermediateOutputPath)/Avalonia/resources</AvaloniaResourcesTemporaryFilePath>
  42. </PropertyGroup>
  43. <ItemGroup>
  44. <EmbeddedResource Include="$(AvaloniaResourcesTemporaryFilePath)">
  45. <LogicalName>!AvaloniaResources</LogicalName>
  46. </EmbeddedResource>
  47. </ItemGroup>
  48. </Target>
  49. <PropertyGroup>
  50. <BuildAvaloniaResourcesDependsOn>$(BuildAvaloniaResourcesDependsOn);AddAvaloniaResources;ResolveReferences;_GenerateAvaloniaResourcesDependencyCache;_GenerateNoWarnForExec</BuildAvaloniaResourcesDependsOn>
  51. <CompileAvaloniaXamlDependsOn>$(CompileAvaloniaXamlDependsOn);_GenerateNoWarnForExec</CompileAvaloniaXamlDependsOn>
  52. </PropertyGroup>
  53. <Target Name="_GenerateAvaloniaResourcesDependencyCache" BeforeTargets="GenerateAvaloniaResources">
  54. <PropertyGroup>
  55. <_AvaloniaResourcesInputsCacheFilePath>$(IntermediateOutputPath)/Avalonia/Resources.Inputs.cache</_AvaloniaResourcesInputsCacheFilePath>
  56. </PropertyGroup>
  57. <ItemGroup>
  58. <CustomAdditionalGenerateAvaloniaResourcesInputs Include="$(_AvaloniaResourcesInputsCacheFilePath)" />
  59. </ItemGroup>
  60. <Hash ItemsToHash="@(AvaloniaResource);@(AvaloniaXaml);$(MSBuildAllProjects)">
  61. <Output TaskParameter="HashResult" PropertyName="AvaloniaResourcesDependencyHash" />
  62. </Hash>
  63. <MakeDir Directories="$(IntermediateOutputPath)/Avalonia" />
  64. <WriteLinesToFile Overwrite="true" File="$(_AvaloniaResourcesInputsCacheFilePath)" Lines="$(AvaloniaResourcesDependencyHash)" WriteOnlyWhenDifferent="True" />
  65. <ItemGroup>
  66. <FileWrites Include="$(_AvaloniaResourcesInputsCacheFilePath)" />
  67. </ItemGroup>
  68. </Target>
  69. <Target Name="_GenerateNoWarnForExec">
  70. <PropertyGroup>
  71. <!-- https://github.com/dotnet/sdk/issues/8792 -->
  72. <_NoWarnForExec>'"$(NoWarn)"'</_NoWarnForExec>
  73. <_NoWarnForExec Condition="$([MSBuild]::IsOSPlatform('Windows'))">\"$(NoWarn)\"</_NoWarnForExec>
  74. </PropertyGroup>
  75. </Target>
  76. <Target Name="GenerateAvaloniaResources"
  77. BeforeTargets="CoreCompile;CoreResGen"
  78. Inputs="@(AvaloniaResource);@(AvaloniaXaml);@(CustomAdditionalGenerateAvaloniaResourcesInputs);$(MSBuildAllProjects)"
  79. Outputs="$(AvaloniaResourcesTemporaryFilePath)"
  80. DependsOnTargets="$(BuildAvaloniaResourcesDependsOn)"
  81. Condition="('@(AvaloniaResource->Count())' &gt; 0) or ('@(AvaloniaXaml->Count())' &gt; 0)"
  82. >
  83. <ItemGroup>
  84. <AvaloniaResource Include="@(AvaloniaXaml)" />
  85. </ItemGroup>
  86. <GenerateAvaloniaResourcesTask
  87. Condition="'$(_AvaloniaUseExternalMSBuild)' != 'true'"
  88. Output="$(AvaloniaResourcesTemporaryFilePath)"
  89. Root="$(MSBuildProjectDirectory)"
  90. Resources="@(AvaloniaResource)"
  91. ReportImportance="$(AvaloniaXamlReportImportance)"/>
  92. <ItemGroup Condition="'$(_AvaloniaUseExternalMSBuild)' != 'true'">
  93. <FileWrites Include="$(AvaloniaResourcesTemporaryFilePath)" />
  94. </ItemGroup>
  95. <Exec
  96. Condition="'$(_AvaloniaUseExternalMSBuild)' == 'true'"
  97. Command="dotnet msbuild /nodereuse:false $(MSBuildProjectFile) /t:GenerateAvaloniaResources /p:NoWarn=$(_NoWarnForExec) /p:_AvaloniaForceInternalMSBuild=true /p:Configuration=$(Configuration) /p:TargetFramework=$(TargetFramework) /p:RuntimeIdentifier=$(RuntimeIdentifier) /p:BuildProjectReferences=false"/>
  98. </Target>
  99. <Target
  100. Name="CompileAvaloniaXaml"
  101. AfterTargets="AfterCompile"
  102. DependsOnTargets="$(CompileAvaloniaXamlDependsOn)"
  103. Condition="
  104. (('@(AvaloniaResource->Count())' &gt; 0)
  105. or ('@(AvaloniaXaml->Count())' &gt; 0))
  106. and Exists('@(IntermediateAssembly)')
  107. And $(DesignTimeBuild) != true
  108. And $(EnableAvaloniaXamlCompilation) != false"
  109. >
  110. <PropertyGroup>
  111. <AvaloniaXamlReferencesTemporaryFilePath Condition="'$(AvaloniaXamlReferencesTemporaryFilePath)' == ''">$(IntermediateOutputPath)/Avalonia/references</AvaloniaXamlReferencesTemporaryFilePath>
  112. <AvaloniaXamlOriginalCopyFilePath Condition="'$(AvaloniaXamlOriginalCopyFilePath)' == ''">$(IntermediateOutputPath)/Avalonia/original.dll</AvaloniaXamlOriginalCopyFilePath>
  113. <AvaloniaXamlIlVerifyIl Condition="'$(AvaloniaXamlIlVerifyIl)' == ''">false</AvaloniaXamlIlVerifyIl>
  114. <AvaloniaXamlIlDebuggerLaunch Condition="'$(AvaloniaXamlIlDebuggerLaunch)' == ''">false</AvaloniaXamlIlDebuggerLaunch>
  115. </PropertyGroup>
  116. <WriteLinesToFile
  117. Condition="'$(_AvaloniaForceInternalMSBuild)' != 'true'"
  118. File="$(AvaloniaXamlReferencesTemporaryFilePath)"
  119. Lines="@(ReferencePathWithRefAssemblies)"
  120. Overwrite="true" />
  121. <ItemGroup Condition="'$(_AvaloniaForceInternalMSBuild)' != 'true'">
  122. <FileWrites Include="$(AvaloniaXamlReferencesTemporaryFilePath)" />
  123. </ItemGroup>
  124. <CompileAvaloniaXamlTask
  125. Condition="'$(_AvaloniaUseExternalMSBuild)' != 'true'"
  126. AssemblyFile="@(IntermediateAssembly)"
  127. ReferencesFilePath="$(AvaloniaXamlReferencesTemporaryFilePath)"
  128. OriginalCopyPath="$(AvaloniaXamlOriginalCopyFilePath)"
  129. RefAssemblyFile="@(IntermediateRefAssembly)"
  130. ProjectDirectory="$(MSBuildProjectDirectory)"
  131. VerifyIl="$(AvaloniaXamlIlVerifyIl)"
  132. ReportImportance="$(AvaloniaXamlReportImportance)"
  133. AssemblyOriginatorKeyFile="$(AssemblyOriginatorKeyFile)"
  134. SignAssembly="$(SignAssembly)"
  135. DelaySign="$(DelaySign)"
  136. SkipXamlCompilation="$(_AvaloniaSkipXamlCompilation)"
  137. DebuggerLaunch="$(AvaloniaXamlIlDebuggerLaunch)"
  138. DefaultCompileBindings="$(AvaloniaUseCompiledBindingsByDefault)">
  139. <Output TaskParameter="WrittenFilePaths" ItemName="FileWrites" />
  140. </CompileAvaloniaXamlTask>
  141. <Exec
  142. Condition="'$(_AvaloniaUseExternalMSBuild)' == 'true'"
  143. Command="dotnet msbuild /nodereuse:false $(MSBuildProjectFile) /t:CompileAvaloniaXaml /p:NoWarn=$(_NoWarnForExec) /p:_AvaloniaForceInternalMSBuild=true /p:Configuration=$(Configuration) /p:TargetFramework=$(TargetFramework) /p:RuntimeIdentifier=$(RuntimeIdentifier) /p:BuildProjectReferences=false"/>
  144. </Target>
  145. <ItemGroup>
  146. <UpToDateCheckInput Include="@(AvaloniaResource)" />
  147. <UpToDateCheckInput Include="@(AvaloniaXaml)" />
  148. </ItemGroup>
  149. <PropertyGroup>
  150. <AvaloniaFilePreviewDependsOn Condition="'$(SkipBuild)'!='True'">Build</AvaloniaFilePreviewDependsOn>
  151. </PropertyGroup>
  152. <Target Name="AvaloniaFilePreview" DependsOnTargets="$(AvaloniaFilePreviewDependsOn)">
  153. <PropertyGroup>
  154. <APreviewerUrl>http://127.0.0.1:6001</APreviewerUrl>
  155. <APreviewExecutable>$(OutputPath)/$(AssemblyName).dll</APreviewExecutable>
  156. <APreviewFile Condition="$(APreviewFile) == ''">MainWindow.axaml</APreviewFile>
  157. <APreviewAssembly Condition="$(APreviewAssembly) == ''">$(APreviewExecutable)</APreviewAssembly>
  158. <APreviewerDepsJsonPath>$([System.IO.Path]::ChangeExtension('$(APreviewExecutable)', '.deps.json'))</APreviewerDepsJsonPath>
  159. <APreviewerRuntimeConfigPath>$([System.IO.Path]::ChangeExtension('$(APreviewExecutable)', '.runtimeconfig.json'))</APreviewerRuntimeConfigPath>
  160. <APreviewTransportUrl>$([System.IO.Path]::GetFullPath('$(APreviewFile)'))</APreviewTransportUrl>
  161. </PropertyGroup>
  162. <Message Importance="high" Text="Launching previewer for"/>
  163. <Message Importance="high" Text="File (APreviewFile): $(APreviewTransportUrl)"/>
  164. <Message Importance="high" Text="Containing assembly (APreviewAssembly): $(APreviewDefiningAssembly)"/>
  165. <Message Importance="high" Text="Executable: $(APreviewExecutable)"/>
  166. <Message Importance="high" Text="Url (APreviewerUrl): $(APreviewerUrl)"/>
  167. <Exec Command="dotnet exec --runtimeconfig &quot;$(APreviewerRuntimeConfigPath)&quot; --depsfile &quot;$(APreviewerDepsJsonPath)&quot; &quot;$(AvaloniaPreviewerNetCoreToolPath)&quot; --method html --html-url $(APreviewerUrl) --transport $(APreviewTransportUrl) &quot;$(APreviewExecutable)&quot;"/>
  168. </Target>
  169. </Project>