C#.NET Coreでパッケージを参照するためのユーザー定義の条件変数?

Aug 23 2020

私の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は、以下のソリューションとどのように異なりますか?より複雑に見えますか?

回答

1 Berkay Aug 23 2020 at 17:29

さて、これを試してみてください、

シンプルな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

1 SaherAhwal Aug 28 2020 at 06:26

誰かが興味を持った場合の私の最終的な解決策は次のとおりです。

  <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

含まれているライブラリに依存するコードを定義します。乾杯。