void IUtf8JsonSerializable.Write(Utf8JsonWriter writer)
 {
     writer.WriteStartObject();
     writer.WritePropertyName("modelId");
     writer.WriteStringValue(ModelId);
     if (Optional.IsDefined(Description))
     {
         writer.WritePropertyName("description");
         writer.WriteStringValue(Description);
     }
     writer.WritePropertyName("buildMode");
     writer.WriteStringValue(BuildMode.ToString());
     if (Optional.IsDefined(AzureBlobSource))
     {
         writer.WritePropertyName("azureBlobSource");
         writer.WriteObjectValue(AzureBlobSource);
     }
     if (Optional.IsCollectionDefined(Tags))
     {
         writer.WritePropertyName("tags");
         writer.WriteStartObject();
         foreach (var item in Tags)
         {
             writer.WritePropertyName(item.Key);
             writer.WriteStringValue(item.Value);
         }
         writer.WriteEndObject();
     }
     writer.WriteEndObject();
 }
コード例 #2
0
ファイル: ProjectService.cs プロジェクト: punker76/Macabre2D
        public async Task <bool> BuildProject(BuildMode mode)
        {
            var referencePath = this.GetReferencePath();

            if (!Directory.Exists(referencePath))
            {
                Directory.CreateDirectory(referencePath);
            }

            foreach (var file in this._referenceFiles)
            {
                File.Copy(file, Path.Combine(referencePath, file), true);
            }

            foreach (var configuration in this.CurrentProject.BuildConfigurations)
            {
                configuration.CopyMonoGameFrameworkDLL(referencePath);
            }

            var result = await this.BuildContent(mode);

            var tempDirectoryPath = this.GetTempDirectoryPath();

            if (result)
            {
                await Task.Run(async() => {
                    this.CurrentProject.GameSettings.StartupScenePath = Path.ChangeExtension(this.CurrentProject.StartUpSceneAsset?.GetContentPath(), null);

                    var properties = new Dictionary <string, string> {
                        { "Configuration", mode.ToString() }
                    };

                    var solutionPath    = this.GetSolutionPath();
                    var buildParameters = new Microsoft.Build.Execution.BuildParameters();
                    var buildRequest    = new Microsoft.Build.Execution.BuildRequestData(solutionPath, properties, null, new string[] { "Build" }, null);
                    var buildResult     = Microsoft.Build.Execution.BuildManager.DefaultBuildManager.Build(buildParameters, buildRequest);
                    result &= buildResult.OverallResult == Microsoft.Build.Execution.BuildResultCode.Success;

                    if (result)
                    {
                        await FileHelper.DeleteDirectory(tempDirectoryPath, SecondsToAttemptDelete, true);
                        FileHelper.CopyDirectory(this.GetBinPath(true), tempDirectoryPath);
                    }
                    else if (!Directory.Exists(tempDirectoryPath))
                    {
                        Directory.CreateDirectory(tempDirectoryPath);
                        foreach (var file in this._referenceFiles)
                        {
                            File.Copy(file, Path.Combine(tempDirectoryPath, file), true);
                        }
                    }
                });
            }

            await this._assemblyService.LoadAssemblies(tempDirectoryPath);

            return(result);
        }
コード例 #3
0
ファイル: ContentBuilder.cs プロジェクト: awu2147/SunbirdMB
        private string GetMode(BuildMode buildMode)
        {
            var enumType            = typeof(BuildMode);
            var memberInfos         = enumType.GetMember(buildMode.ToString());
            var enumValueMemberInfo = memberInfos.FirstOrDefault(m => m.DeclaringType == enumType);
            var valueAttributes     = enumValueMemberInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
            var description         = ((DescriptionAttribute)valueAttributes[0]).Description;

            return(description);
        }
コード例 #4
0
ファイル: ProjectService.cs プロジェクト: punker76/Macabre2D
        private void GenerateContentFile(BuildMode mode)
        {
            var assets     = this.CurrentProject.AssetFolder.GetAllContentAssets();
            var dllPath    = $@"..\..\{GameplayName}\bin\{mode.ToString()}\{this.CurrentProject.SafeName}.{GameplayName}.dll";
            var sourcePath = this.GetSourcePath();

            foreach (var configuration in this.CurrentProject.BuildConfigurations)
            {
                configuration.GenerateContent(sourcePath, assets, this.CurrentProject.GameSettings, this._serializer, dllPath);
            }
        }
