MSBuild で構成を選ぶ方法
◆ /p:Configuration=Release;Platform=AnyCPU
◆ Release だけ選んでも Release の設定が使われない
◆ プラットフォームの指定も必要
◆ Release だけ選んでも Release の設定が使われない
◆ プラットフォームの指定も必要
VisualStudio を起動しないで bat ファイルなどからビルドするときに MSBuild コマンドを使っています
これまでこういう感じに指定してました
「^」 はコマンドプロンプトでのエスケープで改行の前に書いて 1 行扱いさせるものです
/p でオプションを指定します
中では「Prefer32Bit=false」を指定しています
構成は Release 向けを設定していて 設定は
となっています
32bit 優先をオフにしているのに 「Prefer32Bit=false」 がないと
を使ってプロセスの bit 数表示すると 32 になりました
なぜか 32ビットを優先する の設定が有効になるのでビルド時に指定しています
最近になって
ってもしかして AnyCPU も指定しないとダメなんじゃない? と思いました
マッチしないならデフォルトのこっちが使われてそうです
こっちには Prefer32Bit の指定がないです
試しに入れてみました
「Prefer32Bit=false」をはずしてビルドしてみます
すると
Configuration=Release だけの指定では Release 構成が使われてなかったようです
これまで想定と違う設定でビルドされてたってことだけど大丈夫だったのかな……
Release の設定が使われてないことがわかったので Platform の AnyCPU も指定します
これで Prefer32Bit をビルド時に指定しなくても 64 bit で動くようになりました
これまでこういう感じに指定してました
"C:\Program Files (x86)\Microsoft Visual Studio\2017\WDExpress\MSBuild\15.0\Bin\MSBuild" ^
/t:Rebuild ^
/p:Configuration=Release;Prefer32Bit=false;OutputPath=C:\Data\output\testproj\ ^
C:\Users\user03\source\repos\WpfApp1\WpfApp1\WpfApp1.csproj
「^」 はコマンドプロンプトでのエスケープで改行の前に書いて 1 行扱いさせるものです
/p でオプションを指定します
中では「Prefer32Bit=false」を指定しています
構成は Release 向けを設定していて 設定は
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
となっています
32bit 優先をオフにしているのに 「Prefer32Bit=false」 がないと
this.textblock.Text = Environment.Is64BitProcess ? "64" : "32";
を使ってプロセスの bit 数表示すると 32 になりました
なぜか 32ビットを優先する の設定が有効になるのでビルド時に指定しています
最近になって
Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "
ってもしかして AnyCPU も指定しないとダメなんじゃない? と思いました
マッチしないならデフォルトのこっちが使われてそうです
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{9D25D14D-36D4-4DD7-A067-F1F974BBD8C6}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>WpfApp1</RootNamespace>
<AssemblyName>WpfApp1</AssemblyName>
<TargetFrameworkVersion>v4.7</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<WarningLevel>4</WarningLevel>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
</PropertyGroup>
こっちには Prefer32Bit の指定がないです
試しに入れてみました
(略)
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
「Prefer32Bit=false」をはずしてビルドしてみます
"C:\Program Files (x86)\Microsoft Visual Studio\2017\WDExpress\MSBuild\15.0\Bin\MSBuild" ^
/t:Rebuild ^
/p:Configuration=Release;OutputPath=C:\Data\output\testproj\ ^
C:\Users\user03\source\repos\WpfApp1\WpfApp1\WpfApp1.csproj
すると
64
Configuration=Release だけの指定では Release 構成が使われてなかったようです
これまで想定と違う設定でビルドされてたってことだけど大丈夫だったのかな……
Release の設定が使われてないことがわかったので Platform の AnyCPU も指定します
"C:\Program Files (x86)\Microsoft Visual Studio\2017\WDExpress\MSBuild\15.0\Bin\MSBuild" ^
/t:Rebuild ^
/p:Configuration=Release;Platform=AnyCPU;OutputPath=C:\Data\output\testproj\ ^
C:\Users\user03\source\repos\WpfApp1\WpfApp1\WpfApp1.csproj
これで Prefer32Bit をビルド時に指定しなくても 64 bit で動くようになりました