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 app
和 class 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
定义依赖于包含的库的代码。干杯。
我的 csproj 中有如下项目参考:
<ItemGroup>
<ProjectReference Include="..\..\test\PressurePointLib\PressurePointLib.csproj" />
</ItemGroup>
它是一个库 (DLL),仅用于测试环境,我不希望它链接到当前生产项目。
我希望根据条件变量有条件地包含此引用。
我知道我可以使用描述的条件引用
更新 我尝试了以下方法,它看起来很有效。
<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
,并使用了 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
定义依赖于包含的库的代码。干杯。