Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/linker.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Directory.Build.props1
m---------external/cecil0
-rw-r--r--global.json2
-rw-r--r--src/ILLink.CodeFix/RequiresAssemblyFilesCodeFixProvider.cs2
-rw-r--r--src/ILLink.RoslynAnalyzer/RequiresAnalyzerBase.cs11
-rw-r--r--src/ILLink.RoslynAnalyzer/RequiresAssemblyFilesAnalyzer.cs17
-rw-r--r--src/linker/Linker.Steps/MarkStep.cs4
-rw-r--r--src/linker/Linker/Driver.cs4
-rw-r--r--src/linker/Linker/MethodReferenceExtensions.cs3
-rw-r--r--src/linker/Linker/TypeReferenceExtensions.cs2
-rw-r--r--src/linker/Linker/UnconditionalSuppressMessageAttributeState.cs5
-rw-r--r--src/tlens/TLens.Analyzers/LargeStaticArraysAnalyzer.cs2
-rw-r--r--test/ILLink.RoslynAnalyzer.Tests/RequiresAssemblyFilesAnalyzerTests.cs48
-rw-r--r--test/ILLink.RoslynAnalyzer.Tests/TestCaseUtils.cs2
-rw-r--r--test/ILLink.RoslynAnalyzer.Tests/UnconditionalSuppressMessageCodeFixTests.cs25
15 files changed, 60 insertions, 68 deletions
diff --git a/Directory.Build.props b/Directory.Build.props
index d07c1d081..5d480a85c 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -1,6 +1,7 @@
<Project>
<PropertyGroup>
<IsReferenceAssembly Condition="'$(IsReferenceAssembly)' == '' and '$([System.IO.Path]::GetFileName($(MSBuildProjectDirectory)))' == 'ref'">true</IsReferenceAssembly>
+ <DisableImplicitNamespaceImports_DotNet>true</DisableImplicitNamespaceImports_DotNet>
</PropertyGroup>
<PropertyGroup Condition=" '$(IsReferenceAssembly)' == 'true' ">
<!-- Since .NET 5 reference assemblies are always produced -->
diff --git a/external/cecil b/external/cecil
-Subproject a27b1fb8b08d412fbed56a053a5c0872ed9dba2
+Subproject 3bef7fc7b7910f826790ebfeccb381b76a65057
diff --git a/global.json b/global.json
index df66dcd08..21becbdf6 100644
--- a/global.json
+++ b/global.json
@@ -1,6 +1,6 @@
{
"tools": {
- "dotnet": "6.0.100-preview.5.21225.11",
+ "dotnet": "6.0.100-preview.7.21369.8",
"runtimes": {
"dotnet": [
"5.0.0"
diff --git a/src/ILLink.CodeFix/RequiresAssemblyFilesCodeFixProvider.cs b/src/ILLink.CodeFix/RequiresAssemblyFilesCodeFixProvider.cs
index 7837c183c..b172b7e51 100644
--- a/src/ILLink.CodeFix/RequiresAssemblyFilesCodeFixProvider.cs
+++ b/src/ILLink.CodeFix/RequiresAssemblyFilesCodeFixProvider.cs
@@ -36,7 +36,7 @@ namespace ILLink.CodeFix
if (string.IsNullOrEmpty (name) || HasPublicAccessibility (containingSymbol!)) {
return Array.Empty<SyntaxNode> ();
} else {
- return new[] { generator.AttributeArgument ("Message", generator.LiteralExpression ($"Calls {name}")) };
+ return new[] { generator.AttributeArgument (generator.LiteralExpression ($"Calls {name}")) };
}
}
}
diff --git a/src/ILLink.RoslynAnalyzer/RequiresAnalyzerBase.cs b/src/ILLink.RoslynAnalyzer/RequiresAnalyzerBase.cs
index 6c9498a30..7f1967028 100644
--- a/src/ILLink.RoslynAnalyzer/RequiresAnalyzerBase.cs
+++ b/src/ILLink.RoslynAnalyzer/RequiresAnalyzerBase.cs
@@ -4,6 +4,7 @@
using System;
using System.Collections.Immutable;
+using System.Diagnostics.CodeAnalysis;
using System.Linq;
using ILLink.Shared;
using Microsoft.CodeAnalysis;
@@ -116,7 +117,7 @@ namespace ILLink.RoslynAnalyzer
ImmutableArray<IMethodSymbol> staticConstructors)
{
foreach (var staticConstructor in staticConstructors) {
- if (staticConstructor.HasAttribute (RequiresAttributeName) && TryGetRequiresAttribute (staticConstructor, out AttributeData? requiresAttribute))
+ if (staticConstructor.HasAttribute (RequiresAttributeName) && TryGetRequiresAttribute (staticConstructor, out var requiresAttribute))
ReportRequiresDiagnostic (operationContext, staticConstructor, requiresAttribute);
}
}
@@ -149,7 +150,7 @@ namespace ILLink.RoslynAnalyzer
while (member is IMethodSymbol method && method.OverriddenMethod != null && SymbolEqualityComparer.Default.Equals (method.ReturnType, method.OverriddenMethod.ReturnType))
member = method.OverriddenMethod;
- if (TryGetRequiresAttribute (member, out AttributeData? requiresAttribute)) {
+ if (TryGetRequiresAttribute (member, out var requiresAttribute)) {
ReportRequiresDiagnostic (operationContext, member, requiresAttribute);
}
}
@@ -227,7 +228,7 @@ namespace ILLink.RoslynAnalyzer
/// <param name="operationContext">Analyzer operation context to be able to report the diagnostic.</param>
/// <param name="member">Information about the member that generated the diagnostic.</param>
/// <param name="requiresAttribute">Requires attribute data to print attribute arguments.</param>
- private void ReportRequiresDiagnostic (OperationAnalysisContext operationContext, ISymbol member, AttributeData? requiresAttribute)
+ private void ReportRequiresDiagnostic (OperationAnalysisContext operationContext, ISymbol member, AttributeData requiresAttribute)
{
var message = GetMessageFromAttribute (requiresAttribute);
var url = GetUrlFromAttribute (requiresAttribute);
@@ -250,7 +251,7 @@ namespace ILLink.RoslynAnalyzer
private bool HasMismatchingAttributes (ISymbol member1, ISymbol member2) => member1.HasAttribute (RequiresAttributeName) ^ member2.HasAttribute (RequiresAttributeName);
- protected abstract string GetMessageFromAttribute (AttributeData? requiresAttribute);
+ protected abstract string GetMessageFromAttribute (AttributeData requiresAttribute);
private string GetUrlFromAttribute (AttributeData? requiresAttribute)
{
@@ -264,7 +265,7 @@ namespace ILLink.RoslynAnalyzer
/// <param name="member">Symbol of the member to search attribute.</param>
/// <param name="requiresAttribute">Output variable in case of matching Requires attribute.</param>
/// <returns>True if the member contains a Requires attribute; otherwise, returns false.</returns>
- private bool TryGetRequiresAttribute (ISymbol member, out AttributeData? requiresAttribute)
+ private bool TryGetRequiresAttribute (ISymbol member, [NotNullWhen (returnValue: true)] out AttributeData? requiresAttribute)
{
requiresAttribute = null;
foreach (var _attribute in member.GetAttributes ()) {
diff --git a/src/ILLink.RoslynAnalyzer/RequiresAssemblyFilesAnalyzer.cs b/src/ILLink.RoslynAnalyzer/RequiresAssemblyFilesAnalyzer.cs
index a0a6aa9de..dbce10d38 100644
--- a/src/ILLink.RoslynAnalyzer/RequiresAssemblyFilesAnalyzer.cs
+++ b/src/ILLink.RoslynAnalyzer/RequiresAssemblyFilesAnalyzer.cs
@@ -123,15 +123,18 @@ namespace ILLink.RoslynAnalyzer
return false;
}
- protected override bool VerifyAttributeArguments (AttributeData attribute) => attribute.ConstructorArguments.Length == 0;
+ protected override bool VerifyAttributeArguments (AttributeData attribute) => attribute.ConstructorArguments.Length == 0 ||
+ attribute.ConstructorArguments.Length >= 1 && attribute.ConstructorArguments[0] is { Type: { SpecialType: SpecialType.System_String } } ctorArg;
- protected override string GetMessageFromAttribute (AttributeData? requiresAttribute)
+ protected override string GetMessageFromAttribute (AttributeData requiresAttribute)
{
- var message = requiresAttribute?.NamedArguments.FirstOrDefault (na => na.Key == "Message").Value.Value?.ToString ();
- if (!string.IsNullOrEmpty (message))
- message = $" {message}{(message!.TrimEnd ().EndsWith (".") ? "" : ".")}";
-
- return message!;
+ string message = "";
+ if (requiresAttribute.ConstructorArguments.Length >= 1) {
+ message = requiresAttribute.ConstructorArguments[0].Value?.ToString () ?? "";
+ if (!string.IsNullOrEmpty (message))
+ message = $" {message}{(message!.TrimEnd ().EndsWith (".") ? "" : ".")}";
+ }
+ return message;
}
}
}
diff --git a/src/linker/Linker.Steps/MarkStep.cs b/src/linker/Linker.Steps/MarkStep.cs
index 39f70f622..bd4c0e61c 100644
--- a/src/linker/Linker.Steps/MarkStep.cs
+++ b/src/linker/Linker.Steps/MarkStep.cs
@@ -1052,7 +1052,7 @@ namespace Mono.Linker.Steps
bool marked = false;
int arity_marker = name.IndexOf ('`');
- if (arity_marker < 1 || !int.TryParse (name.Substring (arity_marker + 1), out int arity)) {
+ if (arity_marker < 1 || !int.TryParse (name.AsSpan (arity_marker + 1), out int arity)) {
arity = 0;
} else {
name = name.Substring (0, arity_marker);
@@ -2035,7 +2035,7 @@ namespace Mono.Linker.Steps
//
// We could implement support for this at some point, but for now it's important to make sure at least we don't crash trying to find some
// method on the current type when it exists on some other type
- if (methodName.Contains ("."))
+ if (methodName.Contains ('.'))
continue;
MethodDefinition method = GetMethodWithNoParameters (type, methodName);
diff --git a/src/linker/Linker/Driver.cs b/src/linker/Linker/Driver.cs
index 0674f479a..f65749ad6 100644
--- a/src/linker/Linker/Driver.cs
+++ b/src/linker/Linker/Driver.cs
@@ -805,7 +805,7 @@ namespace Mono.Linker
string[] values = value.Split (new char[] { ',', ';', ' ' }, StringSplitOptions.RemoveEmptyEntries);
foreach (string v in values) {
var id = v.Trim ();
- if (!id.StartsWith ("IL", StringComparison.Ordinal) || !ushort.TryParse (id.Substring (2), out ushort code))
+ if (!id.StartsWith ("IL", StringComparison.Ordinal) || !ushort.TryParse (id.AsSpan (2), out ushort code))
continue;
yield return code;
@@ -884,7 +884,7 @@ namespace Mono.Linker
string customStepName;
string targetName = null;
bool before = false;
- if (!arg.Contains (":")) {
+ if (!arg.Contains (':')) {
customStepName = arg;
} else {
string[] parts = arg.Split (':');
diff --git a/src/linker/Linker/MethodReferenceExtensions.cs b/src/linker/Linker/MethodReferenceExtensions.cs
index 695ab2043..2aff0ce28 100644
--- a/src/linker/Linker/MethodReferenceExtensions.cs
+++ b/src/linker/Linker/MethodReferenceExtensions.cs
@@ -2,6 +2,7 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
+using System;
using Mono.Cecil;
namespace Mono.Linker
@@ -16,7 +17,7 @@ namespace Mono.Linker
var methodDefinition = method.Resolve ();
if (methodDefinition != null && (methodDefinition.IsSetter || methodDefinition.IsGetter)) {
// Append property name
- string name = methodDefinition.IsSetter ? methodDefinition.Name.Substring (4) + ".set" : methodDefinition.Name.Substring (4) + ".get";
+ string name = methodDefinition.IsSetter ? string.Concat (methodDefinition.Name.AsSpan (4), ".set") : string.Concat (methodDefinition.Name.AsSpan (4), ".get");
sb.Append (name);
// Insert declaring type name and namespace
sb.Insert (0, '.').Insert (0, method.DeclaringType.GetDisplayName ());
diff --git a/src/linker/Linker/TypeReferenceExtensions.cs b/src/linker/Linker/TypeReferenceExtensions.cs
index 5ebc3d2ae..3cec02422 100644
--- a/src/linker/Linker/TypeReferenceExtensions.cs
+++ b/src/linker/Linker/TypeReferenceExtensions.cs
@@ -100,7 +100,7 @@ namespace Mono.Linker
sb.Append (']');
}
- sb.Append (arrayType.Name.Substring (0, arrayType.Name.IndexOf ('[')));
+ sb.Append (arrayType.Name.AsSpan (0, arrayType.Name.IndexOf ('[')));
parseArrayDimensions (arrayType);
var element = arrayType.ElementType as ArrayType;
while (element != null) {
diff --git a/src/linker/Linker/UnconditionalSuppressMessageAttributeState.cs b/src/linker/Linker/UnconditionalSuppressMessageAttributeState.cs
index 33e51a028..79a462bd3 100644
--- a/src/linker/Linker/UnconditionalSuppressMessageAttributeState.cs
+++ b/src/linker/Linker/UnconditionalSuppressMessageAttributeState.cs
@@ -1,4 +1,5 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
using System.Linq;
using Mono.Cecil;
@@ -109,7 +110,7 @@ namespace Mono.Linker
if (!(attribute.ConstructorArguments[1].Value is string warningId) ||
warningId.Length < 6 ||
!warningId.StartsWith ("IL") ||
- !int.TryParse (warningId.Substring (2, 4), out info.Id)) {
+ !int.TryParse (warningId.AsSpan (2, 4), out info.Id)) {
return false;
}
diff --git a/src/tlens/TLens.Analyzers/LargeStaticArraysAnalyzer.cs b/src/tlens/TLens.Analyzers/LargeStaticArraysAnalyzer.cs
index 28bb9e586..c46fcc2c6 100644
--- a/src/tlens/TLens.Analyzers/LargeStaticArraysAnalyzer.cs
+++ b/src/tlens/TLens.Analyzers/LargeStaticArraysAnalyzer.cs
@@ -27,7 +27,7 @@ namespace TLens.Analyzers
if (!name.StartsWith ("__StaticArrayInitTypeSize="))
continue;
- if (!int.TryParse (name.Substring (26), out int size))
+ if (!int.TryParse (name.AsSpan (26), out int size))
throw new NotImplementedException (name);
methods.Add ((size, method));
diff --git a/test/ILLink.RoslynAnalyzer.Tests/RequiresAssemblyFilesAnalyzerTests.cs b/test/ILLink.RoslynAnalyzer.Tests/RequiresAssemblyFilesAnalyzerTests.cs
index 4f66348ba..cf09be77e 100644
--- a/test/ILLink.RoslynAnalyzer.Tests/RequiresAssemblyFilesAnalyzerTests.cs
+++ b/test/ILLink.RoslynAnalyzer.Tests/RequiresAssemblyFilesAnalyzerTests.cs
@@ -166,7 +166,7 @@ using System.Diagnostics.CodeAnalysis;
class C
{
- [RequiresAssemblyFiles (Message = ""Message from attribute"", Url = ""https://helpurl"")]
+ [RequiresAssemblyFiles (""Message from attribute"", Url = ""https://helpurl"")]
void M1()
{
}
@@ -231,13 +231,13 @@ class C
M2();
}
- [RequiresAssemblyFiles (Message = ""Warn from M2"")]
+ [RequiresAssemblyFiles (""Warn from M2"")]
void M2()
{
M3();
}
- [RequiresAssemblyFiles (Message = ""Warn from M3"")]
+ [RequiresAssemblyFiles (""Warn from M3"")]
void M3()
{
}
@@ -321,6 +321,8 @@ class C
}
}";
return VerifyRequiresAssemblyFilesAnalyzer (src,
+ // (8,13): warning IL3002: Using member 'System.Reflection.AssemblyName.CodeBase.get' which has 'RequiresAssemblyFilesAttribute' can break functionality when embedded in a single-file app. The code will return an empty string for assemblies embedded in a single-file app.
+ VerifyCS.Diagnostic (RequiresAssemblyFilesAnalyzer.IL3002).WithSpan (8, 13, 8, 23).WithArguments ("System.Reflection.AssemblyName.CodeBase.get", " The code will return an empty string for assemblies embedded in a single-file app.", ""),
// (8,13): warning IL3000: 'System.Reflection.AssemblyName.CodeBase' always returns an empty string for assemblies embedded in a single-file app. If the path to the app directory is needed, consider calling 'System.AppContext.BaseDirectory'.
VerifyCS.Diagnostic (RequiresAssemblyFilesAnalyzer.IL3000).WithSpan (8, 13, 8, 23).WithArguments ("System.Reflection.AssemblyName.CodeBase"),
// (9,13): warning IL3000: 'System.Reflection.AssemblyName.EscapedCodeBase' always returns an empty string for assemblies embedded in a single-file app. If the path to the app directory is needed, consider calling 'System.AppContext.BaseDirectory'.
@@ -445,7 +447,7 @@ class C
using System.Diagnostics.CodeAnalysis;
public class C
{
- [RequiresAssemblyFiles(Message = ""message"")]
+ [RequiresAssemblyFiles(""message"")]
public int M1() => 0;
int M2() => M1();
}
@@ -469,18 +471,18 @@ public class E
using System.Diagnostics.CodeAnalysis;
public class C
{
- [RequiresAssemblyFiles(Message = ""message"")]
+ [RequiresAssemblyFiles(""message"")]
public int M1() => 0;
- [RequiresAssemblyFiles(Message = ""Calls M1"")]
+ [RequiresAssemblyFiles(""Calls M1"")]
int M2() => M1();
}
class D
{
- [RequiresAssemblyFiles(Message = ""Calls M1"")]
+ [RequiresAssemblyFiles(""Calls M1"")]
public int M3(C c) => c.M1();
public class E
{
- [RequiresAssemblyFiles(Message = ""Calls M1"")]
+ [RequiresAssemblyFiles(""Calls M1"")]
public int M4(C c) => c.M1();
}
}
@@ -561,7 +563,7 @@ using System.Diagnostics.CodeAnalysis;
public class C
{
- [RequiresAssemblyFiles(Message = ""message"")]
+ [RequiresAssemblyFiles(""message"")]
public int M1() => 0;
int M2 => M1();
@@ -572,10 +574,10 @@ using System.Diagnostics.CodeAnalysis;
public class C
{
- [RequiresAssemblyFiles(Message = ""message"")]
+ [RequiresAssemblyFiles(""message"")]
public int M1() => 0;
- [RequiresAssemblyFiles(Message = ""Calls M1"")]
+ [RequiresAssemblyFiles(""Calls M1"")]
int M2 => M1();
}";
return VerifyRequiresAssemblyFilesCodeFix (
@@ -642,7 +644,7 @@ using System.Diagnostics.CodeAnalysis;
public class C
{
- [RequiresAssemblyFiles(Message = ""message"")]
+ [RequiresAssemblyFiles(""message"")]
public int M1() => 0;
Action M2()
@@ -657,13 +659,13 @@ using System.Diagnostics.CodeAnalysis;
public class C
{
- [RequiresAssemblyFiles(Message = ""message"")]
+ [RequiresAssemblyFiles(""message"")]
public int M1() => 0;
- [RequiresAssemblyFiles(Message = ""Calls Wrapper"")]
+ [RequiresAssemblyFiles(""Calls Wrapper"")]
Action M2()
{
- [global::System.Diagnostics.CodeAnalysis.RequiresAssemblyFilesAttribute(Message = ""Calls M1"")] void Wrapper () => M1();
+ [global::System.Diagnostics.CodeAnalysis.RequiresAssemblyFilesAttribute(""Calls M1"")] void Wrapper () => M1();
return Wrapper;
}
}";
@@ -688,7 +690,7 @@ using System.Diagnostics.CodeAnalysis;
public class C
{
- [RequiresAssemblyFiles(Message = ""message"")]
+ [RequiresAssemblyFiles(""message"")]
public int M1() => 0;
public C () => M1();
@@ -699,7 +701,7 @@ using System.Diagnostics.CodeAnalysis;
public class C
{
- [RequiresAssemblyFiles(Message = ""message"")]
+ [RequiresAssemblyFiles(""message"")]
public int M1() => 0;
[RequiresAssemblyFiles()]
@@ -724,7 +726,7 @@ using System.Diagnostics.CodeAnalysis;
public class C
{
- [RequiresAssemblyFiles(Message = ""message"")]
+ [RequiresAssemblyFiles(""message"")]
public int M1() => 0;
public event EventHandler E1
@@ -742,7 +744,7 @@ using System.Diagnostics.CodeAnalysis;
public class C
{
- [RequiresAssemblyFiles(Message = ""message"")]
+ [RequiresAssemblyFiles(""message"")]
public int M1() => 0;
[RequiresAssemblyFiles()]
@@ -773,7 +775,7 @@ using System.Diagnostics.CodeAnalysis;
class StaticCtor
{
- [RequiresAssemblyFiles (Message = ""Message for --TestStaticCtor--"")]
+ [RequiresAssemblyFiles (""Message for --TestStaticCtor--"")]
static StaticCtor ()
{
}
@@ -799,7 +801,7 @@ class StaticCtorTriggeredByFieldAccess
{
public static int field;
- [RequiresAssemblyFiles (Message = ""Message for --StaticCtorTriggeredByFieldAccess.Cctor--"")]
+ [RequiresAssemblyFiles (""Message for --StaticCtorTriggeredByFieldAccess.Cctor--"")]
static StaticCtorTriggeredByFieldAccess ()
{
field = 0;
@@ -826,12 +828,12 @@ using System.Diagnostics.CodeAnalysis;
class StaticCtorTriggeredByMethodCall
{
- [RequiresAssemblyFiles (Message = ""Message for --StaticCtorTriggeredByMethodCall.Cctor--"")]
+ [RequiresAssemblyFiles (""Message for --StaticCtorTriggeredByMethodCall.Cctor--"")]
static StaticCtorTriggeredByMethodCall ()
{
}
- [RequiresAssemblyFiles (Message = ""Message for --StaticCtorTriggeredByMethodCall.TriggerStaticCtorMarking--"")]
+ [RequiresAssemblyFiles (""Message for --StaticCtorTriggeredByMethodCall.TriggerStaticCtorMarking--"")]
public void TriggerStaticCtorMarking ()
{
}
diff --git a/test/ILLink.RoslynAnalyzer.Tests/TestCaseUtils.cs b/test/ILLink.RoslynAnalyzer.Tests/TestCaseUtils.cs
index 6022d9a29..60da38b14 100644
--- a/test/ILLink.RoslynAnalyzer.Tests/TestCaseUtils.cs
+++ b/test/ILLink.RoslynAnalyzer.Tests/TestCaseUtils.cs
@@ -22,7 +22,7 @@ namespace ILLink.RoslynAnalyzer.Tests
public static readonly ReferenceAssemblies Net6PreviewAssemblies =
new ReferenceAssemblies (
"net6.0",
- new PackageIdentity ("Microsoft.NETCore.App.Ref", "6.0.0-preview.5.21224.4"),
+ new PackageIdentity ("Microsoft.NETCore.App.Ref", "6.0.0-preview.7.21368.2"),
Path.Combine ("ref", "net6.0"))
.WithNuGetConfigFilePath (Path.Combine (TestCaseUtils.GetRepoRoot (), "NuGet.config"));
diff --git a/test/ILLink.RoslynAnalyzer.Tests/UnconditionalSuppressMessageCodeFixTests.cs b/test/ILLink.RoslynAnalyzer.Tests/UnconditionalSuppressMessageCodeFixTests.cs
index 38249eb3e..05fe2ba10 100644
--- a/test/ILLink.RoslynAnalyzer.Tests/UnconditionalSuppressMessageCodeFixTests.cs
+++ b/test/ILLink.RoslynAnalyzer.Tests/UnconditionalSuppressMessageCodeFixTests.cs
@@ -49,26 +49,9 @@ build_property.{MSBuildPropertyOptionNames.EnableTrimAnalyzer} = true")));
DiagnosticResult[] baselineExpected,
DiagnosticResult[] fixedExpected)
{
- var attributeDefinition = @"
-namespace System.Diagnostics.CodeAnalysis
-{
-#nullable enable
- [AttributeUsage(AttributeTargets.Constructor |
- AttributeTargets.Event |
- AttributeTargets.Method |
- AttributeTargets.Property,
- Inherited = false,
- AllowMultiple = false)]
- public sealed class RequiresAssemblyFilesAttribute : Attribute
- {
- public RequiresAssemblyFilesAttribute() { }
- public string? Message { get; set; }
- public string? Url { get; set; }
- }
-}";
var test = new VerifyCSUSMwithRAF.Test {
- TestCode = source + attributeDefinition,
- FixedCode = fixedSource + attributeDefinition,
+ TestCode = source,
+ FixedCode = fixedSource,
ReferenceAssemblies = TestCaseUtils.Net6PreviewAssemblies
};
test.ExpectedDiagnostics.AddRange (baselineExpected);
@@ -117,7 +100,7 @@ public class C
using System.Diagnostics.CodeAnalysis;
public class C
{
- [RequiresAssemblyFiles(Message = ""message"")]
+ [RequiresAssemblyFiles(""message"")]
public int M1() => 0;
int M2() => M1();
}";
@@ -125,7 +108,7 @@ public class C
using System.Diagnostics.CodeAnalysis;
public class C
{
- [RequiresAssemblyFiles(Message = ""message"")]
+ [RequiresAssemblyFiles(""message"")]
public int M1() => 0;
[UnconditionalSuppressMessage(""SingleFile"", ""IL3002:Avoid calling members marked with 'RequiresAssemblyFilesAttribute' when publishing as a single-file"", Justification = ""<Pending>"")]
int M2() => M1();