MSBuild命令是微软提供的编译CSharp项目的一种方式。如果有这样的需求,将一个单Project的Solution编程生成DLL文件,然后将DLL文件作为依赖添加到Unity工程中,相比于每次都打开CSharp工程编译,通过代码进行这个操作较为方便。
1. MSBuild命令位置
在安装Unity Editor时,如果同时选择安装了Visual Studio,那么MSBuild也会一同安装,如果没有勾选,则需要手动安装。对于MacOS系统,位置如下,
1 | /Library/Frameworks/Mono.framework/Versions/Current/Commands/msbuild |
而对于Windows,在Visual Studio 2022中,它安装在Visual Studio安装文件夹下,对于Windows 10上的经典安装,MSBuild.exe位于MSBuild下的CurrentBin中的安装文件夹下,
1 | C:\Program Files (x86)\Microsoft Visual\2019\Community\MSBuild\Current\Bin\MSBuild.exe |
2. 编译
使用较为简单,可以使用MSBuild编译整个Solution,也可以只编译其中一个Project,我的Solution里只有一个Project,所以直接编译的是Solution。
1 | msbuild solutionRootPath -p:Configuration=Release |
如果是编译Project,替换一下path即可,
1 | msbuild projectRootPath -p:Configuration=Release |
每个配置里都指定了一些属性的值,比如DLL的输出位置,如下,Debug的在bin下的Debug目录下,而Release的在bin的Release下。
1 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> |
3. csproj文件
在Project根目录下,有个csproj结尾里面是xml格式的文件,这个是Project的配置文件,使用IDE创建项目时会自动生成,相关的属性都会在这个文件中。默认会生成2个配置,Debug和Release,缺省值是Debug。
上面的命令中,表示指定使用Release配置编译Project。
4. 关于csproj文件中引用的cs文件
csproj中有一个ItemGroup标签,里面显示指定里被包含在项目的中参与编译的cs文件。也就是说,即便是在Project下新建了cs文件,但是不包含在ItemGroup标签中,那么编译时是找不到的。
因为依赖引用路径多系统有所区别,所以这个csproj文件并没有被git追踪。因此,多人合作时,就会遇到一个问题,别人新建的cs文件,自己还需要手动添加进去,为了减少这些重复的操作,较为合理的方式是通过代码做这件事,省时且快速。
一键更新ItemGroup标签内容,将新增的cs文件添加至其中,将已经删除的cs文件从里面删除。思路相对清晰,解析csproj文件,找到其中的引用ItemGroup标签,清空其下的所有cs文件,然后遍历Project中的所有文件,将cs文件依次添加至ItemGroup标签下。
结果大致如下,只罗列了几个文件。这里要注意第一个文件AssembleInfo.cs,这个是DLL的元数据,也需要添加至其中。
1 | <ItemGroup> |