Skip to content

Commit

Permalink
⬆️ Bump files with dotnet-file sync
Browse files Browse the repository at this point in the history
# devlooped/oss

- Remove shared community files from ignores devlooped/oss@65f89e0
- Don't attempt to push to nuget.org without a key devlooped/oss@d11c4dc
- Push also to sleet if configured devlooped/oss@40ee833

# clarius/pages

- Bump github-pages to fix build error clarius/pages@90fa16e

# devlooped/SponsorLink

- Don't attempt to sign ILRepack when SignAssembly=false devlooped/SponsorLink@330f826
- Rename analyzer targets to make scenario more explicit devlooped/SponsorLink@7407f5b
- Use a stronger session ID for editors than the process ID devlooped/SponsorLink@dbf1cb0
- Ensure only direct dependencies are exposed as analyzer props devlooped/SponsorLink@5038d77
- Remove all cross-process deduping and simplify devlooped/SponsorLink@fb3353a
  • Loading branch information
devlooped-bot authored and kzu committed Jul 10, 2024
1 parent f849213 commit 94dcc8b
Show file tree
Hide file tree
Showing 12 changed files with 106 additions and 111 deletions.
3 changes: 0 additions & 3 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,6 @@ on:
branches: [ main, dev, 'dev/*', 'feature/*', 'rel/*' ]
paths-ignore:
- changelog.md
- code-of-conduct.md
- security.md
- support.md
- readme.md
pull_request:
types: [opened, synchronize, reopened]
Expand Down
11 changes: 11 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,15 @@ jobs:
path: '*.binlog'

- name: 🚀 nuget
env:
NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}
if: env.NUGET_API_KEY != ''
run: dotnet nuget push ./bin/**/*.nupkg -s https://api.nuget.org/v3/index.json -k ${{secrets.NUGET_API_KEY}} --skip-duplicate