コード例 #5
0
        /// <summary>
        /// 编译Xcode(这里是出母包版本)
        /// </summary>
        /// <param name="mode"></param>
        static private (bool, string) BuildIpa(BuildMode mode, string outdir)
        {
            bool ret = false;

            BDEditorApplication.SwitchToiOS();
            //DeleteIL2cppCache();
            //具体IOS的的配置
            PlayerSettings.gcIncremental = true;
            //PlayerSettings.stripEngineCode = true;
            // if (PlayerSettings.GetManagedStrippingLevel(BuildTargetGroup.iOS) == ManagedStrippingLevel.High)
            // {
            // PlayerSettings.SetManagedStrippingLevel(BuildTargetGroup.iOS, ManagedStrippingLevel.Low);
            //}
            //
            //文件夹处理
            var outputPath = IPath.Combine(outdir, string.Format("{0}_{1}", Application.identifier, mode.ToString()));

            if (Directory.Exists(outputPath))
            {
                Directory.Delete(outputPath, true);
            }

            Directory.CreateDirectory(outputPath);


            //开始项目一键打包
            string[]     scenes   = { SCENEPATH };
            BuildOptions opa      = BuildOptions.None;
            BuildMode    realmode = BuildMode.Release;

            switch (mode)
            {
            case BuildMode.UseCurrentConfigDebug:
            case BuildMode.Debug:
            {
                realmode = BuildMode.Debug;
                opa      = BuildOptions.CompressWithLz4HC | BuildOptions.Development | BuildOptions.AllowDebugging | BuildOptions.ConnectWithProfiler | BuildOptions.EnableDeepProfilingSupport;
            }
            break;

            case BuildMode.UseCurrentConfigRelease:
            case BuildMode.Release:
            {
                realmode = BuildMode.Release;
                opa      = BuildOptions.CompressWithLz4HC;
            }
            break;
            }

            //构建包体
            Debug.Log("------------->Begin build<------------");
            UnityEditor.BuildPipeline.BuildPlayer(scenes, outputPath, BuildTarget.iOS, opa);
            Debug.Log("------------->End build<------------");


            //检测xcode
            if (File.Exists(outputPath + "/Info.plist"))
            {
                var shellPath = "";
                //这里需要判断Editor类型,所以使用u3d的 Application.Platform
                if (Application.platform == RuntimePlatform.WindowsEditor)
                {
                    shellPath = BApplication.DevOpsCIPath + string.Format("/BuildIpa_{0}.cmd", realmode);
                }
                else if (Application.platform == RuntimePlatform.OSXEditor)
                {
                    shellPath = BApplication.DevOpsCIPath + string.Format("/BuildIpa_{0}.shell", realmode);
                }

                if (File.Exists(shellPath))
                {
                    //执行BuildIpa的shell
                    Debug.Log("即将执行:" + shellPath);
                    ExecuteShell(shellPath);
                    //删除xcode项目
                    Directory.Delete(outputPath, true);

                    var ipaPath = outputPath + ".ipa";
                    if (File.Exists(ipaPath))
                    {
                        ret = true;
                    }
                    else
                    {
                        Debug.LogError("【BDFramework】 not found:" + ipaPath);
                    }
                }
                else
                {
                    //For ci
                    throw new Exception("没找到编译xcode脚本! 后续请配合Jekins/Teamcity出包!");
                }

                EditorUtility.RevealInFinder(outputPath);
            }
            else
            {
                //For ci
                throw new Exception("【BDFramework】Package not exsit! -" + outputPath);
            }

            return(ret, outputPath);
        }
