Visual Studioをインストールしたり、個別にBuild Tools for Visual StudioをインストールするとMSBuildがインストールされます. リファレンスでは以下のように説明されています.
Microsoft Build Engine は、アプリケーションをビルドするためのプラットフォームです。 MSBuild とも呼ばれるこのエンジンには、ビルド プラットフォームでソフトウェアを処理およびビルドする方法を制御する、プロジェクト ファイル用の XML スキーマが用意されています。 Visual Studio は MSBuild を使用しますが、MSBuild は Visual Studio に依存しません。 プロジェクト ファイルまたはソリューション ファイルに対して msbuild.exe または dotnet build を実行すると、Visual Studio がインストールされていない環境で、製品の統合とビルドを実行できます。
つまり、Windows用のアプリケーションのビルドにはVisual Studioは必須ではありません. コマンドラインからMSBuildでを利用することでもプロジェクトをビルドすることが出来ます.
分かりやすく例えるとMSBuildはmakeコマンドのようなものです. Visual Studioによって生成されるソリューションファイルやプロジェクトファイルがmakefileの代わりになります.
以下、次の環境で検証しました.
項目 | 説明 |
---|---|
OS | Windows11 |
Visual Studio | 2017 |
VC++プロジェクトをコマンドラインからMSBuild
Visual Studioで新規のVC++プロジェクトを作成します. プロジェクトはなんでもよいのですがなんとなくMFCアプリケーションを以下の通りに作成しました.
項目 | 説明 |
---|---|
ソリューション名 | MFCApplication |
プロジェクト名 | Application |
プロジェクトの種類 | VC++ MFCアプリケーション |
VC++プロジェクトを作成後、カレントディレクトリをMSBuildにしソリューションファイルをオプションに指定してMSBuild.exeを実行しましょう. どうやら、Visual Studio 上でビルドしたときのような挙動になります.
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin>msbuild C:\Users\xxx\source\repos\MFCApplication\MFCApplication.sln .NET Framework 向け Microsoft (R) Build Engine バージョン 15.9.21+g9802d43bc3 Copyright (C) Microsoft Corporation.All rights reserved. このソリューション内のプロジェクトを 1 度に 1 つずつビルドします。並行ビルドを有効にするには、"/m" スイッチを追加してく ださい。 2023/05/08 23:05:53 にビルドを開始しました。 ノード 1 上のプロジェクト "C:\Users\xxx\source\repos\MFCApplication\MFCApplication.sln" (既定のターゲット)。 ValidateSolutionConfiguration: ソリューション構成 "Debug|x64" をビルドしています。 プロジェクト "C:\Users\xxx\source\repos\MFCApplication\MFCApplication.sln" (1) は、ノード 1 上に "C:\Users\xxx\source\repos\MFCA pplication\Application\Application.vcxproj" (2) をビルドしています (既定のターゲット)。 PrepareForBuild: ディレクトリ "x64\Debug\" を作成しています。 ディレクトリ "C:\Users\xxx\source\repos\MFCApplication\x64\Debug\" を作成しています。 ディレクトリ "x64\Debug\Application.tlog\" を作成しています。 InitializeBuildStatus: "AlwaysCreate" が指定されたため "x64\Debug\Application.tlog\unsuccessfulbuild" を作成しています。 ClCompile: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\HostX86\x64\CL.exe /c /ZI /JMC /nologo /W3 /WX- /diagnostics:classic /sdl /Od /D _WINDOWS /D _DEBUG /D _UNICODE /D UNICODE /D _AFXDLL /Gm- /EH sc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Yc"pch.h" /Fp"x64\Debug\Application.pch" /Fo"x64\D ebug\\" /Fd"x64\Debug\vc141.pdb" /Gd /TP /FC /errorReport:queue pch.cpp pch.cpp C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\HostX86\x64\CL.exe /c /ZI /JMC /nologo /W3 /WX- /diagnostics:classic /sdl /Od /D _WINDOWS /D _DEBUG /D _UNICODE /D UNICODE /D _AFXDLL /Gm- /EH sc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Yu"pch.h" /Fp"x64\Debug\Application.pch" /Fo"x64\D ebug\\" /Fd"x64\Debug\vc141.pdb" /Gd /TP /FC /errorReport:queue Application.cpp ApplicationDoc.cpp ApplicationView.cp p ChildFrm.cpp ClassView.cpp FileView.cpp MainFrm.cpp OutputWnd.cpp PropertiesWnd.cpp ViewTree.cpp Application.cpp ApplicationDoc.cpp ApplicationView.cpp ChildFrm.cpp ClassView.cpp FileView.cpp MainFrm.cpp OutputWnd.cpp PropertiesWnd.cpp ViewTree.cpp コードを生成中... ResourceCompile: C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x86\rc.exe /D _DEBUG /D _UNICODE /D UNICODE /D _AFXDLL /l"0x0 411" /Ix64\Debug\ /nologo /fo"x64\Debug\Application.res" Application.rc Link: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\HostX86\x64\link.exe /ERR ORREPORT:QUEUE /OUT:"C:\Users\xxx\source\repos\MFCApplication\x64\Debug\Application.exe" /INCREMENTAL /NOLOGO /MANI FEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /manifestinput:"C:\Program Files (x86)\Microso ft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\Include\Manifest\dpiaware.manifest" /DEBUG:FASTLINK /PDB:"C :\Users\xxx\source\repos\MFCApplication\x64\Debug\Application.pdb" /SUBSYSTEM:WINDOWS /TLBID:1 /ENTRY:"wWinMainCRTS tartup" /DYNAMICBASE /NXCOMPAT /IMPLIB:"C:\Users\xxx\source\repos\MFCApplication\x64\Debug\Application.lib" /MACHIN E:X64 x64\Debug\Application.res x64\Debug\Application.obj x64\Debug\ApplicationDoc.obj x64\Debug\ApplicationView.obj x64\Debug\ChildFrm.obj x64\Debug\ClassView.obj x64\Debug\FileView.obj x64\Debug\MainFrm.obj x64\Debug\OutputWnd.obj x64\Debug\pch.obj x64\Debug\PropertiesWnd.obj x64\Debug\ViewTree.obj Application.vcxproj -> C:\Users\xxx\source\repos\MFCApplication\x64\Debug\Application.exe FinalizeBuildStatus: ファイル "x64\Debug\Application.tlog\unsuccessfulbuild" を削除しています。 "x64\Debug\Application.tlog\Application.lastbuildstate" のタッチ タスクを実行しています。 プロジェクト "C:\Users\xxx\source\repos\MFCApplication\Application\Application.vcxproj" (既定のターゲット) のビルドが 完了しました。 プロジェクト "C:\Users\xxx\source\repos\MFCApplication\MFCApplication.sln" (既定のターゲット) のビルドが完了しました。 ビルドに成功しました。 0 個の警告 0 エラー 経過時間 00:00:02.67
ソリューションではなくプロジェクト単位でビルドしたい場合はプロジェクトファイルを指定します.
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin>msbuild C:\Users\xxx\source\repos\MFCApplication\Application\Application.vcxproj .NET Framework 向け Microsoft (R) Build Engine バージョン 15.9.21+g9802d43bc3 Copyright (C) Microsoft Corporation.All rights reserved. 2023/05/08 23:14:09 にビルドを開始しました。 ノード 1 上のプロジェクト "C:\Users\xxx\source\repos\MFCApplication\Application\Application.vcxproj" (既定のターゲット)。 PrepareForBuild: ディレクトリ "Debug\" を作成しています。 ディレクトリ "Debug\Application.tlog\" を作成しています。 InitializeBuildStatus: "AlwaysCreate" が指定されたため "Debug\Application.tlog\unsuccessfulbuild" を作成しています。 ClCompile: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\HostX86\x86\CL.exe /c /ZI /JMC /nologo /W3 /WX- /diagnostics:classic /sdl /Od /Oy- /D WIN32 /D _WINDOWS /D _DEBUG /D _UNICODE /D UNICODE /D _AFXDLL /Gm- /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Yc"pch.h" /Fp"Debug\Application.pch" /Fo"Debug\\" /Fd"Debug\vc141.pdb" /Gd /TP /analyze- /FC /errorReport:queue pch.cpp pch.cpp C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\HostX86\x86\CL.exe /c /ZI /JMC /nologo /W3 /WX- /diagnostics:classic /sdl /Od /Oy- /D WIN32 /D _WINDOWS /D _DEBUG /D _UNICODE /D UNICODE /D _A FXDLL /Gm- /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Yu"pch.h" /Fp"Debug\Application.pch" /Fo"Debug\\" /Fd"Debug\vc141.pdb" /Gd /TP /analyze- /FC /errorReport:queue Application.cpp ApplicationDoc.cpp Applic ationView.cpp ChildFrm.cpp ClassView.cpp FileView.cpp MainFrm.cpp OutputWnd.cpp PropertiesWnd.cpp ViewTree.cpp Application.cpp ApplicationDoc.cpp ApplicationView.cpp ChildFrm.cpp ClassView.cpp FileView.cpp MainFrm.cpp OutputWnd.cpp PropertiesWnd.cpp ViewTree.cpp コードを生成中... ResourceCompile: C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x86\rc.exe /D _DEBUG /D _UNICODE /D UNICODE /D _AFXDLL /l"0x0 411" /IDebug\ /nologo /fo"Debug\Application.res" Application.rc Link: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\HostX86\x86\link.exe /ERR ORREPORT:QUEUE /OUT:"C:\Users\xxx\source\repos\MFCApplication\Application\Debug\Application.exe" /INCREMENTAL /NOLO GO /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /manifestinput:"C:\Program Files (x86) \Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\Include\Manifest\dpiaware.manifest" /DEBUG:FASTLINK /PDB:"C:\Users\xxx\source\repos\MFCApplication\Application\Debug\Application.pdb" /SUBSYSTEM:WINDOWS /TLBID:1 /ENT RY:"wWinMainCRTStartup" /DYNAMICBASE /NXCOMPAT /IMPLIB:"C:\Users\xxx\source\repos\MFCApplication\Application\Debug\ Application.lib" /MACHINE:X86 Debug\Application.res Debug\Application.obj Debug\ApplicationDoc.obj Debug\ApplicationView.obj Debug\ChildFrm.obj Debug\ClassView.obj Debug\FileView.obj Debug\MainFrm.obj Debug\OutputWnd.obj Debug\pch.obj Debug\PropertiesWnd.obj Debug\ViewTree.obj Application.vcxproj -> C:\Users\xxx\source\repos\MFCApplication\Application\Debug\Application.exe FinalizeBuildStatus: ファイル "Debug\Application.tlog\unsuccessfulbuild" を削除しています。 "Debug\Application.tlog\Application.lastbuildstate" のタッチ タスクを実行しています。 プロジェクト "C:\Users\xxx\source\repos\MFCApplication\Application\Application.vcxproj" (既定のターゲット) のビルドが 完了しました。 ビルドに成功しました。 0 個の警告 0 エラー 経過時間 00:00:02.48
.NET FrameworkプロジェクトをコマンドラインからMSBuild
Visual Studioで新規のC#プロジェクトを作成します. プロジェクトはなんでもよいのですがなんとなくWindowsフォームアプリケーションを以下の通りに作成しました.
項目 | 説明 |
---|---|
ソリューション名 | WindowsForms |
プロジェクト名 | WindowsFormsApp |
プロジェクトの種類 | Windows フォームアプリケーション(.NET Framework) |
.NET Framework | 4.6.1 |
先ほどと同様にソリューションをMSBuildすると以下のようになりました
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin>MSBuild C:\Users\xxx\source\repos\WindowsFormsApp\WindowsFormsApp.sln .NET Framework 向け Microsoft (R) Build Engine バージョン 15.9.21+g9802d43bc3 Copyright (C) Microsoft Corporation.All rights reserved. このソリューション内のプロジェクトを 1 度に 1 つずつビルドします。並行ビルドを有効にするには、"/m" スイッチを追加してく ださい。 2023/05/16 23:27:52 にビルドを開始しました。 ノード 1 上のプロジェクト "C:\Users\xxx\source\repos\WindowsFormsApp\WindowsFormsApp.sln" (既定のターゲット)。 ValidateSolutionConfiguration: ソリューション構成 "Debug|Any CPU" をビルドしています。 プロジェクト "C:\Users\xxx\source\repos\WindowsFormsApp\WindowsFormsApp.sln" (1) は、ノード 1 上に "C:\Users\xxx\source\repos\Wi ndowsFormsApp\WindowsFormsApp\WindowsFormsApp.csproj" (2) をビルドしています (既定のターゲット)。 GenerateBindingRedirects: ResolveAssemblyReferences から推奨されるバインド リダイレクトがありません。 CoreResGen: "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\resgen.exe" /useSourcePath /r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Microsoft.CSharp.dll" /r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\mscorlib.dll" /r:"C:\Program Files (x86)\Referen ce Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Core.dll" /r:"C:\Program Files (x86)\Reference Assembli es\Microsoft\Framework\.NETFramework\v4.6.1\System.Data.DataSetExtensions.dll" /r:"C:\Program Files (x86)\Reference A ssemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Data.dll" /r:"C:\Program Files (x86)\Reference Assemblies\M icrosoft\Framework\.NETFramework\v4.6.1\System.Deployment.dll" /r:"C:\Program Files (x86)\Reference Assemblies\Micros oft\Framework\.NETFramework\v4.6.1\System.dll" /r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.N ETFramework\v4.6.1\System.Drawing.dll" /r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramew ork\v4.6.1\System.Net.Http.dll" /r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4. 6.1\System.Windows.Forms.dll" /r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6. 1\System.Xml.dll" /r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Xml .Linq.dll" /compile Properties\Resources.resx,obj\Debug\WindowsFormsApp.Properties.Resources.resources リソース ファイル "Properties\Resources.resx" を "obj\Debug\WindowsFormsApp.Properties.Resources.resources" に処理しています。 GenerateTargetFrameworkMonikerAttribute: すべての出力ファイルが入力ファイルに対して最新なので、ターゲット "GenerateTargetFrameworkMonikerAttribute" を省略します 。 CoreCompile: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Roslyn\csc.exe /noconfig /nowarn:1701, 1702 /nostdlib+ /platform:anycpu32bitpreferred /errorreport:prompt /warn:4 /define:DEBUG;TRACE /highentropyva+ /refer ence:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Microsoft.CSharp.dll" /ref erence:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\mscorlib.dll" /reference :"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Core.dll" /reference:"C :\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Data.DataSetExtensions.dll " /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Data.dll" / reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Deployment.dll " /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.dll" /refer ence:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Drawing.dll" /refer ence:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Net.Http.dll" /refe rence:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Windows.Forms.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Xml.dll" /re ference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Xml.Linq.dll" /d ebug+ /debug:full /filealign:512 /optimize- /out:obj\Debug\WindowsFormsApp.exe /ruleset:"C:\Program Files (x86)\Micro soft Visual Studio\2017\Community\Team Tools\Static Analysis Tools\\Rule Sets\MinimumRecommendedRules.ruleset" /subsy stemversion:6.00 /resource:obj\Debug\WindowsFormsApp.Properties.Resources.resources /target:winexe /utf8output /deter ministic+ Form1.cs Form1.Designer.cs Program.cs Properties\AssemblyInfo.cs Properties\Resources.Designer.cs Propertie s\Settings.Designer.cs "C:\Users\xxx\AppData\Local\Temp\.NETFramework,Version=v4.6.1.AssemblyAttributes.cs" 次のディレクトリからのコンパイラでの共有コンパイルを使用しています: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Ros lyn _CopyAppConfigFile: "App.config" から "bin\Debug\WindowsFormsApp.exe.config" へファイルをコピーしています。 CopyFilesToOutputDirectory: "obj\Debug\WindowsFormsApp.exe" から "bin\Debug\WindowsFormsApp.exe" へファイルをコピーしています。 WindowsFormsApp -> C:\Users\xxx\source\repos\WindowsFormsApp\WindowsFormsApp\bin\Debug\WindowsFormsApp.exe "obj\Debug\WindowsFormsApp.pdb" から "bin\Debug\WindowsFormsApp.pdb" へファイルをコピーしています。 プロジェクト "C:\Users\xxx\source\repos\WindowsFormsApp\WindowsFormsApp\WindowsFormsApp.csproj" (既定のターゲット) の ビルドが完了しました。 プロジェクト "C:\Users\xxx\source\repos\WindowsFormsApp\WindowsFormsApp.sln" (既定のターゲット) のビルドが完了しました。 ビルドに成功しました。 0 個の警告 0 エラー 経過時間 00:00:00.53
プロジェクトをMSBuilsした場合は次のようになります
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin>MSBuild C:\Users\xxx\source\repos\WindowsFormsApp\WindowsFormsApp\WindowsFormsApp.csproj .NET Framework 向け Microsoft (R) Build Engine バージョン 15.9.21+g9802d43bc3 Copyright (C) Microsoft Corporation.All rights reserved. 2023/05/16 23:29:39 にビルドを開始しました。 ノード 1 上のプロジェクト "C:\Users\xxx\source\repos\WindowsFormsApp\WindowsFormsApp\WindowsFormsApp.csproj" (既定のターゲット)。 GenerateBindingRedirects: ResolveAssemblyReferences から推奨されるバインド リダイレクトがありません。 CoreResGen: "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\resgen.exe" /useSourcePath /r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Microsoft.CSharp.dll" /r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\mscorlib.dll" /r:"C:\Program Files (x86)\Referen ce Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Core.dll" /r:"C:\Program Files (x86)\Reference Assembli es\Microsoft\Framework\.NETFramework\v4.6.1\System.Data.DataSetExtensions.dll" /r:"C:\Program Files (x86)\Reference A ssemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Data.dll" /r:"C:\Program Files (x86)\Reference Assemblies\M icrosoft\Framework\.NETFramework\v4.6.1\System.Deployment.dll" /r:"C:\Program Files (x86)\Reference Assemblies\Micros oft\Framework\.NETFramework\v4.6.1\System.dll" /r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.N ETFramework\v4.6.1\System.Drawing.dll" /r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramew ork\v4.6.1\System.Net.Http.dll" /r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4. 6.1\System.Windows.Forms.dll" /r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6. 1\System.Xml.dll" /r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Xml .Linq.dll" /compile Properties\Resources.resx,obj\Debug\WindowsFormsApp.Properties.Resources.resources リソース ファイル "Properties\Resources.resx" を "obj\Debug\WindowsFormsApp.Properties.Resources.resources" に処理しています。 GenerateTargetFrameworkMonikerAttribute: すべての出力ファイルが入力ファイルに対して最新なので、ターゲット "GenerateTargetFrameworkMonikerAttribute" を省略します 。 CoreCompile: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Roslyn\csc.exe /noconfig /nowarn:1701, 1702 /nostdlib+ /platform:anycpu32bitpreferred /errorreport:prompt /warn:4 /define:DEBUG;TRACE /highentropyva+ /refer ence:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Microsoft.CSharp.dll" /ref erence:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\mscorlib.dll" /reference :"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Core.dll" /reference:"C :\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Data.DataSetExtensions.dll " /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Data.dll" / reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Deployment.dll " /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.dll" /refer ence:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Drawing.dll" /refer ence:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Net.Http.dll" /refe rence:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Windows.Forms.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Xml.dll" /re ference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Xml.Linq.dll" /d ebug+ /debug:full /filealign:512 /optimize- /out:obj\Debug\WindowsFormsApp.exe /ruleset:"C:\Program Files (x86)\Micro soft Visual Studio\2017\Community\Team Tools\Static Analysis Tools\\Rule Sets\MinimumRecommendedRules.ruleset" /subsy stemversion:6.00 /resource:obj\Debug\WindowsFormsApp.Properties.Resources.resources /target:winexe /utf8output /deter ministic+ Form1.cs Form1.Designer.cs Program.cs Properties\AssemblyInfo.cs Properties\Resources.Designer.cs Propertie s\Settings.Designer.cs "C:\Users\xxx\AppData\Local\Temp\.NETFramework,Version=v4.6.1.AssemblyAttributes.cs" 次のディレクトリからのコンパイラでの共有コンパイルを使用しています: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Ros lyn _CopyAppConfigFile: "App.config" から "bin\Debug\WindowsFormsApp.exe.config" へファイルをコピーしています。 CopyFilesToOutputDirectory: "obj\Debug\WindowsFormsApp.exe" から "bin\Debug\WindowsFormsApp.exe" へファイルをコピーしています。 WindowsFormsApp -> C:\Users\xxx\source\repos\WindowsFormsApp\WindowsFormsApp\bin\Debug\WindowsFormsApp.exe "obj\Debug\WindowsFormsApp.pdb" から "bin\Debug\WindowsFormsApp.pdb" へファイルをコピーしています。 プロジェクト "C:\Users\xxx\source\repos\WindowsFormsApp\WindowsFormsApp\WindowsFormsApp.csproj" (既定のターゲット) の ビルドが完了しました。 ビルドに成功しました。 0 個の警告 0 エラー 経過時間 00:00:00.16
MSBuildとdotnet buildの互換性
VC++のプロジェクト、.NET Frameworkのプロジェクトをdotnet buildするとエラーが出ます. 一方、.NET CoreプロジェクトをMSBuildしてもビルドが通りました. dotnet buildではコンパイルオプションの詳細が出力されませんでしたが、MSBuildの場合は詳細が表示されました. その詳細を見るに、.NET Coreプロジェクトをコンパイルするときもcsc.exeを使い、defineなどで.NET Framework用のビルドと.NET Core用のビルドを切り分けているようでした.
対象プロジェクト | MSBuild | dotnet build |
---|---|---|
VC++ | 〇 | × |
.NET Framework | 〇 | × |
.NET Core | 〇 | 〇 |
すなわち、MSBuildはソリューションファイルやプロジェクトファイルから自動的にコンパイラやコンパイルオプションを切り替え、適切なビルドを行ってくれるすごいツールだということが分かりました.
余談
C++プロジェクトで「共有DLLでMFCを利用する」を選んでビルドすると、コンパイルオプションに /D _AFXDLLが追加される. どうやらMFCアプリケーションのビルドに必要な追加のインクルードディレクトリ、追加のライブラリディレクトリ、追加の依存ファイルがこのマクロ定数一つで賄える模様. 逆にいうとコマンドラインを見ただけでは本当は何をやってるのかよくわからない.