- name: 🚀 sleet
env:
SLEET_CONNECTION: ${{ secrets.SLEET_CONNECTION }}
if: env.SLEET_CONNECTION != ''
run: |
dotnet tool install -g --version 4.0.18 sleet
sleet push bin --config none -f --verbose -p "SLEET_FEED_CONTAINER=nuget" -p "SLEET_FEED_CONNECTIONSTRING=${{ secrets.SLEET_CONNECTION }}" -p "SLEET_FEED_TYPE=azure" || echo "No packages found"
50 changes: 25 additions & 25 deletions .netconfig
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@
sha = 49661dbf0720cde93eb5569be7523b5912351560
[file ".github/workflows/build.yml"]
url = https://github.com/devlooped/oss/blob/main/.github/workflows/build.yml
etag = 7ab5fbbf1235cdb0c2216ef236c25f8c5ce0f28d372109817f1ae62cacc62ec1
etag = 20ef46203325f5b3d06a991f8b38c24bcea49fd74d39062a62003448e2dd8b0a
weak
sha = fef463525739d0fb514dfb9e2bcbc2b1e5f81e38
sha = 65f89e06ed7b2ac33ed3b729adc865b7076840d8
[file ".gitignore"]
url = https://github.com/devlooped/oss/blob/main/.gitignore
etag = a9c37ae312afac14b78436a7d018af4483d88736b5f780576f2c5a0b3f14998c
Expand Down Expand Up @@ -86,9 +86,9 @@
sha = 5fb172362c767bef7c36478f1a6bdc264723f8f9
[file ".github/workflows/publish.yml"]
url = https://github.com/devlooped/oss/blob/main/.github/workflows/publish.yml
etag = 2bc45eaf0bb289ced535c2720975c573ff70841edf1181885e64614e2cafb89f
etag = 105db682c332b2bb0873e60a7d2da45b00fe7d83da0f0e7dbf9a84bc5be77c25
weak
sha = 27a5c9a5f58f901056d4b048a79ba5843c6f6789
sha = 40ee833a83d843c242914599e2635ca9a05aa837
[file ".github/workflows/dotnet-file.yml"]
url = https://github.com/devlooped/oss/blob/main/.github/workflows/dotnet-file.yml
sha = 7afe350f7e80a230e922db026d4e1198ba15cae1
Expand All @@ -109,8 +109,8 @@
weak
[file "Gemfile"]
url = https://github.com/clarius/pages/blob/main/Gemfile
sha = 565a77f40db0863cb47ceb36f88790259a697c91
etag = 24e482e91192e292b633e3c17c4f095286ffb5a041d299d761b2e6ef99ee7669
sha = 90fa16ed0e7300a78a38ee1d23c34a7e875aab27
etag = 3dd7febc8ae6760f19abfe787711f469c288cd803a6f1c545edec34264d48e71
weak
[file ".github/workflows/includes.yml"]
url = https://github.com/devlooped/oss/blob/main/.github/workflows/includes.yml
Expand All @@ -136,8 +136,8 @@
url = https://github.com/devlooped/SponsorLink/tree/main/samples/dotnet/
[file "src/SponsorLink/Analyzer/Analyzer.csproj"]
url = https://github.com/devlooped/SponsorLink/blob/main/samples/dotnet/Analyzer/Analyzer.csproj
sha = 200107908a6aafac1957ac905f47d144b5bf8939
etag = c4832b00fdb1a6111d686c95badebb01ab5eb24ffb9ecbe45325c82f704ccf54
sha = 7407f5b3461213ae764f53ee93651a34487e458c
etag = 2842ea95c956faa47e997a7d20c39df2efc5b9c4f37fe1c2eeea297ee4ba9889
weak
[file "src/SponsorLink/Analyzer/Properties/launchSettings.json"]
url = https://github.com/devlooped/SponsorLink/blob/main/samples/dotnet/Analyzer/Properties/launchSettings.json
Expand Down Expand Up @@ -194,20 +194,15 @@
sha = f47528874a6d9192b5546f84b455f5ccc474a707
etag = 5be3b99c0049cbe98c305f5af2fd482a3a995960c3a1fc6dd2bffcbf3b7e4d52
weak
[file "src/SponsorLink/SponsorLink.targets"]
url = https://github.com/devlooped/SponsorLink/blob/main/samples/dotnet/SponsorLink.targets
sha = 92f466a4cebb59798276a498321e941d98bf5066
etag = ec09a25e0d1d8d5a0f74a80bd5fcb9a7ad61c0d6b52073f16f80f36ba44f472f
weak
[file "src/SponsorLink/SponsorLink/AppDomainDictionary.cs"]
url = https://github.com/devlooped/SponsorLink/blob/main/samples/dotnet/SponsorLink/AppDomainDictionary.cs
sha = f47528874a6d9192b5546f84b455f5ccc474a707
etag = 4a70f86e73f951bca95618c221d821e38a31ef9092af4ac61447eab845671a28
weak
[file "src/SponsorLink/SponsorLink/DiagnosticsManager.cs"]
url = https://github.com/devlooped/SponsorLink/blob/main/samples/dotnet/SponsorLink/DiagnosticsManager.cs
sha = f47528874a6d9192b5546f84b455f5ccc474a707
etag = 0f2bb6afa53513c0837dc7621fdf86f66cbd8b5eaa1978047dc50b96e3a87c99
sha = fb3353af9d7085d73804d0f484507dc76f5b2608
etag = 06a241de827a7e9fb78eb21ad68c26f307d3f916f7cbf98176b6dae053d976f6
weak
[file "src/SponsorLink/SponsorLink/ManifestStatus.cs"]
url = https://github.com/devlooped/SponsorLink/blob/main/samples/dotnet/SponsorLink/ManifestStatus.cs
Expand All @@ -226,18 +221,18 @@
weak
[file "src/SponsorLink/SponsorLink/SponsorLink.cs"]
url = https://github.com/devlooped/SponsorLink/blob/main/samples/dotnet/SponsorLink/SponsorLink.cs
sha = f47528874a6d9192b5546f84b455f5ccc474a707
etag = a5b16dc3c8022add752db5c3b0055fbfd7df9b14dad2ff1a6360a6ecafda1ce1
sha = dbf1cb075923d964e797d047a793ca2152f9d040
etag = 6a6b4579c0802f43f965e0f1f8661e0c5063a0170eaa7376dc57149f9251f8a4
weak
[file "src/SponsorLink/SponsorLink/SponsorLink.csproj"]
url = https://github.com/devlooped/SponsorLink/blob/main/samples/dotnet/SponsorLink/SponsorLink.csproj
sha = f47528874a6d9192b5546f84b455f5ccc474a707
etag = dee8fab315723f4d82c5b0106f3f15ecc4d663fbba68e324289bdaada50c14e5
sha = 7407f5b3461213ae764f53ee93651a34487e458c
etag = 87d82d13a30e52098f032ede5108cc89c6873f12c6d748839b3b6c047b0b2fa4
weak
[file "src/SponsorLink/SponsorLink/SponsorLinkAnalyzer.cs"]
url = https://github.com/devlooped/SponsorLink/blob/main/samples/dotnet/SponsorLink/SponsorLinkAnalyzer.cs
sha = f47528874a6d9192b5546f84b455f5ccc474a707
etag = 9c4604895aafcbc6bfe859f1b9fb0313a94e315b336556b0b78ea553d4eac1e1
sha = fb3353af9d7085d73804d0f484507dc76f5b2608
etag = 76f5ea97fa141c39fe681a526e6d72c8816605882ab9f23d524c7fbe2ae78c06
weak
[file "src/SponsorLink/SponsorLink/SponsorStatus.cs"]
url = https://github.com/devlooped/SponsorLink/blob/main/samples/dotnet/SponsorLink/SponsorStatus.cs
Expand All @@ -256,8 +251,8 @@
weak
[file "src/SponsorLink/SponsorLink/buildTransitive/Devlooped.Sponsors.targets"]
url = https://github.com/devlooped/SponsorLink/blob/main/samples/dotnet/SponsorLink/buildTransitive/Devlooped.Sponsors.targets
sha = f47528874a6d9192b5546f84b455f5ccc474a707
etag = 2d1bdeba897ce160ebb2988e75bf89ca9034699b736b1e24ed621a5e8d47e2d7
sha = 5038d77597e956881dbb6e1d3f050f2c8dc21b4d
etag = f4e566aa471141e5064276f8e3668466e8bf907c4db2fbc533bcef90744c8c46
weak
[file "src/SponsorLink/SponsorLink/sponsorable.md"]
url = https://github.com/devlooped/SponsorLink/blob/main/samples/dotnet/SponsorLink/sponsorable.md
Expand Down Expand Up @@ -361,6 +356,11 @@
weak
[file "src/SponsorLink/readme.md"]
url = https://github.com/devlooped/SponsorLink/blob/main/samples/dotnet/readme.md
sha = f47528874a6d9192b5546f84b455f5ccc474a707
etag = 89f9984ca933c7647eff583e36374ba1c21c94342649d07cd369ef0ea4f056b9
sha = 7407f5b3461213ae764f53ee93651a34487e458c
etag = 50937c64732bb2b97ddc67cc7b7b2d091c51390c9f5f2b5fdcfe9f1becb5d838
weak
[file "src/SponsorLink/SponsorLink.Analyzer.targets"]
url = https://github.com/devlooped/SponsorLink/blob/main/samples/dotnet/SponsorLink.Analyzer.targets
sha = 330f826844a5a8be0b1ed6d670e3de2804b595ae
etag = 8fde8a0cd161428bec1aec37a592447fdc769ea6892cf75208ebfd847c3219d4
weak
2 changes: 1 addition & 1 deletion Gemfile
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
source 'https://rubygems.org'

