public override bool Upgrade(PackageLoadParameters loadParameters, PackageSession session, ILogger log, Package dependentPackage, PackageDependency dependency, Package dependencyPackage, IList <PackageLoadingAssetFile> assetFiles) { if (dependency.Version.MinVersion < new PackageVersion("3.1.0.2-beta01")) { foreach (var assetFile in assetFiles) { try { // Add new generic parameter to ShadowMapReceiverDirectional in effect log if (assetFile.OriginalFilePath.GetFileExtension() == ".xkeffectlog") { var assetContent = assetFile.AssetContent ?? File.ReadAllBytes(assetFile.OriginalFilePath.FullPath); var assetContentString = System.Text.Encoding.UTF8.GetString(assetContent); var newAssetContentString = System.Text.RegularExpressions.Regex.Replace(assetContentString, @"([ ]*)- ClassName:", "$1- !ShaderClassSource\r\n$1 ClassName:"); if (assetContentString != newAssetContentString) { // Need replacement, update with replaced text // Save file (usually we shouldn't do that, but since we have the renaming in 4.0 we force everything to be on disk before moving on File.WriteAllBytes(assetFile.OriginalFilePath.FullPath, System.Text.Encoding.UTF8.GetBytes(newAssetContentString)); } } } catch (Exception e) { log.Warning($"Could not upgrade asset [{assetFile.AssetLocation}] to ShaderClassSource", e); } } } if (dependency.Version.MinVersion < new PackageVersion("4.0.0.0")) { foreach (var assetFile in assetFiles) { try { // Note: usually we shouldn't replace files directly (file might be already moved/modified in-memory) // but since we're currently the first/only upgrader to run, that's fine and later (4.1) we can get rid of this upgrade path assetFile.OriginalFilePath = assetFile.FilePath = XenkoToStrideRenameHelper.RenameStrideFile(assetFile.OriginalFilePath.FullPath, XenkoToStrideRenameHelper.StrideContentType.Asset); } catch (Exception e) { log.Warning($"Could not upgrade asset [{assetFile.AssetLocation}] to Stride", e); } } } return(true); }
private void UpgradeStrideCode(Package dependentPackage, ILogger log) { if (dependentPackage == null) { throw new ArgumentNullException(nameof(dependentPackage)); } var projectFullPath = (dependentPackage.Container as SolutionProject)?.FullPath; if (projectFullPath != null) { Task.Run(async() => { var allFiles = Directory.GetFiles(Path.GetDirectoryName(projectFullPath), "*.*", SearchOption.AllDirectories); // Search for all source files in project directory foreach (var extension in new[] { new { Extension = ".csproj", Type = XenkoToStrideRenameHelper.StrideContentType.Project }, new { Extension = ".cs", Type = XenkoToStrideRenameHelper.StrideContentType.Code } }) { var files = allFiles.Where(file => file.ToLower().EndsWith(extension.Extension)); foreach (var file in files) { XenkoToStrideRenameHelper.RenameStrideFile(file, extension.Type); } } /*var files = allFiles.Where(file => file.ToLower().EndsWith(extension.Extension)); * foreach (var file in files) * { * var extension = Path.GetExtension(file).ToLower(); * switch (extension) * { * case ".cs": * XenkoToStrideRenameHelper.RenameStrideFile(file, XenkoToStrideRenameHelper.StrideContentType.Code); * break; * case ".csproj": * XenkoToStrideRenameHelper.RenameStrideFile(file, XenkoToStrideRenameHelper.StrideContentType.Project); * break; * case ".xksl": * case ".xkfx": * XenkoToStrideRenameHelper.RenameStrideFile(file, XenkoToStrideRenameHelper.StrideContentType.Asset); * break; * } * }*/ }).Wait(); } }