コード例 #6
0
        /// <summary>
        /// 打包APK
        /// </summary>
        static private (bool, string) BuildAPK(BuildMode mode, string outdir)
        {
            bool ret = false;

            //切换到Android
            BDEditorApplication.SwitchToAndroid();
            //删除il2cpp缓存
            //DeleteIL2cppCache();

            if (!BDEditorApplication.BDFrameWorkFrameEditorSetting.IsSetConfig())
            {
                //For ci
                throw new Exception("请注意设置apk keystore账号密码");
            }

            //模式
            AndroidConfig androidConfig = null;

            switch (mode)
            {
            case BuildMode.Debug:
            case BuildMode.UseCurrentConfigDebug:
            {
                androidConfig = BDEditorApplication.BDFrameWorkFrameEditorSetting.AndroidDebug;
            }
            break;

            case BuildMode.Release:
            case BuildMode.UseCurrentConfigRelease:
            {
                androidConfig = BDEditorApplication.BDFrameWorkFrameEditorSetting.Android;
            }
            break;
            }


            //秘钥相关
            var keystorePath = IPath.Combine(BApplication.ProjectRoot, androidConfig.keystoreName);

            if (!File.Exists(keystorePath))
            {
                //For ci
                throw new Exception("【keystore】不存在:" + keystorePath);
            }

            PlayerSettings.Android.keystoreName = keystorePath;
            PlayerSettings.keystorePass         = androidConfig.keystorePass;
            PlayerSettings.Android.keyaliasName = androidConfig.keyaliasName;
            PlayerSettings.keyaliasPass         = androidConfig.keyaliasPass;
            Debug.Log("【keystore】" + PlayerSettings.Android.keystoreName);
            //具体安卓的配置
            PlayerSettings.gcIncremental = true;
            PlayerSettings.Android.preferredInstallLocation = AndroidPreferredInstallLocation.Auto;
            //PlayerSettings.stripEngineCode = true;
            // if (PlayerSettings.GetManagedStrippingLevel(BuildTargetGroup.Android) == ManagedStrippingLevel.High)
            // {
            //PlayerSettings.SetManagedStrippingLevel(BuildTargetGroup.Android, ManagedStrippingLevel.Low);
            // }


            //开启符号表
            EditorUserBuildSettings.androidCreateSymbolsZip = true;
            //不同模式的设置
            // switch (mode)
            // {
            //     case BuildMode.Debug:
            //     {
            //
            //     }
            //         break;
            //     case BuildMode.Release:
            //     {
            //
            //     }
            //         break;
            // }
            //

            var outputPath = IPath.Combine(outdir, string.Format("{0}_{1}.apk", Application.identifier, mode.ToString()));

            //文件夹处理
            if (!Directory.Exists(outdir))
            {
                Directory.CreateDirectory(outdir);
            }

            if (File.Exists(outputPath))
            {
                File.Delete(outputPath);
            }

            //开始项目一键打包
            string[]     scenes = { SCENEPATH };
            BuildOptions opa    = BuildOptions.None;

            switch (mode)
            {
            case BuildMode.UseCurrentConfigDebug:
            case BuildMode.Debug:
            {
                opa = BuildOptions.CompressWithLz4HC | BuildOptions.Development | BuildOptions.AllowDebugging | BuildOptions.ConnectWithProfiler | BuildOptions.EnableDeepProfilingSupport;
            }
            break;

            case BuildMode.UseCurrentConfigRelease:
            case BuildMode.Release:
            {
                opa = BuildOptions.CompressWithLz4HC;
            }
            break;
            }

            //构建包体
            Debug.Log("------------->Begin build<------------");
            UnityEditor.BuildPipeline.BuildPlayer(scenes, outputPath, BuildTarget.Android, opa);
            Debug.Log("------------->End build<------------");

            //构建出判断
            if (File.Exists(outputPath))
            {
                Debug.Log("Build Success :" + outputPath);
                ret = true;
                EditorUtility.RevealInFinder(outputPath);
            }
            else
            {
                //For ci
                throw new Exception("【BDFramework】Package not exsit! -" + outputPath);
            }

            return(ret, outputPath);
        }
コード例 #7
0
        public IBuilderStrategy GetStrategy(BuildMode buildMode)
        {
            var strategy = _resolver.Resolve<IBuilderStrategy>(buildMode.ToString());

            return strategy;
        }
