.NET Core - shinsuzuki/learn GitHub Wiki
- dotnet publish プロファイルは pubxml ファイルを無視します
- dotnet publishコマンドで発行プロファイル(.pubxml)を指定してフォルダ配置を行う方法
- .NET ClickOnce アプリケーションをコマンド ラインからビルドする
IIS環境でASPNETCORE_ENVIRONMENT変数を設定するには、主に2つの方法があります。
- web.configファイルに直接記述する これが最も一般的で推奨される方法です。ASP.NET CoreアプリケーションをIISにデプロイすると、自動的に生成される(または手動で作成する)web.configファイルに、環境変数を設定できます。
要素内にというセクションを追加し、その中に要素を記述します。
XML
<configuration>
<system.webServer>
<aspNetCore processPath="dotnet" arguments=".\YourApp.dll" stdoutLogEnabled="false">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" />
</environmentVariables>
</aspNetCore>
</system.webServer>
</configuration>メリット: アプリケーションごとに異なる環境変数を設定でき、デプロイ時にファイルを含めるだけでよいため、管理が非常に簡単です。
csprojファイルでMS Buildの変数(プロパティ)が定義されていない場合、その変数は**空の文字列("")**として扱われます。
具体的な挙動 変数が定義されていない場合、ビルドはエラーにならず、参照された箇所は空になります。
- Messageタスクでの出力 以下の例では、UndefinedVariableという変数はどこにも定義されていません。
XML
<Project Sdk="Microsoft.NET.Sdk">
<Target Name="ShowUndefinedVariable">
<Message Text="未定義の変数: '$(UndefinedVariable)'" />
</Target>
</Project>このターゲットを実行すると、出力は以下のようになります。
未定義の変数: '' $(UndefinedVariable)が空の文字列に置き換わっていることがわかります。
- Condition属性での使用 Condition属性で未定義の変数を参照した場合、空の文字列として評価されるため、条件式がtrueになることはありません。
XML
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<MyDefinedVariable>SomeValue</MyDefinedVariable>
</PropertyGroup>
<PropertyGroup Condition="'$(UndefinedVariable)' == 'SomeValue'">
<ThisPropertyWillBeIgnored>true</ThisPropertyWillBeIgnored>
</PropertyGroup>
<PropertyGroup Condition="'$(MyDefinedVariable)' == 'SomeValue'">
<ThisPropertyWillBeValid>true</ThisPropertyWillBeValid>
</PropertyGroup>
</Project>UndefinedVariableは空文字列なので、'""' == 'SomeValue'という式が評価され、結果はfalseになります。
- パスの結合での使用 パスを構築する際に未定義の変数を使うと、意図しない結果になることがあります。
XML
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputPath>bin\</OutputPath>
<FinalPath>$(OutputPath)$(BuildType)\</FinalPath>
</PropertyGroup>
<Target Name="ShowFinalPath">
<Message Text="最終パス: $(FinalPath)" />
</Target>
</Project>このターゲットを実行すると、$(BuildType)が空文字列に置き換わるため、出力はbin\となり、意図したbin\Debug\やbin\Release\にはなりません。
まとめ MSBuildで変数が存在しない場合、それは空の文字列として扱われます。これは、ビルドスクリプトの柔軟性を高めるための設計ですが、意図しない結果を招く可能性もあるため、変数を参照する際には**存在チェック(Exists関数など)**や、初期値の設定を検討することが重要です。