Ejemplo n.º 1
0
        //static string GetTargetFrameworkRootPath()
        //{
        //	return Path.Combine( VirtualFileSystem.Directories.EngineInternal, @"Tools\Framework" );
        //}

        //static bool ExecuteMSBuild( string args, out string result )
        //{
        //	var msBuildExePath = Path.Combine( GetMSBuildPath(), "msbuild.exe" );

        //	return ProcessUtils.RunAndWait( msBuildExePath, args, out result ) == 0;

        //	//if( ProcessUtils.RunAndWait( msBuildExePath, args, out string result ) != 0 )
        //	//{
        //	//	xx xx;

        //	//	throw new Exception( string.Format( "Failed to build Visual Studio project using arguments '{0} {1}'.\nOutput:{2}\n", msBuildExePath, args, result ) );
        //	//	//throw new BuildException( string.Format( "Failed to build Visual Studio project using arguments '{0} {1}'.\nOutput:{2}\n", msBuildExePath, args, result ) );
        //	//}
        //	//return result;
        //}

        //public static bool RestoreNuGetPackets( string solutionDir, string productName, BuildConfig config )
        //{
        //	var fileName = $"{productName}.sln";

        //	//TODO: Kill Running App before build?

        //	// restore changes in msbuild 15.5 https://stackoverflow.com/questions/46773698/msbuild-15-nuget-restore-and-build

        //	string arguments;
        //	{
        //		var builder = new StringBuilder();
        //		builder.Append( $"\"{solutionDir}\\{fileName}\" /nologo /maxcpucount /t:Restore" );
        //		builder.Append( $" /p:SolutionDir=\"{solutionDir}\"" );
        //		builder.Append( $" /p:Configuration={config.BuildConfiguration}" );
        //		builder.Append( $" /p:Platform=\"{config.BuildPlatform}\"" );

        //		//const bool InternalNuGet = true;
        //		//if( InternalNuGet )
        //		//{
        //		//	string nuGetRestoreTargets = Path.Combine( ToolsetHelper.GetNuGetBuildPath(), "NuGet.targets" );
        //		//	args.Append( $" /p:NuGetRestoreTargets=\"{nuGetRestoreTargets}\"" );
        //		//}

        //		builder.Append( $" /Verbosity:{config.Verbosity}" );

        //		arguments = builder.ToString();
        //	}

        //	//!!!!
        //	Log.Fatal( "VisualStudioSolutionUtility: RestoreNuGetPackets: impl." );

        //	var msBuildExePath = Path.Combine( GetMSBuildFolderPath(), "msbuild.exe" );

        //	var success = ProcessUtility.RunAndWait( msBuildExePath, arguments, out var result ) == 0;
        //	result = result.Trim( new char[] { '\r', '\n' } );

        //	if( success )
        //	{
        //		// result ignored ?
        //		Log.Info( $"NuGet packages for \'{fileName}\' was restored successfully." );
        //	}
        //	else
        //	{
        //		var error = $"Unable to restore NuGet packages for \'{fileName}\'.\r\n\r\n" + result;
        //		Log.Error( result );
        //	}
        //	return success;
        //}

        public static bool BuildSolution(string solutionDir, string productName, BuildConfig config, bool rebuild)
        {
            var fileName = $"{productName}.sln";

            string arguments;
            {
                //!!!!юзает последнюю версию фрейморка. например Preview
                //[-r | --runtime<RUNTIME_IDENTIFIER>]

                var builder = new StringBuilder();
                builder.Append("build");
                builder.Append($" \"{solutionDir}\\{productName}.sln\"");

                builder.Append($" --configuration {config.BuildConfiguration}");
                builder.Append($" --framework netcoreapp3.1");

                if (!string.IsNullOrEmpty(config.OutDir))
                {
                    builder.Append($" --output \"{config.OutDir}\"");
                }

                builder.Append($" --verbosity {config.Verbosity}");

                //!!!!optional?
                //builder.Append( " --no-restore" );

                if (rebuild)
                {
                    builder.Append(" --no-incremental");
                }

                //builder.Append( $" /p:Platform=\"{config.BuildPlatform}\"" );
                //if( !string.IsNullOrEmpty( config.OutputAssemblyName ) )
                //	builder.Append( $" /p:AssemblyName=\"{config.OutputAssemblyName}\"" );

                //builder.Append( $" /p:AppxPackage={config.CreateAppxPackage}" );
                //builder.Append( $" /p:AppxBundlePlatforms=\"{config.AppxBundlePlatforms}\"" );
                //builder.Append( $" /p:AppxBundle={config.CreateAppxBundle}" );
                //builder.Append( $" /p:AppxPackageSigningEnabled={config.AppxPackageSigningEnabled}" );

                //// instead of TargetFrameworkRootPath we can also use FrameworkPathOverride prop but only for .net 4.x building.
                //// FrameworkPathOverride will not work for UWP app building.
                //string frameworkRootPath = GetTargetFrameworkRootPath();
                //if( Directory.Exists( frameworkRootPath ) )
                //	builder.Append( $" /p:TargetFrameworkRootPath=\"{frameworkRootPath}\"" );
                //else
                //	Log.Info( $"Framework Root Path '{frameworkRootPath}' not found. will be used Targeting Pack installed in system." );

                arguments = builder.ToString();
            }

            var msBuildExePath = GetDotNetExecutablePath();
            var success        = ProcessUtility.RunAndWait(msBuildExePath, arguments, out var result) == 0;

            //var msBuildExePath = Path.Combine( GetDotNetExecutablePath(), Path.Combine( GetMSBuildFolderPath(), "MSBuild.dll" ) );

            //var msBuildExePath = Path.Combine( GetMSBuildFolderPath(), "msbuild.exe" );
            //var success = ProcessUtility.RunAndWait( msBuildExePath, arguments, out var result ) == 0;

            result = result.Trim(new char[] { '\r', '\n' });

            if (success)
            {
                //!!!!result ignored?

                Log.Info($"\'{fileName}\' was built successfully.");
                return(true);
            }
            else
            {
                if (EngineApp.ApplicationType == EngineApp.ApplicationTypeEnum.Simulation)
                {
                    var error = $"Unable to compile solution \'{fileName}\'. Continue?\r\n\r\n{result}\r\n\r\nCommand line:\r\n{msBuildExePath} {arguments}\r\n\r\nSee details in log.";

                    if (LogPlatformFunctionality.Get().ShowMessageBox(error, "Error", EMessageBoxButtons.OKCancel) == EDialogResult.Cancel)
                    {
                        Process.GetCurrentProcess().Kill();
                        Environment.Exit(0);
                    }
                }
                else
                {
                    var error = $"Unable to compile solution \'{fileName}\'.\r\n\r\n{result}\r\n\r\nCommand line:\r\n{msBuildExePath} {arguments}\r\n\r\nSee details in log.";
                    Log.Error(error);
                }

                return(false);
            }



            //var fileName = $"{productName}.sln";

            //string arguments;
            //{
            //	var builder = new StringBuilder();
            //	builder.Append( $"\"{solutionDir}\\{productName}.sln\" /nologo /maxcpucount /t:Build" );
            //	builder.Append( $" /p:SolutionDir=\"{solutionDir}\"" );
            //	if( !string.IsNullOrEmpty( config.OutDir ) )
            //		builder.Append( $" /p:OutDir=\"{config.OutDir}\"" );
            //	builder.Append( $" /p:Configuration={config.BuildConfiguration}" );
            //	builder.Append( $" /p:Platform=\"{config.BuildPlatform}\"" );
            //	if( !string.IsNullOrEmpty( config.OutputAssemblyName ) )
            //		builder.Append( $" /p:AssemblyName=\"{config.OutputAssemblyName}\"" );

            //	builder.Append( $" /p:AppxPackage={config.CreateAppxPackage}" );
            //	builder.Append( $" /p:AppxBundlePlatforms=\"{config.AppxBundlePlatforms}\"" );
            //	builder.Append( $" /p:AppxBundle={config.CreateAppxBundle}" );
            //	builder.Append( $" /p:AppxPackageSigningEnabled={config.AppxPackageSigningEnabled}" );

            //	// instead of TargetFrameworkRootPath we can also use FrameworkPathOverride prop but only for .net 4.x building.
            //	// FrameworkPathOverride will not work for UWP app building.
            //	string frameworkRootPath = GetTargetFrameworkRootPath();
            //	if( Directory.Exists( frameworkRootPath ) )
            //		builder.Append( $" /p:TargetFrameworkRootPath=\"{frameworkRootPath}\"" );
            //	else
            //		Log.Info( $"Framework Root Path '{frameworkRootPath}' not found. will be used Targeting Pack installed in system." );

            //	builder.Append( $" /Verbosity:{config.Verbosity}" );

            //	if( rebuild )
            //		builder.Append( " /t:Rebuild" );

            //	//const bool PerformanceSummary = false;
            //	//if( PerformanceSummary )
            //	//	builder.Append( $" /clp:performancesummary" );

            //	arguments = builder.ToString();
            //}

            //var msBuildExePath = Path.Combine( GetDotNetExecutablePath(), Path.Combine( GetMSBuildFolderPath(), "MSBuild.dll" ) );
            //var success = ProcessUtility.RunAndWait( msBuildExePath, arguments, out var result ) == 0;

            ////var msBuildExePath = Path.Combine( GetMSBuildFolderPath(), "msbuild.exe" );
            ////var success = ProcessUtility.RunAndWait( msBuildExePath, arguments, out var result ) == 0;

            //result = result.Trim( new char[] { '\r', '\n' } );

            //if( success )
            //{
            //	//!!!!result ignored?

            //	Log.Info( $"\'{fileName}\' was built successfully." );
            //	return true;
            //}
            //else
            //{
            //	var error = $"Unable to compile solution \'{fileName}\'.\r\n\r\n{result}\r\n\r\nCommand line:\r\n{msBuildExePath} {arguments}\r\n\r\nSee details in log.";
            //	Log.Error( error );
            //	return false;
            //}
        }