Skip to content

Commit

Permalink
Attempt to work around some multi-targeting issues
Browse files Browse the repository at this point in the history
  • Loading branch information
lethek committed Nov 29, 2024
1 parent acfe514 commit d63fd73
Show file tree
Hide file tree
Showing 18 changed files with 170 additions and 32 deletions.
7 changes: 7 additions & 0 deletions FluentCertificates.sln
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FluentCertificates.Extensio
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "_build", "build\_build.csproj", "{88F4BB4F-40C3-42C8-ABFB-E1EE40B8ED68}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FluentCertificates.Common", "src\FluentCertificates.Common\FluentCertificates.Common.csproj", "{8228C6F1-3FFB-4B95-9A44-139DAD372BC1}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -67,6 +69,10 @@ Global
{0754E808-B1C4-475B-85A7-D5F210089255}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0754E808-B1C4-475B-85A7-D5F210089255}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0754E808-B1C4-475B-85A7-D5F210089255}.Release|Any CPU.Build.0 = Release|Any CPU
{8228C6F1-3FFB-4B95-9A44-139DAD372BC1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8228C6F1-3FFB-4B95-9A44-139DAD372BC1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8228C6F1-3FFB-4B95-9A44-139DAD372BC1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8228C6F1-3FFB-4B95-9A44-139DAD372BC1}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand All @@ -79,6 +85,7 @@ Global
{6E6427A2-6D42-45D4-8CDB-60908D457BE0} = {270F9122-6ED3-43BE-87AE-7291A9EBD123}
{7CF52B3E-5848-4F08-94C5-B3A788B218EC} = {270F9122-6ED3-43BE-87AE-7291A9EBD123}
{0754E808-B1C4-475B-85A7-D5F210089255} = {D1107791-8E04-42B0-977E-E2221B0067AC}
{8228C6F1-3FFB-4B95-9A44-139DAD372BC1} = {270F9122-6ED3-43BE-87AE-7291A9EBD123}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {EB271790-2AD9-4280-A9CA-870E755008F8}
Expand Down
8 changes: 6 additions & 2 deletions build/_build.csproj.DotSettings
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=HeapView_002EDelegateAllocation/@EntryIndexedValue">DO_NOT_SHOW</s:String>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=VariableHidesOuterVariable/@EntryIndexedValue">DO_NOT_SHOW</s:String>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=ClassNeverInstantiated_002EGlobal/@EntryIndexedValue">DO_NOT_SHOW</s:String>
Expand All @@ -17,11 +17,15 @@
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_SIMPLE_ANONYMOUSMETHOD_ON_SINGLE_LINE/@EntryValue">False</s:Boolean>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateInstanceFields/@EntryIndexedValue">&lt;Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /&gt;</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateStaticFields/@EntryIndexedValue">&lt;Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /&gt;</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/UserRules/=4a98fdf6_002D7d98_002D4f5a_002Dafeb_002Dea44ad98c70c/@EntryIndexedValue">&lt;Policy&gt;&lt;Descriptor Staticness="Instance" AccessRightKinds="Private" Description="Instance fields (private)"&gt;&lt;ElementKinds&gt;&lt;Kind Name="FIELD" /&gt;&lt;Kind Name="READONLY_FIELD" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /&gt;&lt;/Policy&gt;</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/UserRules/=f9fce829_002De6f4_002D4cb2_002D80f1_002D5497c44f51df/@EntryIndexedValue">&lt;Policy&gt;&lt;Descriptor Staticness="Static" AccessRightKinds="Private" Description="Static fields (private)"&gt;&lt;ElementKinds&gt;&lt;Kind Name="FIELD" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /&gt;&lt;/Policy&gt;</s:String>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpAttributeForSingleLineMethodUpgrade/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpKeepExistingMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpPlaceEmbeddedOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpRenamePlacementToArrangementMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpUseContinuousIndentInsideBracesMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EAddAccessorOwnerDeclarationBracesMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002ECSharpPlaceAttributeOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateBlankLinesAroundFieldToBlankLinesAroundProperty/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateThisQualifierSettings/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateThisQualifierSettings/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EPredefinedNamingRulesToUserRulesUpgrade/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
2 changes: 1 addition & 1 deletion src/FluentCertificates.Builder/CertificateBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,7 @@ public X509Certificate2 Create()
if (builder.KeyStorageFlags != X509KeyStorageFlags.DefaultKeySet) {
//We have to create a new copy of the certificate to apply the KeyStorageFlags; there doesn't appear to be a better way to do it :(
using (cert) {
return new X509Certificate2(cert.Export(X509ContentType.Pkcs12), (string?)null, builder.KeyStorageFlags);
return Tools.LoadPkcs12(cert.Export(X509ContentType.Pkcs12), (string?)null, builder.KeyStorageFlags);
}
} else {
return cert;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<LangVersion>latest</LangVersion>
Expand All @@ -26,10 +26,6 @@
<InternalsVisibleTo Include="FluentCertificates.Builder.Tests" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="System.Collections.Immutable" Version="9.0.0" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\FluentCertificates.Extensions\FluentCertificates.Extensions.csproj" />
</ItemGroup>
Expand Down
2 changes: 1 addition & 1 deletion src/FluentCertificates.Builder/X500NameBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public X500DistinguishedName Create()
{
var builder = new X500DistinguishedNameBuilder();
foreach (var rdn in RelativeDistinguishedNames) {
builder.Add(rdn.OID, rdn.Value, rdn.ValueEncoding);
builder.Add(rdn.OID, rdn.Value, (UniversalTagNumber?)rdn.ValueEncoding);
}
return builder.Build();
}
Expand Down
49 changes: 49 additions & 0 deletions src/FluentCertificates.Common/FluentCertificates.Common.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<LangVersion>latest</LangVersion>
<CheckEolTargetFramework>false</CheckEolTargetFramework>
<IsPackable>true</IsPackable>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<RootNamespace>FluentCertificates</RootNamespace>

<Authors>Michael Monsour</Authors>
<Copyright>Copyright © Michael Monsour 2022</Copyright>
<Description>FluentCertificates.Common is part of the FluentCertificates package. This library provides common classes and functionality shared with the other FluentCertificates packages.</Description>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<PackageTags>certificate;certs;fluent;x509;pfx;pem;cert;crt;CA</PackageTags>
<PackageProjectUrl>https://github.com/lethek/FluentCertificates</PackageProjectUrl>
<PackageReadmeFile>README.md</PackageReadmeFile>
<RepositoryUrl>https://github.com/lethek/FluentCertificates</RepositoryUrl>
<RepositoryType>git</RepositoryType>
</PropertyGroup>

<ItemGroup>
<InternalsVisibleTo Include="FluentCertificates.Builder" />
<InternalsVisibleTo Include="FluentCertificates.Builder.Tests" />
<InternalsVisibleTo Include="FluentCertificates.Extensions" />
<InternalsVisibleTo Include="FluentCertificates.Extensions.Tests" />
<InternalsVisibleTo Include="FluentCertificates.Finder" />
</ItemGroup>

<Choose>
<When Condition="'$(TargetFramework)' == 'net8.0'">
<ItemGroup>
<PackageReference Include="System.Security.Cryptography.Pkcs" Version="8.0.1" />
</ItemGroup>
</When>
<Otherwise>
<ItemGroup>
<PackageReference Include="System.Security.Cryptography.Pkcs" Version="9.0.0" />
</ItemGroup>
</Otherwise>
</Choose>

<ItemGroup>
<None Include="..\..\README.md" Pack="true" Visible="false" PackagePath="" />
</ItemGroup>

</Project>
53 changes: 53 additions & 0 deletions src/FluentCertificates.Common/Internals/Tools.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
using System.Security.Cryptography.X509Certificates;

namespace FluentCertificates.Internals;

#pragma warning disable SYSLIB0057
internal static class Tools
{
internal static X509Certificate2 LoadCertificate(ReadOnlySpan<byte> data)
{
// #if NET9_0_OR_GREATER
// return X509CertificateLoader.LoadCertificate(data);
// #else
return new X509Certificate2(data);
//#endif
}


internal static X509Certificate2 LoadCertificateFromFile(string path)
{
// #if NET19_0_OR_GREATER
// return X509CertificateLoader.LoadCertificateFromFile(path);
// #else
return new X509Certificate2(path);
// #endif
}


internal static X509Certificate2 LoadPkcs12(
ReadOnlySpan<byte> data,
string? password,
X509KeyStorageFlags keyStorageFlags = X509KeyStorageFlags.DefaultKeySet)
{
// #if NET9_0_OR_GREATER
// return X509CertificateLoader.LoadPkcs12(data, password, keyStorageFlags);
// #else
return new X509Certificate2(data, password, keyStorageFlags);
// #endif
}


internal static X509Certificate2 LoadPkcs12FromFile(
string path,
string? password,
X509KeyStorageFlags keyStorageFlags = X509KeyStorageFlags.DefaultKeySet)
{
// #if NET9_0_OR_GREATER
// return X509CertificateLoader.LoadPkcs12FromFile(path, password, keyStorageFlags);
// #else
return new X509Certificate2(path, password, keyStorageFlags);
// #endif
}
}
#pragma warning restore SYSLIB0057
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
using System.Diagnostics;
using System.Formats.Asn1;
using System.Security.Cryptography;
using FluentCertificates.Internals;

namespace FluentCertificates.Internals;
namespace FluentCertificates;

internal static class Oids
public static class Oids
{
// Symmetric encryption algorithms
internal const string Rc2Cbc = "1.2.840.113549.3.2";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<LangVersion>latest</LangVersion>
Expand Down Expand Up @@ -29,11 +29,27 @@

<ItemGroup>
<PackageReference Include="SideData" Version="0.1.0" />
<PackageReference Include="System.Collections.Immutable" Version="9.0.0" />
</ItemGroup>

<Choose>
<When Condition="'$(TargetFramework)' == 'net8.0'">
<ItemGroup>
<PackageReference Include="System.Collections.Immutable" Version="8.0.0" />
</ItemGroup>
</When>
<Otherwise>
<ItemGroup>
<PackageReference Include="System.Collections.Immutable" Version="9.0.0" />
</ItemGroup>
</Otherwise>
</Choose>

<ItemGroup>
<None Include="..\..\README.md" Pack="true" Visible="false" PackagePath="" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\FluentCertificates.Common\FluentCertificates.Common.csproj" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using FluentCertificates.Internals;


namespace FluentCertificates;
Expand All @@ -23,8 +24,8 @@ public static X509Certificate2Collection ToCollection(this IEnumerable<X509Certi
public static IEnumerable<X509Certificate2> FilterPrivateKeys(this IEnumerable<X509Certificate2> enumerable, ExportKeys include)
=> include switch {
ExportKeys.All => enumerable,
ExportKeys.Leaf => enumerable.Reverse().Select((x, i) => x.HasPrivateKey && i > 0 ? new X509Certificate2(x.RawData, "", X509KeyStorageFlags.Exportable) : x).Reverse(),
ExportKeys.None => enumerable.Select(x => x.HasPrivateKey ? new X509Certificate2(x.RawData, "", X509KeyStorageFlags.Exportable) : x),
ExportKeys.Leaf => enumerable.Reverse().Select((x, i) => x.HasPrivateKey && i > 0 ? Tools.LoadPkcs12(x.RawData, "", X509KeyStorageFlags.Exportable) : x).Reverse(),
ExportKeys.None => enumerable.Select(x => x.HasPrivateKey ? Tools.LoadPkcs12(x.RawData, "", X509KeyStorageFlags.Exportable) : x),
_ => throw new ArgumentOutOfRangeException(nameof(include))
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ private static X509Certificate2 FilterPrivateKey(X509Certificate2 cert, ExportKe
=> include switch {
ExportKeys.All => cert,
ExportKeys.Leaf => cert,
ExportKeys.None => cert.HasPrivateKey ? new X509Certificate2(cert.RawData, "", X509KeyStorageFlags.Exportable) : cert,
ExportKeys.None => cert.HasPrivateKey ? Tools.LoadPkcs12(cert.RawData, "", X509KeyStorageFlags.Exportable) : cert,
_ => throw new ArgumentOutOfRangeException(nameof(include))
};
}
Expand Down
20 changes: 16 additions & 4 deletions src/FluentCertificates.Finder/FluentCertificates.Finder.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<LangVersion>latest</LangVersion>
Expand All @@ -21,13 +21,25 @@
<RepositoryType>git</RepositoryType>
</PropertyGroup>

<Choose>
<When Condition="'$(TargetFramework)' == 'net8.0'">
<ItemGroup>
<PackageReference Include="System.Collections.Immutable" Version="8.0.0" />
</ItemGroup>
</When>
<Otherwise>
<ItemGroup>
<PackageReference Include="System.Collections.Immutable" Version="9.0.0" />
</ItemGroup>
</Otherwise>
</Choose>

<ItemGroup>
<PackageReference Include="System.Collections.Immutable" Version="9.0.0" />
<PackageReference Include="System.Security.Cryptography.Pkcs" Version="9.0.0" />
<None Include="..\..\README.md" Pack="true" Visible="false" PackagePath="" />
</ItemGroup>

<ItemGroup>
<None Include="..\..\README.md" Pack="true" Visible="false" PackagePath="" />
<ProjectReference Include="..\FluentCertificates.Common\FluentCertificates.Common.csproj" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ private static IEnumerable<CertificateFinderResult> GetCertificatesFromDirectory
case ".pem":
return [X509Certificate2.CreateFromPemFile(x.Path)];
default:
return [new X509Certificate2(x.Path)];
return [Tools.LoadCertificateFromFile(x.Path)];
}
} catch {
//Ignore any certificate files which couldn't be loaded
Expand Down
2 changes: 1 addition & 1 deletion src/FluentCertificates/FluentCertificates.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<LangVersion>latest</LangVersion>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>net9.0;net8.0</TargetFrameworks>
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<LangVersion>latest</LangVersion>
Expand All @@ -20,7 +20,6 @@
<PackageReference Include="BouncyCastle.Cryptography" Version="2.4.0" />
<PackageReference Include="Meziantou.Xunit.ParallelTestFramework" Version="2.3.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
<PackageReference Include="System.Security.Cryptography.Pkcs" Version="9.0.0" />
<PackageReference Include="xunit" Version="2.9.2" />
<PackageReference Include="coverlet.collector" Version="6.0.2">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>net9.0;net8.0</TargetFrameworks>
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<LangVersion>latest</LangVersion>
Expand All @@ -20,7 +20,6 @@
<PackageReference Include="BouncyCastle.Cryptography" Version="2.4.0" />
<PackageReference Include="Meziantou.Xunit.ParallelTestFramework" Version="2.3.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
<PackageReference Include="System.Security.Cryptography.Pkcs" Version="9.0.0" />
<PackageReference Include="xunit" Version="2.9.2" />
<PackageReference Include="coverlet.collector" Version="6.0.2">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
Expand Down
Loading

0 comments on commit d63fd73

Please sign in to comment.