gem 'github-pages', '~> 209', group: :jekyll_plugins
gem 'github-pages', '~> 231', group: :jekyll_plugins
2 changes: 1 addition & 1 deletion src/SponsorLink/Analyzer/Analyzer.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<MergeAnalyzerAssemblies>false</MergeAnalyzerAssemblies>
<MergeAnalyzerAssemblies Condition="'$(CI)' == 'true'">true</MergeAnalyzerAssemblies>
<CustomAfterMicrosoftCSharpTargets>$(MSBuildThisFileDirectory)..\SponsorLink.targets</CustomAfterMicrosoftCSharpTargets>
<CustomAfterMicrosoftCSharpTargets>$(MSBuildThisFileDirectory)..\SponsorLink.Analyzer.targets</CustomAfterMicrosoftCSharpTargets>
<ImplicitUsings>disable</ImplicitUsings>
<FundingPackageId>SponsorableLib</FundingPackageId>
</PropertyGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,10 @@
<FundingPrefix Condition="'$(FundingPrefix)' == ''">$([System.Text.RegularExpressions.Regex]::Replace("$(FundingProduct)", "[^A-Z]", ""))</FundingPrefix>
<!-- Default grace days for an expired sponsor manifest or unknown status -->
<FundingGrace Condition="'$(FundingGrace)' == ''">15</FundingGrace>
</PropertyGroup>

