C#.NET Coreでパッケージを参照するためのユーザー定義の条件変数?
私のcsprojには、次のようなプロジェクト参照があります。
<ItemGroup>
<ProjectReference Include="..\..\test\PressurePointLib\PressurePointLib.csproj" />
</ItemGroup>
これは、テスト環境に含まれることのみを目的としたライブラリ(DLL)であり、本番環境の現在のプロジェクトにリンクさせたくありません。
この参照を条件変数に基づいて条件付きで含める必要があります。
ここで説明するように条件参照を使用できることは理解していますが、独自の変数(PressurePointsEnabledなど)を定義できるかどうか疑問に思っていました。定義できる場合は、コマンドラインとVisual Studioでそのビルド変数を設定するにはどうすればよいですか?
更新私は以下を試しましたが、うまくいったようです。
<ItemGroup Label="MyProject" Condition="'$(PressurePointsEnabled)'=='true'">
<ProjectReference Include="..\..\test\PressurePointLib\BlackLine.Test.PressurePointLib.csproj" />
</ItemGroup>
そして私が構築するとき
dotnet build -p:PressurePointsEnabled=true
@Berkayは、以下のソリューションとどのように異なりますか?より複雑に見えますか?
回答
さて、これを試してみてください、
シンプルなconsole app
とを作成し、からclass library
使用dotnet
build
しましたpowershell
。
これがcsprojファイルです。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
</ItemGroup>
<ItemGroup Condition=" $(PressurePointsEnabled.Contains('PROD')) "> <ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj" /> </ItemGroup> <Target Name="Test" AfterTargets="Build"> <Message Text="Project $(ProjectName) Test PostBuild" Importance="high" />
<Message Text="SUCCESS!" Condition=" $(PressurePointsEnabled.Contains('PROD')) " Importance="high" />
</Target>
</Project>
そして、あなたが言ったように、私は使用しましたPressurePointsEnabled
。その後、このコマンドをで実行しpowershell
ます。私は成功を見る必要があります!条件がPRODの場合、ビルド後のイベントメッセージは表示されません。
これがコマンドです。
dotnet build -p:PressurePointsEnabled="UAT" C:\Users\Berkay\source\repos\ConsoleApp4
出力:

また、UATをPRODに変更すると、出力は次のようになります。
dotnet build -p:PressurePointsEnabled="UAT" C:\Users\Berkay\source\repos\ConsoleApp4

あ、はい。独自の定数を定義してその値を設定し、からチェックすることができますcsproj
。
誰かが興味を持った場合の私の最終的な解決策は次のとおりです。
<PropertyGroup Condition="'$(PressurePointsEnabled)'=='true'"> <DefineConstants>PP_ENABLED</DefineConstants> </PropertyGroup> <ItemGroup Label="PPLib" Condition="$(DefineConstants.Contains('PP_ENABLED'))">
<ProjectReference Include="..\..\test\PressurePointLib\MyService.Test.PressurePointLib.csproj" />
</ItemGroup>
あなたはで構築することができます
dotnet build -p:PressurePointsEnabled=true
それが真の場合、PP_ENABLEDが定義されます。
あなたが使用できるコードで
#if PP_ENABLED
含まれているライブラリに依存するコードを定義します。乾杯。