c#通过代码编译项目,而不是通过Visual studio去右键生成的方式编译项目

描述

我们在编译c#项目时,往往需要通过Visual studio来编译,具体操作为:右击项目,生成,这个时候,vs会帮我们把项目进行编译到指定的文件夹(如bin/debug),有的时候我们需要批量生成很多项目并按照一定的顺序,而且可能没有vs环境,这时候我们就需要借助msbuild(vs编译项目就是通过它来完成的)来直接生成.

先来看个简单例子:

1.创建一个空白项目

在这里插入图片描述

2.在vs中打开powerShell,并cd到包含项目.csproj的文件夹下

在这里插入图片描述

3.执行msbuild ConsoleApp1.csproj -p:Configuration=DEBUG
msbuild ConsoleApp1.csproj -p:Configuration=DEBUG

解释一下这句代码,ConsoleApp1是你的项目名称,-p:Configuration=DEBUG是说你这次编译的配置,按照项目的debug配置来(包含了将项目生成到debug文件夹下的一堆东西),msbuild可以跟很多参数,具体某个参数代表什么,请参考官方文档
msbuild在执行时,内部是通过读取Console1.csproj,获取到项目的相关信息,包含依赖,项目资源,cs文件路径等等;并按照相关编译配置(一般是debug或release)调用csc.exe,将项目打包成中间文件(IL),一般是exe或dll
在这里插入图片描述
在debug文件夹下已经能看到我们生成的ConsoleApp1.exe
在这里插入图片描述
到这里,我们其实还在用vs来生成项目,我们如果把 msbuild ConsoleApp1.csproj -p:Configuration=DEBUG拷贝到cmd中,依然会报错,不认识msbuild
在这里插入图片描述
这是因为msbuild是vs自带的一个编译器,想要被系统识别,我们需要将msbuild.exe的文件路径添加到系统变量中

msbuild加入到系统变量

1.打开控制面板并选择"系统和安全"。
2.点击"系统",然后选择"高级系统设置"。
3.在弹出的窗口中,点击"环境变量"按钮。
4.在"系统变量"部分,找到名为"Path"的变量,并双击它。
5.在弹出的编辑环境变量窗口中,点击"新建"按钮。
6.输入MSBuild的安装路径(例如:D:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin),也就是vs安装路径。
7.确认所有窗口并重新启动计算机。
在这里插入图片描述
再来执行代码 发现就能正常编译了
在这里插入图片描述
当然,你可能需要将项目路径设置为绝对路径,因为你并没有cd到项目路径下
到这里并没有完,我们希望通过脚本或者c#代码中使用它,而不是自己打开cmd敲命令.

生成bat脚本

1.新建text.bat
在这里插入图片描述
2.在test.bat脚本中添加如下代码

start  msbuild D:\learn\wpf\ConsoleApp1\ConsoleApp1\ConsoleApp1.csproj -p:Configuration=DEBUG

3.双击test.bat 项目编译成功
如果有多个项目,运行多条start即可

在c#中执行代码完成编译

1.直接调用执行bat文件
// 设置要执行的命令和参数
            process.StartInfo.FileName = "cmd.exe";
            process.StartInfo.Arguments = "/test.bat";//绝对路径
            // 隐藏命令行窗口
            process.StartInfo.CreateNoWindow = true;
            process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            // 启动进程
            process.Start();
            process.WaitForExit();
            // 检查进程的退出代码
            if (process.ExitCode == 0)
            {
                Console.WriteLine("批处理文件执行成功!");
            }
            else
            {
                Console.WriteLine("批处理文件执行失败!");
            }
2.在代码中运行
// 设置要执行的命令和参数
            process.StartInfo.FileName = "cmd.exe";
            process.StartInfo.Arguments = " msbuild D:\learn\wpf\ConsoleApp1\ConsoleApp1\ConsoleApp1.csproj -p:Configuration=DEBUG";
            // 隐藏命令行窗口
            process.StartInfo.CreateNoWindow = true;
            process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            // 启动进程
            process.Start();
            process.WaitForExit();
            // 检查进程的退出代码
            if (process.ExitCode == 0)
            {
                Console.WriteLine("批处理文件执行成功!");
            }
            else
            {
                Console.WriteLine("批处理文件执行失败!");
            }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值