<!-- Strong-naming analyzers is both unnecessary and additionally unsupported by ILRepack when run as a dotnet tool -->
<SignAssembly Condition="'$(MergeAnalyzerAssemblies)' == 'true'">false</SignAssembly>
</PropertyGroup>

<ItemGroup>
<Compile Include="$(MSBuildThisFileDirectory)SponsorLink/*.cs"
Expand Down Expand Up @@ -155,7 +158,7 @@ partial class SponsorLink
<LibDir Include="@(ReferenceCopyLocalDirs -&gt; Distinct())" />
</ItemGroup>
<PropertyGroup>
<AbsoluteAssemblyOriginatorKeyFile Condition="'$(AssemblyOriginatorKeyFile)' != ''">$([System.IO.Path]::GetFullPath($([System.IO.Path]::Combine('$(MSBuildProjectDirectory)','$(AssemblyOriginatorKeyFile)'))))</AbsoluteAssemblyOriginatorKeyFile>
<AbsoluteAssemblyOriginatorKeyFile Condition="'$(SignAssembly)' == 'true' and '$(AssemblyOriginatorKeyFile)' != ''">$([System.IO.Path]::GetFullPath($([System.IO.Path]::Combine('$(MSBuildProjectDirectory)','$(AssemblyOriginatorKeyFile)'))))</AbsoluteAssemblyOriginatorKeyFile>
<ILRepackArgs Condition="'$(AbsoluteAssemblyOriginatorKeyFile)' != ''">/keyfile:"$(AbsoluteAssemblyOriginatorKeyFile)" /delaysign</ILRepackArgs>
<ILRepackArgs>$(ILRepackArgs) /internalize</ILRepackArgs>
<ILRepackArgs>$(ILRepackArgs) /union</ILRepackArgs>
Expand Down Expand Up @@ -205,7 +208,10 @@ partial class SponsorLink
<Target Name="PackCopyLocalLockFileAssemblies" Condition="'$(MergeAnalyzerAssemblies)' != 'true'"
BeforeTargets="GetPackageContents" DependsOnTargets="ReferenceCopyLocalPathsOutputGroup">
<ItemGroup>
<PackageFile Include="@(ReferenceCopyLocalPathsOutputGroupOutput)" PackFolder="$(PackFolder)" />
<PackageFile Include="@(ReferenceCopyLocalPathsOutputGroupOutput)" Condition="
!$([MSBuild]::ValueOrDefault('%(FileName)', '').StartsWith('Microsoft.CodeAnalysis', StringComparison.OrdinalIgnoreCase)) And
!$([MSBuild]::ValueOrDefault('%(FileName)', '').StartsWith('Microsoft.CSharp', StringComparison.OrdinalIgnoreCase))"
PackFolder="$(PackFolder)" />
</ItemGroup>
</Target>

Expand All @@ -214,4 +220,4 @@ partial class SponsorLink
<SponsorLinkImported>true</SponsorLinkImported>
</PropertyGroup>

</Project>
</Project>
98 changes: 28 additions & 70 deletions src/SponsorLink/SponsorLink/DiagnosticsManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,9 @@
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.IO.MemoryMappedFiles;
using System.Linq;
using System.Runtime.InteropServices;
using System.Threading;
using Humanizer;
using Humanizer.Localisation;
using Microsoft.CodeAnalysis;
Expand Down Expand Up @@ -44,32 +40,6 @@ class DiagnosticsManager
ConcurrentDictionary<string, Diagnostic> Diagnostics
=> AppDomainDictionary.Get<ConcurrentDictionary<string, Diagnostic>>(appDomainDiagnosticsKey.ToString());

