168 строки
11 KiB
XML
168 строки
11 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
|
|
<!-- Project types and how do we distinguish between them
|
|
|
|
OutputType Custom variable
|
|
==================================================================
|
|
iOS Executable Project Exe
|
|
iOS App Extension Project Library IsAppExtension
|
|
iOS Binding Project Library IsBindingProject
|
|
iOS Class Library Project Library
|
|
|
|
tvOS Executable Project Exe
|
|
tvOS App Extension Project Library IsAppExtension
|
|
tvOS Binding Project Library IsBindingProject
|
|
tvOS Class Library Project Library
|
|
|
|
watchOS App Project Library IsWatchOSApp
|
|
watchOS App Extension Project Library IsAppExtension
|
|
watchOS Binding Project Library IsBindingProject
|
|
watchOS Class Library Project Library
|
|
|
|
macOS Executable Project Exe
|
|
macOS App Extension Project Library IsAppExtension
|
|
macOS Binding Project Library IsBindingProject
|
|
macOS Class Library Project Library
|
|
|
|
-->
|
|
|
|
<PropertyGroup>
|
|
<_ProjectType Condition="'$(_ProjectType)' == '' And '$(_PlatformName)' == 'iOS' And '$(OutputType)' == 'Exe'">iOSExecutableProject</_ProjectType>
|
|
<_ProjectType Condition="'$(_ProjectType)' == '' And '$(_PlatformName)' == 'iOS' And '$(OutputType)' == 'Library' And '$(IsAppExtension)' != ''">iOSAppExtensionProject</_ProjectType>
|
|
<_ProjectType Condition="'$(_ProjectType)' == '' And '$(_PlatformName)' == 'iOS' And '$(OutputType)' == 'Library' And '$(IsBindingProject)' != ''">iOSBindingProject</_ProjectType>
|
|
<_ProjectType Condition="'$(_ProjectType)' == '' And '$(_PlatformName)' == 'iOS' And '$(OutputType)' == 'Library'">iOSClassLibrary</_ProjectType>
|
|
|
|
<_ProjectType Condition="'$(_ProjectType)' == '' And '$(_PlatformName)' == 'tvOS' And '$(OutputType)' == 'Exe'">tvOSExecutableProject</_ProjectType>
|
|
<_ProjectType Condition="'$(_ProjectType)' == '' And '$(_PlatformName)' == 'tvOS' And '$(OutputType)' == 'Library' And '$(IsAppExtension)' != ''">tvOSAppExtensionProject</_ProjectType>
|
|
<_ProjectType Condition="'$(_ProjectType)' == '' And '$(_PlatformName)' == 'tvOS' And '$(OutputType)' == 'Library' And '$(IsBindingProject)' != ''">tvOSBindingProject</_ProjectType>
|
|
<_ProjectType Condition="'$(_ProjectType)' == '' And '$(_PlatformName)' == 'tvOS' And '$(OutputType)' == 'Library'">tvOSClassLibrary</_ProjectType>
|
|
|
|
<_ProjectType Condition="'$(_ProjectType)' == '' And '$(_PlatformName)' == 'watchOS' And '$(IsWatchOSApp)' != ''">watchOSAppProject</_ProjectType>
|
|
<_ProjectType Condition="'$(_ProjectType)' == '' And '$(_PlatformName)' == 'watchOS' And '$(IsAppExtension)' != ''">watchOSAppExtensionProject</_ProjectType>
|
|
<_ProjectType Condition="'$(_ProjectType)' == '' And '$(_PlatformName)' == 'watchOS' And '$(IsBindingProject)' != ''">watchOSBindingProject</_ProjectType>
|
|
<_ProjectType Condition="'$(_ProjectType)' == '' And '$(_PlatformName)' == 'watchOS'">watchOSClassLibrary</_ProjectType>
|
|
|
|
<_ProjectType Condition="'$(_ProjectType)' == '' And '$(_PlatformName)' == 'macOS' And '$(OutputType)' == 'Exe'">macOSExecutableProject</_ProjectType>
|
|
<_ProjectType Condition="'$(_ProjectType)' == '' And '$(_PlatformName)' == 'macOS' And '$(OutputType)' == 'Library' And '$(IsAppExtension)' != ''">macOSAppExtensionProject</_ProjectType>
|
|
<_ProjectType Condition="'$(_ProjectType)' == '' And '$(_PlatformName)' == 'macOS' And '$(OutputType)' == 'Library' And '$(IsBindingProject)' != ''">macOSBindingProject</_ProjectType>
|
|
<_ProjectType Condition="'$(_ProjectType)' == '' And '$(_PlatformName)' == 'macOS' And '$(OutputType)' == 'Library'">macOSClassLibrary</_ProjectType>
|
|
</PropertyGroup>
|
|
|
|
<PropertyGroup>
|
|
<!-- We must run the linker for executable projects and app extension projects. We must set PublishTrimmed before importing Microsoft.NET.Sdk, because it'll be evaluated there. -->
|
|
<PublishTrimmed Condition="'$(PublishTrimmed)' == '' And ($(_ProjectType.EndsWith ('ExecutableProject')) Or $(_ProjectType.EndsWith ('AppExtensionProject')))">true</PublishTrimmed>
|
|
|
|
<!-- App extensions are self-contained, even though their OutputType=Library -->
|
|
<SelfContained Condition="'$(SelfContained)' == '' And $(_ProjectType.EndsWith ('AppExtensionProject'))">true</SelfContained>
|
|
|
|
<!-- Add a property that specifies the name of the platform assembly for each platform -->
|
|
<_PlatformAssemblyName Condition=" '$(_PlatformName)' == 'iOS' ">Xamarin.iOS</_PlatformAssemblyName>
|
|
<_PlatformAssemblyName Condition=" '$(_PlatformName)' == 'tvOS' ">Xamarin.TVOS</_PlatformAssemblyName>
|
|
<_PlatformAssemblyName Condition=" '$(_PlatformName)' == 'watchOS' ">Xamarin.WatchOS</_PlatformAssemblyName>
|
|
<_PlatformAssemblyName Condition=" '$(_PlatformName)' == 'macOS' ">Xamarin.Mac</_PlatformAssemblyName>
|
|
</PropertyGroup>
|
|
|
|
<Import Sdk="Microsoft.NET.Sdk" Project="Sdk.targets" />
|
|
|
|
<!-- Default item includes (globs and implicit references) -->
|
|
<Import Project="Xamarin.Shared.Sdk.DefaultItems.targets" />
|
|
<Import Project="Xamarin.Shared.Sdk.TargetFrameworkInference.targets" />
|
|
|
|
<!-- Inject our custom logic into *DependsOn variables -->
|
|
<PropertyGroup>
|
|
<BuildDependsOn>
|
|
$(BuildDependsOn);
|
|
_CreateAppBundle;
|
|
</BuildDependsOn>
|
|
|
|
<!-- We re-use ComputeFilesToPublish & CopyFilesToPublishDirectory to copy files to the .app -->
|
|
<!-- ComputeFilesToPublish will run ILLink -->
|
|
<CreateAppBundleDependsOn>
|
|
_DetectAppManifest;
|
|
_CompileAppManifest;
|
|
_ComputeLinkerArguments;
|
|
ComputeFilesToPublish;
|
|
_ComputePublishLocation;
|
|
CopyFilesToPublishDirectory;
|
|
</CreateAppBundleDependsOn>
|
|
</PropertyGroup>
|
|
|
|
<!-- Linker -->
|
|
<PropertyGroup>
|
|
<_AdditionalTaskAssemblyDirectory>$(_XamarinSdkRootDirectory)tools/dotnet-linker/</_AdditionalTaskAssemblyDirectory>
|
|
<_AdditionalTaskAssembly>$(_AdditionalTaskAssemblyDirectory)dotnet-linker.dll</_AdditionalTaskAssembly>
|
|
</PropertyGroup>
|
|
<Target Name="_ComputeLinkerArguments">
|
|
<PropertyGroup>
|
|
<!-- Pass the custom options to our custom steps -->
|
|
<_CustomLinkerOptionsFile>$([System.IO.Path]::GetFullPath('$(IntermediateOutputPath)custom-linker-options.txt'))</_CustomLinkerOptionsFile>
|
|
<_CustomLinkerOptions>
|
|
Platform=$(_PlatformName)
|
|
PlatformAssembly=$(_PlatformAssemblyName).dll
|
|
</_CustomLinkerOptions>
|
|
<_ExtraTrimmerArgs>$(_ExtraTrimmerArgs) --custom-data "LinkerOptionsFile=$(_CustomLinkerOptionsFile)"</_ExtraTrimmerArgs>
|
|
|
|
<!-- Verbose output, so that we get something to stdout when something goes wrong -->
|
|
<_ExtraTrimmerArgs>$(_ExtraTrimmerArgs) --verbose</_ExtraTrimmerArgs>
|
|
</PropertyGroup>
|
|
<ItemGroup>
|
|
<!-- add our custom steps -->
|
|
<_TrimmerCustomSteps Include="$(_AdditionalTaskAssembly)">
|
|
<BeforeStep>LoadReferencesStep</BeforeStep>
|
|
<Type>Xamarin.SetupStep</Type>
|
|
</_TrimmerCustomSteps>
|
|
</ItemGroup>
|
|
|
|
<!-- Create the file with our custom linker options -->
|
|
<WriteLinesToFile File="$(_CustomLinkerOptionsFile)" Lines="$(_CustomLinkerOptions)" Overwrite="true" />
|
|
</Target>
|
|
|
|
<Target Name="_ComputePublishLocation" DependsOnTargets="_GenerateBundleName">
|
|
<!-- Put .dll, .pdb, .exe and .dylib in the .app -->
|
|
<PropertyGroup>
|
|
<_AssemblyPublishDir Condition="'$(_PlatformName)' != 'macOS'">$(MSBuildProjectDirectory)$(_AppBundlePath)\</_AssemblyPublishDir>
|
|
<_AssemblyPublishDir Condition="'$(_PlatformName)' == 'macOS'">$(MSBuildProjectDirectory)$(_AppBundlePath)\Contents\MonoBundle\</_AssemblyPublishDir>
|
|
<_DylibPublishDir Condition="'$(_PlatformName)' != 'macOS'">$(MSBuildProjectDirectory)$(_AppBundlePath)\</_DylibPublishDir>
|
|
<_DylibPublishDir Condition="'$(_PlatformName)' == 'macOS'">$(MSBuildProjectDirectory)$(_AppBundlePath)\Contents\MonoBundle\</_DylibPublishDir>
|
|
</PropertyGroup>
|
|
<ItemGroup>
|
|
<ResolvedFileToPublish
|
|
Update="@(ResolvedFileToPublish)"
|
|
RelativePath="$([MSBuild]::MakeRelative($(MSBuildProjectDirectory)$(PublishDir),$(_AssemblyPublishDir)))%(Filename)%(Extension)"
|
|
Condition="'%(Extension)' == '.dll' Or '%(Extension)' == '.pdb' Or '$(Extension)' == '.exe'" />
|
|
<ResolvedFileToPublish
|
|
Update="@(ResolvedFileToPublish)"
|
|
RelativePath="$([MSBuild]::MakeRelative($(MSBuildProjectDirectory)$(PublishDir),$(_DylibPublishDir)))%(Filename)%(Extension)"
|
|
Condition="'%(Extension)' == '.dylib'" />
|
|
</ItemGroup>
|
|
</Target>
|
|
|
|
<!-- Import existing targets -->
|
|
|
|
<PropertyGroup>
|
|
<_ProjectLanguage>$(Language)</_ProjectLanguage>
|
|
<_ProjectLanguage Condition="'$(_ProjectLanguage)' == '' Or '$(_ProjectLanguage)' == 'C#' ">CSharp</_ProjectLanguage>
|
|
<_ProjectLanguage Condition="'$(_ProjectLanguage)' == 'F#' ">FSharp</_ProjectLanguage>
|
|
|
|
<_TargetsDirectory>$(_XamarinSdkRootDirectory)\tools\msbuild\$(_PlatformName)\</_TargetsDirectory>
|
|
</PropertyGroup>
|
|
|
|
<Import Project="$(_TargetsDirectory)Xamarin.iOS.$(_ProjectLanguage).targets" Condition="'$(_ProjectType)' == 'iOSExecutableProject' Or '$(_ProjectType)' == 'iOSClassLibrary' " />
|
|
<Import Project="$(_TargetsDirectory)Xamarin.iOS.AppExtension.$(_ProjectLanguage).targets" Condition="'$(_ProjectType)' == 'iOSAppExtensionProject' " />
|
|
<Import Project="$(_TargetsDirectory)Xamarin.iOS.ObjCBinding.$(_ProjectLanguage).targets" Condition="'$(_ProjectType)' == 'iOSBindingProject' " />
|
|
|
|
<Import Project="$(_TargetsDirectory)Xamarin.TVOS.$(_ProjectLanguage).targets" Condition="'$(_ProjectType)' == 'tvOSExecutableProject' Or '$(_ProjectType)' == 'tvOSClassLibrary' " />
|
|
<Import Project="$(_TargetsDirectory)Xamarin.TVOS.AppExtension.$(_ProjectLanguage).targets" Condition="'$(_ProjectType)' == 'tvOSAppExtensionProject' " />
|
|
<Import Project="$(_TargetsDirectory)Xamarin.TVOS.ObjCBinding.$(_ProjectLanguage).targets" Condition="'$(_ProjectType)' == 'tvOSBindingProject' " />
|
|
|
|
<Import Project="$(_TargetsDirectory)Xamarin.WatchOS.$(_ProjectLanguage).targets" Condition="'$(_ProjectType)' == 'watchOSClassLibrary' " />
|
|
<Import Project="$(_TargetsDirectory)Xamarin.WatchOS.App.$(_ProjectLanguage).targets" Condition="'$(_ProjectType)' == 'watchOSAppProject' " />
|
|
<Import Project="$(_TargetsDirectory)Xamarin.WatchOS.AppExtension.$(_ProjectLanguage).targets" Condition="'$(_ProjectType)' == 'watchOSAppExtensionProject' " />
|
|
<Import Project="$(_TargetsDirectory)Xamarin.WatchOS.ObjCBinding.$(_ProjectLanguage).targets" Condition="'$(_ProjectType)' == 'watchOSBindingProject' " />
|
|
|
|
<Import Project="$(_TargetsDirectory)Xamarin.Mac.$(_ProjectLanguage).targets" Condition="'$(_ProjectType)' == 'macOSExecutableProject' Or '$(_ProjectType)' == 'macOSClassLibrary' " />
|
|
<Import Project="$(_TargetsDirectory)Xamarin.Mac.AppExtension.$(_ProjectLanguage).targets" Condition="'$(_ProjectType)' == 'macOSAppExtensionProject' " />
|
|
<Import Project="$(_TargetsDirectory)Xamarin.Mac.ObjCBinding.$(_ProjectLanguage).targets" Condition="'$(_ProjectType)' == 'macOSBindingProject' " />
|
|
</Project>
|