我已启用:
- 使用共享运行时 - 快速部署
启用或禁用这些设置没有任何区别。在这两种情况下,构建/部署我的应用程序需要约2分20秒(甚至超过3分钟!)。使用真实设备或Visual Studio模拟器对Android也没有影响。
为什么会如此缓慢?我没有使用正确的设置吗?
更新2:
昨天(11月14日),我将Xamarin.VS更新到4.2.1.58。构建持续时间没有改善。
我们使用TeamCity来构建我们的应用程序的发布版本,TeamCity统计数据完美地展示了我所说的问题。
在下面的图表中,我选择了上个季度作为日期范围。可以看到构建持续时间的大幅增加。现在,当调试时等待3分钟是可以接受的,但发布版本不行。
更新3
Jon,感谢您的帮助。
同时,我在构建日志中进行了一些研究,并发现了每个构建任务的持续时间。我发现某种方法GetAdditionalResourcesFromAssemblies
需要很长时间。
应用程序中的资源数量并没有发生显著变化,这让我想到:可能是我使用的另一个程序集..
然后我检出了版本1029(最后一个需要大约一分钟才能构建的版本),并尝试在更新的环境中对其进行调试。它仍然可以在1分30秒内构建...
所以:
- 这很可能不是VS Xamarin的更新(否则版本1029也会构建缓慢)
- 很可能不是快速部署,持续时间在构建过程中增加
那么,在我的应用程序的版本1029和1030之间发生了什么改变?
- 已将Visual Studio中的Xamarin更新至4.2.0.719
- 在Android SDK Manager中安装了Android 7.0 SDK平台
- 在项目属性中将
Compile using Android version
更改为Android 7.0 - 已将Xamarin.Android支持库从23.4.0.1更新至24.2.1
Change 4是我最初更新的原因,我想使用在版本24中得到改进的Bottomsheet
。但支持库nugets针对的是Android 7.0,所以我必须按照1-3的步骤才能更新支持库。
可能是支持库绑定发生了变化导致出现这种情况吗?我在互联网上搜索其他开发人员是否遇到过此问题,并在Xamarin论坛中找到了this。在那里,将AndroidExplicitCrunch
构建属性设置为true
似乎可以解决这个问题,但当我尝试时,又出现了另一个构建错误。
无论如何,这是我在此期间尝试过的。现在,根据要求,这是我的诊断构建日志:
1>Project Performance Summary:
1> 3 ms C:\Development\Apps\FieldService-trunk\OverAllField.XamarinAndroid\OverAll.App.Shared\OverAll.App.Shared.csproj 3 calls
1> 1 ms GetTargetPath 1 calls
1> 0 ms GetNativeManifest 1 calls
1> 2 ms GetCopyToOutputDirectoryItems 1 calls
1> 4 ms C:\Development\Apps\FieldService-trunk\OverAllField.XamarinAndroid\OverAllField.XamarinAndroid.DataLayer\OverAllField.XamarinAndroid.DataLayer.csproj 3 calls
1> 1 ms GetTargetPath 1 calls
1> 0 ms GetNativeManifest 1 calls
1> 3 ms GetCopyToOutputDirectoryItems 1 calls
1> 40103 ms C:\Development\Apps\FieldService-trunk\OverAllField.XamarinAndroid\OverAllField.XamarinAndroid.ServiceClient\OverAllField.XamarinAndroid.ServiceClient.csproj 1 calls
1>
1>Target Performance Summary:
1> 0 ms Compile 1 calls
1> 0 ms ResolveReferences 1 calls
1> 0 ms BclBuildGetTargetPath 1 calls
1> 0 ms EnsureNuGetPackageBuildImports 1 calls
1> 0 ms AfterResGen 1 calls
1> 0 ms ResolveCodeAnalysisRuleSet 1 calls
1> 0 ms _CreatePropertiesCache 1 calls
1> 0 ms _SetTargetFrameworkMonikerAttribute 1 calls
1> 0 ms BeforeResGen 1 calls
1> 0 ms ModifyUnitTestPlatformVersion 1 calls
1> 0 ms CreateCustomManifestResourceNames 1 calls
1> 0 ms BclBuildAddProjectReferenceProperties 1 calls
1> 0 ms _ResolveMonoAndroidFramework 1 calls
1> 0 ms UpdateAndroidResources 1 calls
1> 0 ms CoreBuild 1 calls
1> 0 ms ExpressionBuildExtension 1 calls
1> 0 ms _CheckTargetFramework 1 calls
1> 0 ms _CopyAppConfigFile 1 calls
1> 0 ms Build 1 calls
1> 0 ms DeleteBuildInfoFile 1 calls
1> 0 ms CleanXsdCodeGen 1 calls
1> 0 ms _SetupInstantRun 1 calls
1> 0 ms GetFrameworkPaths 1 calls
1> 0 ms DeleteBuildInfoResource 1 calls
1> 0 ms _AddAndroidDefines 1 calls
1> 0 ms BuildOnlySettings 1 calls
1> 0 ms ComputeIntermediateSatelliteAssemblies 1 calls
1> 0 ms ValidationExtension 1 calls
1> 0 ms AfterCompile 1 calls
1> 0 ms _CheckInstantRunCondition 1 calls
1> 0 ms _GenerateSatelliteAssemblyInputs 1 calls
1> 0 ms _SetupApplicationJavaClass 1 calls
1> 0 ms _SetupDesignTimeBuildForIntellisense 1 calls
1> 0 ms SetWin32ManifestProperties 1 calls
1> 0 ms CreateSatelliteAssemblies 1 calls
1> 0 ms _CopySourceItemsToOutputDirectory 1 calls
1> 0 ms GetInstalledSDKLocations 1 calls
1> 0 ms _AddAndroidEnvironmentToCompile 1 calls
1> 0 ms _CheckForContent 1 calls
1> 0 ms _SeparateAppExtensionReferences 1 calls
1> 0 ms AfterResolveReferences 1 calls
1> 0 ms BeforeResolveReferences 1 calls
1> 0 ms PrepareResources 1 calls
1> 0 ms ResolveSDKReferences 1 calls
1> 0 ms _CheckForDeletedResourceFile 1 calls
1> 0 ms BeforeCompile 1 calls
1> 0 ms UpdateAndroidAssets 1 calls
1> 0 ms DesignTimeXamlMarkupCompilation 1 calls
1> 0 ms _AddMultiDexDependencyJars 1 calls
1> 0 ms PrepareForRun 1 calls
1> 0 ms ResGen 1 calls
1> 0 ms _GenerateAndroidAssetsDir 1 calls
1> 0 ms AfterBuild 1 calls
1> 0 ms BclBuildSetRunningFullBuild 1 calls
1> 0 ms GetNativeManifest 2 calls
1> 0 ms ExpandSDKReferences 1 calls
1> 0 ms GenerateTargetFrameworkMonikerAttribute 1 calls
1> 0 ms _GenerateAndroidResourceDir 1 calls
1> 0 ms CreateManifestResourceNames 1 calls
1> 0 ms BeforeBuild 1 calls
1> 0 ms _GenerateCompileInputs 1 calls
1> 0 ms _SetupDesignTimeBuildForBuild 1 calls
1> 0 ms PrepareResourceNames 1 calls
1> 0 ms _AddNativeLibraryArchiveToCompile 1 calls
1> 1 ms GetCopyToOutputDirectoryXamlAppDefs 3 calls
1> 1 ms _GenerateJavaDesignerForComponent 1 calls
1> 1 ms _CollectMonoAndroidOutputs 1 calls
1> 1 ms _SetEmbeddedWin32ManifestProperties 1 calls
1> 1 ms CoreResGen 1 calls
1> 1 ms _ValidateLinkMode 1 calls
1> 1 ms _GetLibraryImports 1 calls
1> 1 ms _CheckForCompileOutputs 1 calls
1> 1 ms _ReadPropertiesCache 1 calls
1> 1 ms GetTargetPath 2 calls
1> 1 ms _ComputeAndroidResourcePaths 1 calls
1> 1 ms SetBuildInfoDefaults 1 calls
1> 1 ms SplitResourcesByCulture 1 calls
1> 1 ms _SplitProjectReferencesByFileExistence 3 calls
1> 1 ms GenerateCompiledExpressionsTempFile 1 calls
1> 1 ms BclBuildDetermineReferencesToRedirect 1 calls
1> 1 ms _GetReferenceAssemblyPaths 1 calls
1> 1 ms PreXsdCodeGen 1 calls
1> 2 ms _RegisterMdbFilesWithFileWrites 1 calls
1> 2 ms PrepareForBuild 1 calls
1> 2 ms _BuildSdkCache 1 calls
1> 2 ms _CalculateAdditionalResourceCacheDirectories 1 calls
1> 2 ms AssignProjectConfiguration 1 calls
1> 2 ms _CreateAdditionalResourceCache 1 calls
1> 2 ms GetReferenceAssemblyPaths 1 calls
1> 3 ms _GetAdditionalResourcesFromAssemblies 1 calls
1> 3 ms _CheckDuplicateJavaLibraries 1 calls
1> 3 ms _CollectAdditionalResourceFiles 1 calls
1> 3 ms _ExtractLibraryProjectImports 1 calls
1> 3 ms _ComputeAndroidAssetsPaths 1 calls
1> 3 ms AssignTargetPaths 3 calls
1> 3 ms CopyFilesToOutputDirectory 1 calls
1> 4 ms _ValidateResourceCache 1 calls
1> 4 ms _ValidateAndroidPackageProperties 1 calls
1> 5 ms IncrementalClean 1 calls
1> 7 ms _ResolveMonoAndroidSdks 1 calls
1> 9 ms _CheckForInvalidConfigurationAndPlatform 3 calls
1> 10 ms GetCopyToOutputDirectoryItems 3 calls
1> 11 ms _CopyFilesMarkedCopyLocal 1 calls
1> 11 ms _CleanGetCurrentAndPriorFileWrites 1 calls
1> 12 ms _AddLibraryProjectsEmbeddedResourceToProject 1 calls
1> 18 ms ImplicitlyExpandDesignTimeFacades 1 calls
1> 29 ms _BuildLibraryImportsCache 1 calls
1> 41 ms ResolveProjectReferences 1 calls
1> 70 ms _SetLatestTargetFrameworkVersion 1 calls
1> 114 ms _ResolveLibraryProjectImports 1 calls
1> 138 ms ResolveAssemblyReferences 1 calls
1> 207 ms _UpdateAndroidResgen 1 calls
1> 356 ms _GetPrimaryCpuAbi 1 calls
1> 803 ms CoreCompile 1 calls
1> 38202 ms _BuildAdditionalResourcesCache 1 calls
1>
1>Task Performance Summary:
1> 0 ms CreateCSharpManifestResourceName 1 calls
1> 0 ms Delete 2 calls
1> 0 ms FindAppConfigFile 1 calls
1> 0 ms ResolveCodeAnalysisRuleSet 1 calls
1> 0 ms CallTarget 1 calls
1> 0 ms ResolveNonMSBuildProjectOutput 1 calls
1> 0 ms AssignCulture 1 calls
1> 1 ms GetFrameworkPath 1 calls
1> 1 ms GetAndroidPackageName 1 calls
1> 1 ms AssignProjectConfiguration 1 calls
1> 1 ms ReadImportedLibrariesCache 1 calls
1> 1 ms ReadLinesFromFile 2 calls
1> 1 ms GetAppSettingsDirectory 1 calls
1> 1 ms AssignTargetPath 18 calls
1> 1 ms CreateTemporaryDirectory 1 calls
1> 1 ms GetReferenceAssemblyPaths 2 calls
1> 2 ms Message 20 calls
1> 2 ms CalculateAdditionalResourceCacheDirectories 1 calls
1> 2 ms GetJavaPlatformJar 1 calls
1> 2 ms MakeDir 2 calls
1> 2 ms WriteLinesToFile 1 calls
1> 2 ms ConvertToAbsolutePath 1 calls
1> 3 ms RemoveDuplicates 2 calls
1> 3 ms CopyIfChanged 1 calls
1> 3 ms CheckDuplicateJavaLibraries 1 calls
1> 3 ms AndroidComputeResPaths 2 calls
1> 3 ms ReadLibraryProjectImportsCache 1 calls
1> 3 ms CreateProperty 41 calls
1> 4 ms CopyGeneratedJavaResourceClasses 1 calls
1> 4 ms GetExtraPackages 1 calls
1> 4 ms GetAndroidDefineConstants 1 calls
1> 4 ms CreateAndroidResourceStamp 1 calls
1> 5 ms FindUnderPath 5 calls
1> 5 ms ReadAdditionalResourcesFromAssemblyCache 2 calls
1> 5 ms CreateResgenManifest 1 calls
1> 6 ms CreateItem 23 calls
1> 6 ms RemoveDirFixed 1 calls
1> 12 ms CreateManagedLibraryResourceArchive 1 calls
1> 14 ms Copy 3 calls
1> 16 ms ConvertResourcesCases 1 calls
1> 21 ms GenerateResourceDesigner 1 calls
1> 28 ms GetImportedLibraries 1 calls
1> 49 ms MSBuild 3 calls
1> 49 ms ReadResolvedSdksCache 1 calls
1> 114 ms ResolveLibraryProjectImports 1 calls
1> 137 ms ResolveAssemblyReference 1 calls
1> 142 ms Aapt 1 calls
1> 347 ms GetPrimaryCpuAbi 1 calls
1> 792 ms Csc 1 calls
1> 38201 ms GetAdditionalResourcesFromAssemblies 1 calls
1>
1>Build succeeded.
1>
1>Time Elapsed 00:00:40.09
有第二个摘要(日志中有两个这样的摘要),但我无法将其包含在问题中,因为它会超过正文字符限制。 第二个摘要的较小版本:
2>Project Performance Summary:
2> 6 ms C:\Development\Apps\FieldService-trunk\OverAllField.XamarinAndroid\OverAll.App.Shared\OverAll.App.Shared.csproj 5 calls
2> 0 ms GetTargetPath 1 calls
2> 0 ms GetNativeManifest 1 calls
2> 1 ms GetCopyToOutputDirectoryItems 1 calls
2> 5 ms GetBuiltProjectOutputRecursive 2 calls
2> 9 ms C:\Development\Apps\FieldService-trunk\OverAllField.XamarinAndroid\OverAllField.XamarinAndroid.BarcodeScanner\OverAllField.XamarinAndroid.BarcodeScanner.csproj 4 calls
2> 0 ms GetTargetPath 1 calls
2> 2 ms GetNativeManifest 1 calls
2> 3 ms GetCopyToOutputDirectoryItems 1 calls
2> 4 ms GetBuiltProjectOutputRecursive 1 calls
2> 17 ms C:\Development\Apps\FieldService-trunk\OverAllField.XamarinAndroid\OverAllField.XamarinAndroid.DataLayer\OverAllField.XamarinAndroid.DataLayer.csproj 5 calls
2> 9 ms GetTargetPath 1 calls
2> 1 ms GetNativeManifest 1 calls
2> 2 ms GetCopyToOutputDirectoryItems 1 calls
2> 5 ms GetBuiltProjectOutputRecursive 2 calls
2> 46 ms C:\Development\Apps\FieldService-trunk\OverAllField.XamarinAndroid\OverAllField.XamarinAndroid.ServiceClient\OverAllField.XamarinAndroid.ServiceClient.csproj 4 calls
2> 21 ms GetTargetPath 1 calls
2> 0 ms GetNativeManifest 1 calls
2> 2 ms GetCopyToOutputDirectoryItems 1 calls
2> 23 ms GetBuiltProjectOutputRecursive 1 calls
2> 87736 ms C:\Development\Apps\FieldService-trunk\OverAllField.XamarinAndroid\OverAllField.Android\OverAllField.XamarinAndroid.csproj 1 calls
第二个目标性能摘要:(删除任何 <1000 ms 以减少字符)
2> 1955 ms _GenerateJavaStubs 1 calls
2> 3083 ms _CreateBaseApk 1 calls
2> 3467 ms _UpdateAndroidResgen 1 calls
2> 8944 ms _CompileToDalvikWithDx 1 calls
2> 66321 ms _BuildAdditionalResourcesCache 1 calls
第二个任务表现摘要:(同样,移除任何小于1000毫秒的内容以减少字符)
2> 1245 ms GenerateJavaStubs 1 calls
2> 2334 ms ConvertResourcesCases 3 calls
2> 4637 ms Aapt 2 calls
2> 8941 ms CompileToDalvik 1 calls
2> 66320 ms GetAdditionalResourcesFromAssemblies 1 calls
2>
2>Build succeeded.
2>
2>Time Elapsed 00:01:27.73
完整的诊断构建日志在这里
更新4
带有Android支持版本23的完整诊断构建日志在这里
构建时间之间存在显着差异。 支持版本24:
1>Project Performance Summary:
1> 40103 ms C:\Development\Apps\trunk\App.Droid\App.Droid.ServiceClient\App.Droid.ServiceClient.csproj 1 calls
...
2>Project Performance Summary:
2> 87736 ms C:\Development\Apps\trunk\App.Droid\App.Droid\App.Droid.csproj 1 calls
支持版本23:
1>Project Performance Summary:
1> 962 ms C:\Development\Apps\trunk-r1029\App.Droid\App.Droid.ServiceClient\App.Droid.ServiceClient.csproj 1 calls
2>Project Performance Summary:
2> 18214 ms C:\Development\Apps\trunk-r1029\App.Droid\App.Droid\App.Droid.csproj 1 calls
两者都是使用相同的Xamarin版本构建的,目标为Android 7.0,唯一的区别在于Android Support库的版本。这不是一个巨大的增加吗?
提前致谢!
_BuildAdditionalResourcesCache
的Target
需要很长时间。这可能会运行GetAdditionalResourcesFromAssemblies
的Task
。我相信这里可能发生的情况是,当您升级到Android支持库时,它需要下载和缓存最新版本。我认为新的构建时间也会更短?我需要完整的诊断构建输出来查看该Task
的内部。请随意上传。 - Jon Douglas