/// <summary>
/// Attemps to remove a diagnostic for the given product.
/// </summary>
/// <param name="product">The product diagnostic that might have been pushed previously.</param>
/// <returns>The removed diagnostic, or <see langword="null" /> if none was previously pushed.</returns>
public void ReportOnce(Action<Diagnostic> report, string product = Funding.Product)
{
if (Diagnostics.TryRemove(product, out var diagnostic) &&
GetStatus(diagnostic) != SponsorStatus.Grace)
{
// Ensure only one such diagnostic is reported per product for the entire process,
// so that we can avoid polluting the error list with duplicates across multiple projects.
var id = string.Concat(Process.GetCurrentProcess().Id, product, diagnostic.Id);
using var mutex = new Mutex(false, "mutex" + id);
mutex.WaitOne();
using var mmf = CreateOrOpenMemoryMappedFile(id, 1);
using var accessor = mmf.CreateViewAccessor();
if (accessor.ReadByte(0) == 0)
{
accessor.Write(0, (byte)1);
report(diagnostic);
Tracing.Trace($"👈{diagnostic.Severity.ToString().ToLowerInvariant()}:{Process.GetCurrentProcess().Id}:{Process.GetCurrentProcess().ProcessName}:{product}:{diagnostic.Id}");
}
}
}

/// <summary>
/// Gets the status of the given product based on a previously stored diagnostic.
/// To ensure the value is always set before returning, use <see cref="GetOrSetStatus"/>.
Expand Down Expand Up @@ -100,6 +70,34 @@ public SponsorStatus GetOrSetStatus(ImmutableArray<AdditionalText> manifests, An
public SponsorStatus GetOrSetStatus(Func<AnalyzerOptions?> options)
=> GetOrSetStatus(() => options().GetSponsorAdditionalFiles(), () => options()?.AnalyzerConfigOptionsProvider.GlobalOptions);

/// <summary>
/// Attemps to remove a diagnostic for the given product.
/// </summary>
/// <param name="product">The product diagnostic that might have been pushed previously.</param>
/// <returns>The removed diagnostic, or <see langword="null" /> if none was previously pushed.</returns>
public Diagnostic? Pop(string product = Funding.Product)
{
if (Diagnostics.TryRemove(product, out var diagnostic) &&
GetStatus(diagnostic) != SponsorStatus.Grace)
{
return diagnostic;
}

return null;
}

/// <summary>
/// Pushes a diagnostic for the given product.
/// </summary>
/// <returns>The same diagnostic that was pushed, for chained invocations.</returns>
Diagnostic Push(Diagnostic diagnostic, string product = Funding.Product)
{
// We only expect to get one warning per sponsorable+product
// combination, and first one to set wins.
Diagnostics.TryAdd(product, diagnostic);
return diagnostic;
}

SponsorStatus GetOrSetStatus(Func<ImmutableArray<AdditionalText>> getAdditionalFiles, Func<AnalyzerConfigOptions?> getGlobalOptions)
{
if (GetStatus() is { } status)
Expand Down Expand Up @@ -166,29 +164,6 @@ SponsorStatus GetOrSetStatus(Func<ImmutableArray<AdditionalText>> getAdditionalF
}
}

/// <summary>
/// Pushes a diagnostic for the given product.
/// </summary>
/// <returns>The same diagnostic that was pushed, for chained invocations.</returns>
Diagnostic Push(Diagnostic diagnostic, string product = Funding.Product)
{
// We only expect to get one warning per sponsorable+product
// combination, and first one to set wins.
if (Diagnostics.TryAdd(product, diagnostic))
{
// Reset the process-wide flag for this diagnostic.
var id = string.Concat(Process.GetCurrentProcess().Id, product, diagnostic.Id);
using var mutex = new Mutex(false, "mutex" + id);
mutex.WaitOne();
using var mmf = CreateOrOpenMemoryMappedFile(id, 1);
using var accessor = mmf.CreateViewAccessor();
accessor.Write(0, (byte)0);
Tracing.Trace($"👉{diagnostic.Severity.ToString().ToLowerInvariant()}:{Process.GetCurrentProcess().Id}:{Process.GetCurrentProcess().ProcessName}:{product}:{diagnostic.Id}");
}

return diagnostic;
}

SponsorStatus? GetStatus(Diagnostic? diagnostic) => diagnostic?.Properties.TryGetValue(nameof(SponsorStatus), out var value) == true
? value switch
{
Expand All @@ -201,23 +176,6 @@ Diagnostic Push(Diagnostic diagnostic, string product = Funding.Product)
}
: null;

static MemoryMappedFile CreateOrOpenMemoryMappedFile(string mapName, int capacity)
{
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
return MemoryMappedFile.CreateOrOpen(mapName, capacity);
}
else
{
// On Linux, use a file-based memory-mapped file
string filePath = $"/tmp/{mapName}";
using (var fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))
fs.Write(new byte[capacity], 0, capacity);

return MemoryMappedFile.CreateFromFile(filePath, FileMode.OpenOrCreate);
}
}

