• 用代码控制build,相关资料搜集


    最近在做WP的语言文件编译时,发现多个语种的编译真的很辛苦啊。
    于是搜集了 自动编译的相关代码。
    梦想有一天,把语言文件都放在excel里面,一键搞定所有的语言dll。

    代码如下:

      static void Main(string[] args)
            {
                //string path = @"E:\OpenSource\SMSHelper\SMSHelper\SMSHelper.csproj";
                string path2 = @"SMSHelper\SMSHelper\SMSHelper.csproj";
                string path1 = @"SMSHelper\Language\AppResLib\AppResLib.vcxproj";
    
                BuildByManager2(path2);
                Console.Read();
            }
    
            /// <summary>
            /// use Microsoft.Build.BuildEngine.Engine to build
            /// </summary>
            /// <remarks>
            /// 1.target framework must be full version, not client profile
            /// 2.must add reference Microsoft.Build.Engine, add reference Microsoft.Build.Framework(optional)
            /// 3.can't build C++ project,  why?
            /// </remarks>
            /// <see cref="http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/cdc297c5-cde3-40a2-a7fe-38eeab36f1bb/"/>
            static void buildByEngine(string projectFile)
            {
                // Instantiate a new Engine object
                Engine engine = new Engine();
    
                //Point to the correct path that contains the 2.0 clr/tools
                //engine.BinPath = @"C:\Windows\Microsoft.NET\Framework\v4.0.30319\";
    
                // Instantiate a new FileLogger to generate build log
                FileLogger logger = new FileLogger();
    
                // Set logfile parameter to indicate the log destination
                logger.Parameters = @"logfile=build.log";
    
                // Register the logger with the engine
                engine.RegisterLogger(logger);
    
                // Build a project file
                bool success = engine.BuildProjectFile(projectFile);
    
                if (success)
                    Console.WriteLine("Success!");
                else
                    Console.WriteLine("Build failed - look at c:\temp\build.log for details");
            }
    
            /// <summary>
            /// easy mode to build.
            /// </summary>
            /// <remarks>
            /// client profile is ok.
            /// </remarks>
            /// <see cref="http://www.cnblogs.com/winner/archive/2008/05/26/1207903.html"/>
            /// <param name="projectFile"></param>
            static void buildByCommand(string projectFile)
            {
                var commandPath = GetFrameworkDirectory() + "MSBuild";
                Process p = new Process();
                p.StartInfo.FileName = "cmd.exe";
                p.StartInfo.UseShellExecute = false;
                p.StartInfo.RedirectStandardInput = true;
                p.StartInfo.RedirectStandardOutput = true;
                p.StartInfo.RedirectStandardError = true;
                p.StartInfo.CreateNoWindow = true;
                p.Start();
                p.StandardInput.WriteLine(commandPath + "  " + projectFile);
                p.StandardInput.WriteLine("exit");
                string strRst = p.StandardOutput.ReadToEnd();
                Console.WriteLine(strRst);
                p.Close();
            }
    
            /// <summary>
            /// easy mode to build.
            /// </summary>
            /// <param name="projectFile"></param>
            /// <see cref="http://stackoverflow.com/questions/7264682/running-msbuild-programmatically"/>
            static void buildByCommand2(string projectFile)
            {
                var p = new Process();
                p.StartInfo = new ProcessStartInfo(GetFrameworkDirectory() + "MSBuild");
                p.StartInfo.Arguments = projectFile;
                p.Start();
            }
    
            /// <summary>
            /// get framework path
            /// </summary>
            /// <see cref="http://stackoverflow.com/questions/375860/getting-the-net-framework-directory-path"/>
            /// <returns></returns>
            static string GetFrameworkDirectory()
            {
                // This is the location of the .Net Framework Registry Key
                string framworkRegPath = @"Software\Microsoft\.NetFramework";
    
                // Get a non-writable key from the registry
                RegistryKey netFramework = Registry.LocalMachine.OpenSubKey(framworkRegPath, false);
    
                // Retrieve the install root path for the framework
                string installRoot = netFramework.GetValue("InstallRoot").ToString();
    
                // Retrieve the version of the framework executing this program
                string version = string.Format(@"v{0}.{1}.{2}\",
                  Environment.Version.Major,
                  Environment.Version.Minor,
                  Environment.Version.Build);
    
                // Return the path of the framework
                return System.IO.Path.Combine(installRoot, version);
            }
    
            /// <summary>
            /// use ProjectCollection to build
            /// </summary>
            /// <param name="projectFile"></param>
            /// <see cref=" http://stackoverflow.com/questions/6511380/how-do-i-build-a-solution-programatically-in-c"/>
            static void buildByprojectCollection(string projectFile)
            {
                List<ILogger> loggers = new List<ILogger>();
                loggers.Add(new ConsoleLogger());
                var projectCollection = new ProjectCollection();
                projectCollection.RegisterLoggers(loggers);
                var project = projectCollection.LoadProject(projectFile); // Needs a reference to System.Xml
                try
                {
                    project.Build();
                }
                finally
                {
                    projectCollection.UnregisterAllLoggers();
                }
            }
    
            /// <summary>
            /// use [Microsoft.Build.Evaluation.Project] to build
            /// </summary>
            /// <param name="projectFile"></param>
            /// <see cref=" http://stackoverflow.com/questions/6511380/how-do-i-build-a-solution-programatically-in-c"/>
            static void buildByProject(string projectFile)
            {
                Microsoft.Build.Evaluation.Project project = new Microsoft.Build.Evaluation.Project(projectFile, null, "4.0");
                var ok = project.Build(new ConsoleLogger());
                Console.WriteLine(ok);
            }
    
            /// <summary>
            /// use BuildManager
            /// </summary>
            /// <param name="projectFile"></param>
            /// <see cref="http://stackoverflow.com/questions/6511380/how-do-i-build-a-solution-programatically-in-c"/>
            static void buildByManager(string projectFile)
            {
                var props = new Dictionary<string, string>();
                props["Configuration"] = "Release";
    //props["Platform"] = "Win32";
    //if c++
    //props["OutDir"] = @"S:\dddd\";
    //if c#
    props["OutputPath"] = @"S:\dddd\";

    var request = new BuildRequestData(projectFile, props, null, new string[] { "Build" }, null); var parms = new BuildParameters(); parms.Loggers = new List<ILogger> { new ConsoleLogger() }; var result = BuildManager.DefaultBuildManager.Build(parms, request); Console.WriteLine(result); } /// <summary> /// use BuildManager /// </summary> /// <param name="msbuildFileName"></param> /// <see cref="http://stackoverflow.com/questions/9942499/building-programatically-a-project"/> public static void BuildByManager2(string msbuildFileName) { ConsoleLogger logger = new ConsoleLogger(LoggerVerbosity.Normal); BuildManager manager = BuildManager.DefaultBuildManager; ProjectInstance projectInstance = new ProjectInstance(msbuildFileName); var result = manager.Build( new BuildParameters() { DetailedSummary = true, Loggers = new List<ILogger>() { logger } }, new BuildRequestData(projectInstance, new string[] { "Build" })); var buildResult = result.ResultsByTarget["Build"]; var buildResultItems = buildResult.Items; }
  • 相关阅读:
    10分钟教你Python+MySQL数据库操作
    10分钟教你用eclipse上传代码到GitHub
    分享几个有趣的程序代码(有些还是值得学习的哦)~
    10分钟教你生成超高逼格微信朋友圈
    1.maven中pom.xml文件中<exclusions>标签认不到问题
    2. springboot启动报错:Field userMapper in com.service.UserService required a bean of type 'com.dao.UserMapper' that could not be found.
    1. SpringBoot启动后,报异常:This application has no explicit mapping for /error, so you are seeing this as a fallback.
    9. 一个list拆分成多个list返回
    12. myeclipse遇到Initializing java tooling(1%)终极解决办法
    42. oracle通过两张表的一个字段对应,update其中一张表的某个字段
  • 原文地址:https://www.cnblogs.com/xiaokang088/p/2975631.html
Copyright © 2020-2023  润新知