コード例 #8
0
        private void RenderBuildAndRunning()
        {
            EditorGUILayout.LabelField(new GUIContent("Building & Running (" + _currentMode.ToString() + ")", "Building and optionally auto-running builds."), EditorStyles.centeredGreyMiniLabel);

            EditorGUI.BeginChangeCheck();

            _buildTarget = (BuildTarget)EditorGUILayout.EnumPopup(new GUIContent("Build Target", "Which platform to build for."), _buildTarget);

            if (EditorGUI.EndChangeCheck())
            {
                BuildScriptPrefs.SetBuildTarget(_buildTarget);
            }

            EditorGUI.BeginChangeCheck();

            _devBuild = EditorGUILayout.Toggle(new GUIContent("Development Build", "Toggle to build as development build."), _devBuild);

            if (EditorGUI.EndChangeCheck())
            {
                BuildScriptPrefs.SetDevelopmentBuild(_devBuild);
            }

            EditorGUI.BeginChangeCheck();
            _buildAndRun = EditorGUILayout.Toggle(new GUIContent("Build and Run?", "Whether to auto-run the game after building, if successful."), _buildAndRun);

            if (EditorGUI.EndChangeCheck())
            {
                BuildScriptPrefs.SetBuildAndRun(_buildAndRun);
            }

            // Actual mode pages
            switch (_currentMode)
            {
            case BuildMode.Singleplayer:
            {
                OnSingleplayerGUI();
                break;
            }

            case BuildMode.Client:
            {
                OnClientGUI();
                break;
            }

            case BuildMode.Server:
            {
                OnServerGUI();
                break;
            }
            }

            // vr mode
            using (var vrrow = new EditorGUILayout.HorizontalScope())
            {
                GUI.enabled = !Application.isPlaying;
                var vrSupport = EditorGUILayout.Toggle("VR Mode", PlayerSettings.virtualRealitySupported);
                if (!Application.isPlaying)
                {
                    PlayerSettings.virtualRealitySupported = vrSupport;
                }
                GUI.enabled = true;

                // buttons for VR platform definition - easier to access than player settings
                var supDevices = UnityEngine.XR.XRSettings.supportedDevices;
                var goodColor  = Color.green;
                var badColor   = Color.red;

                GUI.color = supDevices.Contains("OpenVR") ? goodColor : badColor;
                if (GUILayout.Button("OpenVR"))
                {
                    if (supDevices.Contains("OpenVR"))
                    {
                        // do nothing...
                    }
                    else
                    {
                        // add a new array containing only OpenVR
                        var buildTargetGroup = BuildPipeline.GetBuildTargetGroup(this._buildTarget);
                        UnityEditorInternal.VR.VREditor.SetVREnabledDevicesOnTargetGroup(buildTargetGroup, new string[] { "OpenVR" });
                    }
                }

                GUI.color = supDevices.Contains("Oculus") ? goodColor : badColor;
                if (GUILayout.Button("Oculus"))
                {
                    if (supDevices.Contains("Oculus"))
                    {
                        // do nothing...
                    }
                    else
                    {
                        // add a new array containing only Oculus
                        var buildTargetGroup = BuildPipeline.GetBuildTargetGroup(this._buildTarget);
                        UnityEditorInternal.VR.VREditor.SetVREnabledDevicesOnTargetGroup(buildTargetGroup, new string[] { "Oculus" });
                    }
                }

                GUI.color = Color.white;
            }
        }
コード例 #9
0
        public IBuilderStrategy GetStrategy(BuildMode buildMode)
        {
            var strategy = _resolver.Resolve <IBuilderStrategy>(buildMode.ToString());

            return(strategy);
        }
