C# .NET Core 中包引用的用户定义条件变量?

User-defined condition variable for package referencing in 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 appclass library,并使用了 powershell 中的 dotnet build

这是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 处执行此命令。我需要看到 SUCCESS! 如果条件是 PROD 否则 post 构建事件消息将不会出现。

这是命令;

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

定义依赖于包含的库的代码。干杯。