internal static DiagnosticDescriptor CreateSponsor(string[] sponsorable, string prefix) => new(
$"{prefix}100",
Resources.Sponsor_Title,
Expand Down
9 changes: 9 additions & 0 deletions src/SponsorLink/SponsorLink/SponsorLink.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Linq;
Expand Down Expand Up @@ -43,6 +44,14 @@ static partial class SponsorLink
Environment.GetEnvironmentVariable("RESHARPER_FUS_SESSION") != null ||
Environment.GetEnvironmentVariable("IDEA_INITIAL_DIRECTORY") != null;

/// <summary>
/// A unique session ID associated with the current IDE or process running the analyzer.
/// </summary>
public static string SessionId =>
IsVisualStudio ? Environment.GetEnvironmentVariable("ServiceHubLogSessionKey") :
IsRider ? Environment.GetEnvironmentVariable("RESHARPER_FUS_SESSION") :
Process.GetCurrentProcess().Id.ToString();

/// <summary>
/// Manages the sharing and reporting of diagnostics across the source generator
/// and the diagnostic analyzer, to avoid doing the online check more than once.
Expand Down
2 changes: 1 addition & 1 deletion src/SponsorLink/SponsorLink/SponsorLink.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
</ItemGroup>

<ItemGroup>
<None Include="..\SponsorLink.targets" Link="SponsorLink.targets" />
<None Include="..\SponsorLink.Analyzer.targets" Link="SponsorLink.Analyzer.targets" />
</ItemGroup>

<Target Name="EmitFunding" BeforeTargets="GenerateMSBuildEditorConfigFileShouldRun" Inputs="$(MSBuildAllProjects)" Outputs="$(IntermediateOutputPath)SponsorLink.g.cs">
Expand Down
11 changes: 10 additions & 1 deletion src/SponsorLink/SponsorLink/SponsorLinkAnalyzer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,16 @@ public override void Initialize(AnalysisContext context)
// so it's expected to NOT get a diagnostic back. Also, we don't want to report
// multiple diagnostics for each project in a solution that uses the same product.
ctx.RegisterCompilationEndAction(ctx =>
Diagnostics.ReportOnce(diagnostic => ctx.ReportDiagnostic(diagnostic)));
{
var prop = Funding.PackageId.Replace('.', '_');
// Only report if the package is directly referenced in the project. See SL_CollectDependencies in buildTransitive\Devlooped.Sponsors.targets
if (ctx.Options.AnalyzerConfigOptionsProvider.GlobalOptions.TryGetValue("build_property." + prop, out var package) &&
package?.Length > 0 &&
Diagnostics.Pop() is { } diagnostic)
{
ctx.ReportDiagnostic(diagnostic);
}
});
}
});
#pragma warning restore RS1013 // Start action has no registered non-end actions
Expand Down
Loading

0 comments on commit 94dcc8b

Please sign in to comment.