コード例 #10
0
        /// <summary>
        /// 编译Xcode(这里是出母包版本)
        /// </summary>
        /// <param name="mode"></param>
        static public void BuildXCode(BuildMode mode)
        {
            //具体IOS的的配置
            PlayerSettings.gcIncremental   = true;
            PlayerSettings.stripEngineCode = true;
            //
            var outdir = BDApplication.ProjectRoot + "/Build";

            var outputPath = IPath.Combine(outdir, string.Format("{0}_{1}", Application.productName, mode.ToString()));

            //文件夹处理
            if (File.Exists(outputPath))
            {
                File.Delete(outputPath);
            }

            Directory.CreateDirectory(outputPath);

            //清空StreamingAsset
            var android = IPath.Combine(Application.streamingAssetsPath, "Android");

            if (Directory.Exists(android))
            {
                Directory.Delete(android, true);
            }

            var win = IPath.Combine(Application.streamingAssetsPath, "Windows");

            if (Directory.Exists(win))
            {
                Directory.Delete(win, true);
            }

            //开始项目一键打包
            string[]     scenes = { SCENEPATH };
            BuildOptions opa    = BuildOptions.None;

            if (mode == BuildMode.Debug)
            {
                opa = BuildOptions.CompressWithLz4HC | BuildOptions.Development | BuildOptions.AllowDebugging | BuildOptions.ConnectWithProfiler | BuildOptions.EnableDeepProfilingSupport;
            }
            else if (mode == BuildMode.Release)
            {
                opa = BuildOptions.CompressWithLz4HC;
            }

            BuildPipeline.BuildPlayer(scenes, outputPath, BuildTarget.iOS, opa);
            if (File.Exists(outputPath + "/Info.plist"))
            {
                Debug.Log("Build Success :" + outputPath + ",后续请配合Jekins出包!");
                EditorUtility.RevealInFinder(outputPath);
            }
            else
            {
                Debug.LogError(new Exception("【BDFRamework】Build Fail! Please Check the log! "));
            }
        }
コード例 #11
0
        /// <summary>
        /// 打包APK
        /// </summary>
        static public void BuildAPK(BuildMode mode)
        {
            if (!BDEditorApplication.BdFrameEditorSetting.IsSetConfig())
            {
                Debug.LogError("请注意设置apk keystore账号密码");
                return;
            }

            var absroot = Application.dataPath.Replace("Assets", "");

            PlayerSettings.Android.keystoreName = absroot + BDEditorApplication.BdFrameEditorSetting.Android.keystoreName;
            PlayerSettings.keystorePass         = BDEditorApplication.BdFrameEditorSetting.Android.keystorePass;
            PlayerSettings.Android.keyaliasName = BDEditorApplication.BdFrameEditorSetting.Android.keyaliasName;
            PlayerSettings.keyaliasPass         = BDEditorApplication.BdFrameEditorSetting.Android.keyaliasPass;
            //具体安卓的配置
            PlayerSettings.gcIncremental   = true;
            PlayerSettings.stripEngineCode = true;
            PlayerSettings.Android.preferredInstallLocation = AndroidPreferredInstallLocation.Auto;
            //
            var outdir     = BDApplication.ProjectRoot + "/Build";
            var outputPath = IPath.Combine(outdir, string.Format("{0}_{1}.apk", Application.productName, mode.ToString()));

            //文件夹处理
            if (!Directory.Exists(outdir))
            {
                Directory.CreateDirectory(outdir);
            }
            if (File.Exists(outputPath))
            {
                File.Delete(outputPath);
            }
            //清空StreamingAsset
            var ios = IPath.Combine(Application.streamingAssetsPath, "iOS");

            if (Directory.Exists(ios))
            {
                Directory.Delete(ios, true);
            }

            var win = IPath.Combine(Application.streamingAssetsPath, "Windows");

            if (Directory.Exists(win))
            {
                Directory.Delete(win, true);
            }

            //开始项目一键打包
            string[]     scenes = { SCENEPATH };
            BuildOptions opa    = BuildOptions.None;

            if (mode == BuildMode.Debug)
            {
                opa = BuildOptions.CompressWithLz4HC | BuildOptions.Development | BuildOptions.AllowDebugging | BuildOptions.ConnectWithProfiler | BuildOptions.EnableDeepProfilingSupport;
            }
            else if (mode == BuildMode.Release)
            {
                opa = BuildOptions.CompressWithLz4HC;
            }

            UnityEditor.BuildPipeline.BuildPlayer(scenes, outputPath, BuildTarget.Android, opa);
            if (File.Exists(outputPath))
            {
                Debug.Log("Build Success :" + outputPath);
                EditorUtility.RevealInFinder(outputPath);
            }
            else
            {
                Debug.LogError(new Exception("Build Fail! Please Check the log! "));
            }
        }
コード例 #12
0
 public string GetCompiledContentPath(string sourcePath, BuildMode mode)
 {
     return(Path.Combine(sourcePath, this.Platform.ToString(), "bin", mode.ToString(), "Content"));
 }