diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json
new file mode 100644
index 000000000000..493dd5c6774a
--- /dev/null
+++ b/.config/dotnet-tools.json
@@ -0,0 +1,12 @@
+{
+ "version": 1,
+ "isRoot": true,
+ "tools": {
+ "dotnet-reportgenerator-globaltool": {
+ "version": "4.8.0",
+ "commands": [
+ "reportgenerator"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 6c87d512c524..7f39025049e4 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -55,8 +55,11 @@ Nuget package will be created in root directory under \artifacts\packages\Debug
### Using the command line:
Run e.g. `msbuild eng\mgmt.proj /t:"Runtests" /p:Scope=Compute`
-In the above example _RunTests_ will build and run tests for Compute only or you can use command line CLI
-`dotnet test Compute\Microsoft.Azure.Management.Compute\tests\Microsoft.Azure.Management.Tests.csproj`
+In the above example _RunTests_ will build and run tests for Compute only or you can use command line CLI:
+
+```bash
+dotnet test Compute\Microsoft.Azure.Management.Compute\tests\Microsoft.Azure.Management.Tests.csproj
+```
### Non-Windows command line build
@@ -67,6 +70,22 @@ Now you can use the same command on non-windows as above for e.g. on Ubuntu you
- `dotnet msbuild eng\mgmt.proj /t:CreateNugetPackage /p:scope=Compute`
- `dotnet msbuild build.proj /t:Util /p:UtilityName=InstallPsModules`
+### Code Coverage
+
+If you want to enable code coverage reporting, on the command line pass `/p:CollectCoverage=true` like so:
+
+```bash
+dotnet tool restore
+dotnet test /p:CollectCoverage=true
+```
+
+On developers' machines, you can open `index.html` from within the `TestResults` directory in each of your test projects.
+Coverage reports can also be found in Azure Pipelines on the "Code Coverage" tab after a pull request validation build completes.
+All covered projects should have 70% or better test coverage.
+
+By default, all _Azure.*_ libraries are covered, and any project that sets the `IsClientLibrary=true` MSBuild property.
+To exclude a project, set `ExcludeFromCodeCoverage=true` in the project's MSBuild properties before other targets are imported.
+
### Update build tools
Build tools are now downloaded as part of a nuget package under `root\restoredPackages\microsoft.internal.netsdkbuild.mgmt.tools`
diff --git a/eng/CodeCoverage.runsettings b/eng/CodeCoverage.runsettings
new file mode 100644
index 000000000000..9cc066020173
--- /dev/null
+++ b/eng/CodeCoverage.runsettings
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+ cobertura
+ ExcludeFromCodeCoverageAttribute,GeneratedCodeAttribute,Obsolete
+ false
+ false
+ true
+
+
+
+
+
+
+
diff --git a/eng/CodeCoverage.targets b/eng/CodeCoverage.targets
index 135eaa5eef26..297c676529b6 100644
--- a/eng/CodeCoverage.targets
+++ b/eng/CodeCoverage.targets
@@ -1,13 +1,70 @@
-
-
+
+ <_IsCodeCoverable Condition="'$(IsClientLibrary)' == 'true' and '$(IsMgmtClientLibrary)' != 'true'">true
+
+
+
+ $([System.IO.Path]::GetFullPath("$(MSBuildProjectDirectory)\.."))
+ true
+ XPlat Code Coverage
+ $(MSBuildThisFileDirectory)CodeCoverage.runsettings
+ <_CollectCoverage>true
+ <_TestResultsDirectory>$(MSBuildProjectDirectory)\TestResults
+
+
+
+
+
all
runtime; build; native; contentfiles; analyzers
-
+
+
+
+
+
+
+
+
+ dotnet tool run reportgenerator --
+ $(CoverageReportCommandLine) "-reports:$(_TestResultsDirectory)\**\coverage.cobertura.xml"
+ $(CoverageReportCommandLine) -reporttypes:Html
+ $(CoverageReportCommandLine) "-targetdir:$(_TestResultsDirectory)"
+ $(CoverageReportCommandLine) "-filefilters:+$(CodeCoverageDirectory)\**"
+
+
+
+
+
+
+
+ <_ContainsCurlyBraces Include="@(Compile)" Condition="$([MSBuild]::ValueOrDefault('%(Directory)%(Filename)', '').Contains('{')) or $([MSBuild]::ValueOrDefault('%(Directory)%(Filename)', '').Contains('}'))" />
+
+
+
+
+
@@ -17,7 +74,8 @@
Returns="@(_LocalTopLevelSourceRoot)"
Condition="'$(DeterministicSourcePaths)' == 'true'">
- <_LocalTopLevelSourceRoot Include="@(SourceRoot)" Condition="'%(SourceRoot.NestedRoot)' == ''"/>
+ <_LocalTopLevelSourceRoot Include="@(SourceRoot)"
+ Condition="'%(SourceRoot.NestedRoot)' == ''"/>
-
\ No newline at end of file
+
diff --git a/eng/Directory.Build.Data.props b/eng/Directory.Build.Data.props
index 6f8e8e2cff38..2598f04d10aa 100644
--- a/eng/Directory.Build.Data.props
+++ b/eng/Directory.Build.Data.props
@@ -55,7 +55,6 @@
true
$(AZURE_DEV_UPDATESOURCESONBUILD)
pwsh
- cobertura
false
@@ -97,7 +96,8 @@
false
netcoreapp2.1;net5.0
- netcoreapp2.1;net5.0;net461
+
+ net461;netcoreapp2.1;net5.0
diff --git a/eng/Directory.Build.Data.targets b/eng/Directory.Build.Data.targets
index a9f939e79812..b3b5f77db8fe 100644
--- a/eng/Directory.Build.Data.targets
+++ b/eng/Directory.Build.Data.targets
@@ -71,9 +71,6 @@
-
-
-
@@ -85,7 +82,7 @@
-
+
@@ -105,6 +102,8 @@
+
+
diff --git a/eng/Packages.Data.props b/eng/Packages.Data.props
index 6379f41e3610..7cef773fe278 100644
--- a/eng/Packages.Data.props
+++ b/eng/Packages.Data.props
@@ -9,9 +9,9 @@
-
+
-
+
@@ -32,7 +32,7 @@
-
+
@@ -69,7 +69,7 @@
-
+
@@ -180,9 +180,9 @@
-
+
-
+
diff --git a/eng/pipelines/templates/jobs/archetype-sdk-client.yml b/eng/pipelines/templates/jobs/archetype-sdk-client.yml
index 66f2e7680b6d..83b9816fc136 100644
--- a/eng/pipelines/templates/jobs/archetype-sdk-client.yml
+++ b/eng/pipelines/templates/jobs/archetype-sdk-client.yml
@@ -110,6 +110,8 @@ jobs:
condition: and(succeededOrFailed(), ne(variables['Skip.Test'], true))
variables:
- template: ../variables/globals.yml
+ - name: disable.coverage.autogenerate
+ value: true
strategy:
maxParallel: $[ variables['MaxParallelTestJobs'] ]
matrix:
@@ -119,6 +121,7 @@ jobs:
Windows_NetCoreApp:
OSVmImage: "windows-2019"
TestTargetFramework: netcoreapp2.1
+ CollectCoverage: true
Windows_NetCoreApp_ProjectReferences:
OSVmImage: "windows-2019"
TestTargetFramework: netcoreapp2.1
@@ -149,7 +152,8 @@ jobs:
--logger "trx;LogFileName=$(TestTargetFramework).trx" --logger:"console;verbosity=normal"
/p:ServiceDirectory=${{parameters.ServiceToTest}}
/p:IncludeSrc=false /p:IncludeSamples=false /p:IncludePerf=false /p:IncludeStress=false
- /p:Configuration=$(BuildConfiguration) $(ConvertToProjectReferenceOption) /p:CollectCoverage=$(CollectCoverage)
+ /p:Configuration=$(BuildConfiguration) $(ConvertToProjectReferenceOption)
+ /p:CollectCoverage=$(CollectCoverage) /p:CodeCoverageDirectory=${{parameters.ServiceDirectory}}
displayName: "Build & Test ($(TestTargetFramework))"
env:
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1
@@ -163,15 +167,18 @@ jobs:
testResultsFormat: "VSTest"
mergeTestResults: true
- task: Palmmedia.reportgenerator.reportgenerator-build-release-task.reportgenerator@4
- condition: and(succeeded(), eq(variables['CollectCoverage'], 'true'))
- displayName: ReportGenerator
+ condition: and(succeededOrFailed(), eq(variables['CollectCoverage'], 'true'))
+ displayName: Generate Code Coverage Reports
inputs:
- reports: '**/*coverage.netcoreapp2.1.cobertura.xml'
- targetdir: '$(Build.SourcesDirectory)'
- reporttypes: Cobertura
+ reports: $(Build.SourcesDirectory)\sdk\${{parameters.ServiceDirectory}}\**\coverage.cobertura.xml
+ targetdir: $(Build.ArtifactStagingDirectory)\coverage
+ reporttypes: Cobertura;HtmlInline_AzurePipelines
+ filefilters: +$(Build.SourcesDirectory)\sdk\${{parameters.ServiceDirectory}}\**
+ verbosity: Verbose
- task: PublishCodeCoverageResults@1
- condition: and(succeeded(), eq(variables['CollectCoverage'], 'true'))
- displayName: 'Publish code coverage report'
+ condition: and(succeededOrFailed(), eq(variables['CollectCoverage'], 'true'))
+ displayName: Publish Code Coverage Reports
inputs:
- codeCoverageTool: 'Cobertura'
- summaryFileLocation: 'Cobertura.xml'
+ codeCoverageTool: Cobertura
+ summaryFileLocation: $(Build.ArtifactStagingDirectory)\coverage\Cobertura.xml
+ reportDirectory: $(Build.ArtifactStagingDirectory)\coverage
diff --git a/eng/service.proj b/eng/service.proj
index 9e6ecfe5897a..b8197a7fdc33 100644
--- a/eng/service.proj
+++ b/eng/service.proj
@@ -9,6 +9,9 @@
true
true
false
+
+ CodeCoverageDirectory=$([System.IO.Path]::GetFullPath("$(CodeCoverageDirectory)", "$(MSBuildThisFileDirectory)..\sdk"));
+
diff --git a/sdk/appconfiguration/Azure.Data.AppConfiguration/src/Azure.Data.AppConfiguration.csproj b/sdk/appconfiguration/Azure.Data.AppConfiguration/src/Azure.Data.AppConfiguration.csproj
index 0cb257676fc6..c2dd1ceb9fe6 100644
--- a/sdk/appconfiguration/Azure.Data.AppConfiguration/src/Azure.Data.AppConfiguration.csproj
+++ b/sdk/appconfiguration/Azure.Data.AppConfiguration/src/Azure.Data.AppConfiguration.csproj
@@ -30,7 +30,7 @@
-
+
diff --git a/sdk/core/Azure.Core.TestFramework/src/RecordedTestBase{TEnvironment}.cs b/sdk/core/Azure.Core.TestFramework/src/RecordedTestBaseOfTEnvironment.cs
similarity index 87%
rename from sdk/core/Azure.Core.TestFramework/src/RecordedTestBase{TEnvironment}.cs
rename to sdk/core/Azure.Core.TestFramework/src/RecordedTestBaseOfTEnvironment.cs
index c665dbf1af03..260ea937d8d6 100644
--- a/sdk/core/Azure.Core.TestFramework/src/RecordedTestBase{TEnvironment}.cs
+++ b/sdk/core/Azure.Core.TestFramework/src/RecordedTestBaseOfTEnvironment.cs
@@ -3,7 +3,9 @@
namespace Azure.Core.TestFramework
{
+#pragma warning disable SA1649 // File name should match first type name
public abstract class RecordedTestBase : RecordedTestBase where TEnvironment : TestEnvironment, new()
+#pragma warning restore SA1649 // File name should match first type name
{
protected RecordedTestBase(bool isAsync) : base(isAsync)
{
diff --git a/sdk/core/Azure.Core/src/Operation{T}.cs b/sdk/core/Azure.Core/src/OperationOfT.cs
similarity index 97%
rename from sdk/core/Azure.Core/src/Operation{T}.cs
rename to sdk/core/Azure.Core/src/OperationOfT.cs
index ad4827028506..08f554885f2a 100644
--- a/sdk/core/Azure.Core/src/Operation{T}.cs
+++ b/sdk/core/Azure.Core/src/OperationOfT.cs
@@ -14,7 +14,9 @@ namespace Azure
/// Represents a long-running operation.
///
/// The final result of the long-running operation.
+#pragma warning disable SA1649 // File name should match first type name
public abstract class Operation where T : notnull
+#pragma warning restore SA1649 // File name should match first type name
{
///
/// Gets an ID representing the operation that can be used to poll for
diff --git a/sdk/core/Azure.Core/src/Response{T}.cs b/sdk/core/Azure.Core/src/ResponseOfT.cs
similarity index 91%
rename from sdk/core/Azure.Core/src/Response{T}.cs
rename to sdk/core/Azure.Core/src/ResponseOfT.cs
index 4ebe53eb1841..f7c1228e4a4a 100644
--- a/sdk/core/Azure.Core/src/Response{T}.cs
+++ b/sdk/core/Azure.Core/src/ResponseOfT.cs
@@ -11,7 +11,9 @@ namespace Azure
///
/// The type of returned value.
[DebuggerTypeProxy(typeof(ResponseDebugView<>))]
+#pragma warning disable SA1649 // File name should match first type name
public abstract class Response
+#pragma warning restore SA1649 // File name should match first type name
{
///
/// Returns the HTTP response returned by the service.
diff --git a/sdk/core/Azure.Core/src/Shared/NoBodyResponse{T}.cs b/sdk/core/Azure.Core/src/Shared/NoBodyResponseOfT.cs
similarity index 88%
rename from sdk/core/Azure.Core/src/Shared/NoBodyResponse{T}.cs
rename to sdk/core/Azure.Core/src/Shared/NoBodyResponseOfT.cs
index 85ba5aa2f303..da295d970201 100644
--- a/sdk/core/Azure.Core/src/Shared/NoBodyResponse{T}.cs
+++ b/sdk/core/Azure.Core/src/Shared/NoBodyResponseOfT.cs
@@ -5,7 +5,9 @@
namespace Azure
{
+#pragma warning disable SA1649 // File name should match first type name
internal class NoBodyResponse : Response
+#pragma warning restore SA1649 // File name should match first type name
{
private readonly Response _response;
diff --git a/sdk/core/Azure.Core/tests/Azure.Core.Tests.csproj b/sdk/core/Azure.Core/tests/Azure.Core.Tests.csproj
index f825e76110d7..339cb2dc29ff 100644
--- a/sdk/core/Azure.Core/tests/Azure.Core.Tests.csproj
+++ b/sdk/core/Azure.Core/tests/Azure.Core.Tests.csproj
@@ -26,7 +26,7 @@
-
+
diff --git a/sdk/eventhub/Azure.Messaging.EventHubs/src/Primitives/EventProcessor{TPartition}.cs b/sdk/eventhub/Azure.Messaging.EventHubs/src/Primitives/EventProcessor.cs
similarity index 100%
rename from sdk/eventhub/Azure.Messaging.EventHubs/src/Primitives/EventProcessor{TPartition}.cs
rename to sdk/eventhub/Azure.Messaging.EventHubs/src/Primitives/EventProcessor.cs
diff --git a/sdk/eventhub/Microsoft.Azure.EventHubs/Directory.Build.props b/sdk/eventhub/Microsoft.Azure.EventHubs/Directory.Build.props
index 9fbcdd998103..d18453d3ded2 100755
--- a/sdk/eventhub/Microsoft.Azure.EventHubs/Directory.Build.props
+++ b/sdk/eventhub/Microsoft.Azure.EventHubs/Directory.Build.props
@@ -1,5 +1,6 @@
+ true
true
diff --git a/sdk/extensions/Microsoft.Azure.WebJobs.Extensions.Clients/tests/shared/FakeTypeLocator{T}.cs b/sdk/extensions/Microsoft.Azure.WebJobs.Extensions.Clients/tests/shared/FakeTypeLocatorOfT.cs
similarity index 72%
rename from sdk/extensions/Microsoft.Azure.WebJobs.Extensions.Clients/tests/shared/FakeTypeLocator{T}.cs
rename to sdk/extensions/Microsoft.Azure.WebJobs.Extensions.Clients/tests/shared/FakeTypeLocatorOfT.cs
index 9ada78519cab..5b8cfbc7aabb 100644
--- a/sdk/extensions/Microsoft.Azure.WebJobs.Extensions.Clients/tests/shared/FakeTypeLocator{T}.cs
+++ b/sdk/extensions/Microsoft.Azure.WebJobs.Extensions.Clients/tests/shared/FakeTypeLocatorOfT.cs
@@ -6,7 +6,9 @@
namespace Microsoft.Azure.WebJobs.Host.TestCommon
{
+#pragma warning disable SA1649 // File name should match first type name
public class FakeTypeLocator : ITypeLocator
+#pragma warning restore SA1649 // File name should match first type name
{
public IReadOnlyList GetTypes()
{
diff --git a/sdk/extensions/Microsoft.Extensions.Azure/src/Internal/AzureClientCredentialOptions{TClient}.cs b/sdk/extensions/Microsoft.Extensions.Azure/src/Internal/AzureClientCredentialOptions.cs
similarity index 100%
rename from sdk/extensions/Microsoft.Extensions.Azure/src/Internal/AzureClientCredentialOptions{TClient}.cs
rename to sdk/extensions/Microsoft.Extensions.Azure/src/Internal/AzureClientCredentialOptions.cs
diff --git a/sdk/extensions/Microsoft.Extensions.Azure/src/Internal/ClientRegistration{TClient}.cs b/sdk/extensions/Microsoft.Extensions.Azure/src/Internal/ClientRegistration.cs
similarity index 100%
rename from sdk/extensions/Microsoft.Extensions.Azure/src/Internal/ClientRegistration{TClient}.cs
rename to sdk/extensions/Microsoft.Extensions.Azure/src/Internal/ClientRegistration.cs
diff --git a/sdk/formrecognizer/Azure.AI.FormRecognizer/src/FormField{T}.cs b/sdk/formrecognizer/Azure.AI.FormRecognizer/src/FormFieldOfT.cs
similarity index 94%
rename from sdk/formrecognizer/Azure.AI.FormRecognizer/src/FormField{T}.cs
rename to sdk/formrecognizer/Azure.AI.FormRecognizer/src/FormFieldOfT.cs
index 79b82c8bdb61..135acf87b55e 100644
--- a/sdk/formrecognizer/Azure.AI.FormRecognizer/src/FormField{T}.cs
+++ b/sdk/formrecognizer/Azure.AI.FormRecognizer/src/FormFieldOfT.cs
@@ -7,7 +7,9 @@ namespace Azure.AI.FormRecognizer.Models
/// Represents a field recognized in the input form, where the field's value is of a known type.
///
/// The type of the value in the field this instance represents.
+#pragma warning disable SA1649 // File name should match first type name
public class FormField
+#pragma warning restore SA1649 // File name should match first type name
{
///
/// Initializes a new instance of the class.
diff --git a/sdk/keyvault/Azure.Security.KeyVault.Certificates/tests/CertificatesTestBase.cs b/sdk/keyvault/Azure.Security.KeyVault.Certificates/tests/CertificatesTestBase.cs
index 587a672be15c..bc1602162ded 100644
--- a/sdk/keyvault/Azure.Security.KeyVault.Certificates/tests/CertificatesTestBase.cs
+++ b/sdk/keyvault/Azure.Security.KeyVault.Certificates/tests/CertificatesTestBase.cs
@@ -17,7 +17,7 @@ namespace Azure.Security.KeyVault.Certificates.Tests
CertificateClientOptions.ServiceVersion.V7_0,
CertificateClientOptions.ServiceVersion.V7_1)]
[NonParallelizable]
- public class CertificatesTestBase : RecordedTestBase
+ public abstract class CertificatesTestBase : RecordedTestBase
{
protected readonly TimeSpan PollingInterval = TimeSpan.FromSeconds(5);
private readonly CertificateClientOptions.ServiceVersion _serviceVersion;
diff --git a/sdk/keyvault/samples/Directory.Build.props b/sdk/keyvault/samples/Directory.Build.props
index aac01a03d888..fe5aa561b019 100644
--- a/sdk/keyvault/samples/Directory.Build.props
+++ b/sdk/keyvault/samples/Directory.Build.props
@@ -3,6 +3,7 @@
true
false
+ true
false
diff --git a/sdk/search/Azure.Search.Documents/src/Batching/Publisher{T}.Message.cs b/sdk/search/Azure.Search.Documents/src/Batching/Publisher.Message.cs
similarity index 100%
rename from sdk/search/Azure.Search.Documents/src/Batching/Publisher{T}.Message.cs
rename to sdk/search/Azure.Search.Documents/src/Batching/Publisher.Message.cs
diff --git a/sdk/search/Azure.Search.Documents/src/Batching/Publisher{T}.MessageOperation.cs b/sdk/search/Azure.Search.Documents/src/Batching/Publisher.MessageOperation.cs
similarity index 100%
rename from sdk/search/Azure.Search.Documents/src/Batching/Publisher{T}.MessageOperation.cs
rename to sdk/search/Azure.Search.Documents/src/Batching/Publisher.MessageOperation.cs
diff --git a/sdk/search/Azure.Search.Documents/src/Batching/Publisher{T}.cs b/sdk/search/Azure.Search.Documents/src/Batching/Publisher.cs
similarity index 100%
rename from sdk/search/Azure.Search.Documents/src/Batching/Publisher{T}.cs
rename to sdk/search/Azure.Search.Documents/src/Batching/Publisher.cs
diff --git a/sdk/search/Azure.Search.Documents/src/Batching/PublisherAction{T}.cs b/sdk/search/Azure.Search.Documents/src/Batching/PublisherAction.cs
similarity index 100%
rename from sdk/search/Azure.Search.Documents/src/Batching/PublisherAction{T}.cs
rename to sdk/search/Azure.Search.Documents/src/Batching/PublisherAction.cs
diff --git a/sdk/search/Azure.Search.Documents/src/Batching/SearchIndexingBufferedSender{T}.cs b/sdk/search/Azure.Search.Documents/src/Batching/SearchIndexingBufferedSender.cs
similarity index 100%
rename from sdk/search/Azure.Search.Documents/src/Batching/SearchIndexingBufferedSender{T}.cs
rename to sdk/search/Azure.Search.Documents/src/Batching/SearchIndexingBufferedSender.cs
diff --git a/sdk/search/Azure.Search.Documents/src/Batching/SearchIndexingBufferedSenderOptions{T}.cs b/sdk/search/Azure.Search.Documents/src/Batching/SearchIndexingBufferedSenderOptions.cs
similarity index 100%
rename from sdk/search/Azure.Search.Documents/src/Batching/SearchIndexingBufferedSenderOptions{T}.cs
rename to sdk/search/Azure.Search.Documents/src/Batching/SearchIndexingBufferedSenderOptions.cs
diff --git a/sdk/search/Azure.Search.Documents/src/Batching/SearchIndexingPublisher{T}.cs b/sdk/search/Azure.Search.Documents/src/Batching/SearchIndexingPublisher.cs
similarity index 100%
rename from sdk/search/Azure.Search.Documents/src/Batching/SearchIndexingPublisher{T}.cs
rename to sdk/search/Azure.Search.Documents/src/Batching/SearchIndexingPublisher.cs
diff --git a/sdk/search/Azure.Search.Documents/src/Models/IndexDocumentsAction{T}.cs b/sdk/search/Azure.Search.Documents/src/Models/IndexDocumentsAction.cs
similarity index 100%
rename from sdk/search/Azure.Search.Documents/src/Models/IndexDocumentsAction{T}.cs
rename to sdk/search/Azure.Search.Documents/src/Models/IndexDocumentsAction.cs
diff --git a/sdk/search/Azure.Search.Documents/src/Models/IndexDocumentsBatch{T}.cs b/sdk/search/Azure.Search.Documents/src/Models/IndexDocumentsBatch.cs
similarity index 100%
rename from sdk/search/Azure.Search.Documents/src/Models/IndexDocumentsBatch{T}.cs
rename to sdk/search/Azure.Search.Documents/src/Models/IndexDocumentsBatch.cs
diff --git a/sdk/search/Azure.Search.Documents/src/Models/SearchResult{T}.cs b/sdk/search/Azure.Search.Documents/src/Models/SearchResult.cs
similarity index 100%
rename from sdk/search/Azure.Search.Documents/src/Models/SearchResult{T}.cs
rename to sdk/search/Azure.Search.Documents/src/Models/SearchResult.cs
diff --git a/sdk/search/Azure.Search.Documents/src/Models/SearchResults{T}.cs b/sdk/search/Azure.Search.Documents/src/Models/SearchResults.cs
similarity index 100%
rename from sdk/search/Azure.Search.Documents/src/Models/SearchResults{T}.cs
rename to sdk/search/Azure.Search.Documents/src/Models/SearchResults.cs
diff --git a/sdk/search/Azure.Search.Documents/src/Models/SearchSuggestion{T}.cs b/sdk/search/Azure.Search.Documents/src/Models/SearchSuggestion.cs
similarity index 100%
rename from sdk/search/Azure.Search.Documents/src/Models/SearchSuggestion{T}.cs
rename to sdk/search/Azure.Search.Documents/src/Models/SearchSuggestion.cs
diff --git a/sdk/search/Azure.Search.Documents/src/Models/SuggestResults{T}.cs b/sdk/search/Azure.Search.Documents/src/Models/SuggestResults.cs
similarity index 100%
rename from sdk/search/Azure.Search.Documents/src/Models/SuggestResults{T}.cs
rename to sdk/search/Azure.Search.Documents/src/Models/SuggestResults.cs
diff --git a/sdk/storage/Azure.Storage.Blobs.Batch/samples/Azure.Storage.Blobs.Batch.Samples.Tests.csproj b/sdk/storage/Azure.Storage.Blobs.Batch/samples/Azure.Storage.Blobs.Batch.Samples.Tests.csproj
index c6fce5bba393..748b67441b36 100644
--- a/sdk/storage/Azure.Storage.Blobs.Batch/samples/Azure.Storage.Blobs.Batch.Samples.Tests.csproj
+++ b/sdk/storage/Azure.Storage.Blobs.Batch/samples/Azure.Storage.Blobs.Batch.Samples.Tests.csproj
@@ -18,7 +18,7 @@
-
+
@@ -28,4 +28,4 @@
-
\ No newline at end of file
+
diff --git a/sdk/storage/Azure.Storage.Blobs.Batch/src/Azure.Storage.Blobs.Batch.csproj b/sdk/storage/Azure.Storage.Blobs.Batch/src/Azure.Storage.Blobs.Batch.csproj
index 94be97e4e3d1..0a253bed2dcd 100644
--- a/sdk/storage/Azure.Storage.Blobs.Batch/src/Azure.Storage.Blobs.Batch.csproj
+++ b/sdk/storage/Azure.Storage.Blobs.Batch/src/Azure.Storage.Blobs.Batch.csproj
@@ -27,7 +27,7 @@
-
+
@@ -40,4 +40,4 @@
-
\ No newline at end of file
+
diff --git a/sdk/storage/Azure.Storage.Blobs.ChangeFeed/samples/Azure.Storage.Blobs.ChangeFeed.Samples.Tests.csproj b/sdk/storage/Azure.Storage.Blobs.ChangeFeed/samples/Azure.Storage.Blobs.ChangeFeed.Samples.Tests.csproj
index f9990a28230b..404a6aa0b19f 100644
--- a/sdk/storage/Azure.Storage.Blobs.ChangeFeed/samples/Azure.Storage.Blobs.ChangeFeed.Samples.Tests.csproj
+++ b/sdk/storage/Azure.Storage.Blobs.ChangeFeed/samples/Azure.Storage.Blobs.ChangeFeed.Samples.Tests.csproj
@@ -17,7 +17,7 @@
-
+
@@ -27,4 +27,4 @@
-
\ No newline at end of file
+
diff --git a/sdk/storage/Azure.Storage.Blobs/samples/Azure.Storage.Blobs.Samples.Tests.csproj b/sdk/storage/Azure.Storage.Blobs/samples/Azure.Storage.Blobs.Samples.Tests.csproj
index a3f5a9b16a70..cef761108ee3 100644
--- a/sdk/storage/Azure.Storage.Blobs/samples/Azure.Storage.Blobs.Samples.Tests.csproj
+++ b/sdk/storage/Azure.Storage.Blobs/samples/Azure.Storage.Blobs.Samples.Tests.csproj
@@ -18,7 +18,7 @@
-
+
@@ -28,4 +28,4 @@
-
\ No newline at end of file
+
diff --git a/sdk/storage/Azure.Storage.Blobs/src/Azure.Storage.Blobs.csproj b/sdk/storage/Azure.Storage.Blobs/src/Azure.Storage.Blobs.csproj
index 5c7b2610b6d9..b7dff2a1809a 100644
--- a/sdk/storage/Azure.Storage.Blobs/src/Azure.Storage.Blobs.csproj
+++ b/sdk/storage/Azure.Storage.Blobs/src/Azure.Storage.Blobs.csproj
@@ -32,7 +32,7 @@
-
+
diff --git a/sdk/storage/Azure.Storage.Common/samples/Azure.Storage.Common.Samples.Tests.csproj b/sdk/storage/Azure.Storage.Common/samples/Azure.Storage.Common.Samples.Tests.csproj
index 29cfb206a9fa..be0ed02d2abb 100644
--- a/sdk/storage/Azure.Storage.Common/samples/Azure.Storage.Common.Samples.Tests.csproj
+++ b/sdk/storage/Azure.Storage.Common/samples/Azure.Storage.Common.Samples.Tests.csproj
@@ -20,7 +20,7 @@
-
+
@@ -30,4 +30,4 @@
-
\ No newline at end of file
+
diff --git a/sdk/storage/Azure.Storage.Common/src/Azure.Storage.Common.csproj b/sdk/storage/Azure.Storage.Common/src/Azure.Storage.Common.csproj
index 26cb1619e19b..cc3d345be83b 100644
--- a/sdk/storage/Azure.Storage.Common/src/Azure.Storage.Common.csproj
+++ b/sdk/storage/Azure.Storage.Common/src/Azure.Storage.Common.csproj
@@ -21,7 +21,7 @@
-
+
@@ -42,4 +42,4 @@
-
\ No newline at end of file
+
diff --git a/sdk/storage/Azure.Storage.Files.DataLake/samples/Azure.Storage.Files.DataLake.Samples.Tests.csproj b/sdk/storage/Azure.Storage.Files.DataLake/samples/Azure.Storage.Files.DataLake.Samples.Tests.csproj
index a24ed0607292..b9f7eb5a138e 100644
--- a/sdk/storage/Azure.Storage.Files.DataLake/samples/Azure.Storage.Files.DataLake.Samples.Tests.csproj
+++ b/sdk/storage/Azure.Storage.Files.DataLake/samples/Azure.Storage.Files.DataLake.Samples.Tests.csproj
@@ -17,7 +17,7 @@
-
+
@@ -27,4 +27,4 @@
-
\ No newline at end of file
+
diff --git a/sdk/storage/Azure.Storage.Files.DataLake/src/Azure.Storage.Files.DataLake.csproj b/sdk/storage/Azure.Storage.Files.DataLake/src/Azure.Storage.Files.DataLake.csproj
index 1abb61315f79..7c893e8e2b8a 100644
--- a/sdk/storage/Azure.Storage.Files.DataLake/src/Azure.Storage.Files.DataLake.csproj
+++ b/sdk/storage/Azure.Storage.Files.DataLake/src/Azure.Storage.Files.DataLake.csproj
@@ -30,7 +30,7 @@
-
+
@@ -70,4 +70,4 @@
-
\ No newline at end of file
+
diff --git a/sdk/storage/Azure.Storage.Files.Shares/samples/Azure.Storage.Files.Shares.Samples.Tests.csproj b/sdk/storage/Azure.Storage.Files.Shares/samples/Azure.Storage.Files.Shares.Samples.Tests.csproj
index deae88375ee2..6bcef8bee566 100644
--- a/sdk/storage/Azure.Storage.Files.Shares/samples/Azure.Storage.Files.Shares.Samples.Tests.csproj
+++ b/sdk/storage/Azure.Storage.Files.Shares/samples/Azure.Storage.Files.Shares.Samples.Tests.csproj
@@ -17,7 +17,7 @@
-
+
@@ -27,4 +27,4 @@
-
\ No newline at end of file
+
diff --git a/sdk/storage/Azure.Storage.Files.Shares/src/Azure.Storage.Files.Shares.csproj b/sdk/storage/Azure.Storage.Files.Shares/src/Azure.Storage.Files.Shares.csproj
index e998ed2ffc52..c39ace343a05 100644
--- a/sdk/storage/Azure.Storage.Files.Shares/src/Azure.Storage.Files.Shares.csproj
+++ b/sdk/storage/Azure.Storage.Files.Shares/src/Azure.Storage.Files.Shares.csproj
@@ -29,7 +29,7 @@
-
+
@@ -69,4 +69,4 @@
-
\ No newline at end of file
+
diff --git a/sdk/storage/Azure.Storage.Queues/samples/Azure.Storage.Queues.Samples.Tests.csproj b/sdk/storage/Azure.Storage.Queues/samples/Azure.Storage.Queues.Samples.Tests.csproj
index 27bfcca87139..cfe401234c03 100644
--- a/sdk/storage/Azure.Storage.Queues/samples/Azure.Storage.Queues.Samples.Tests.csproj
+++ b/sdk/storage/Azure.Storage.Queues/samples/Azure.Storage.Queues.Samples.Tests.csproj
@@ -17,7 +17,7 @@
-
+
@@ -27,4 +27,4 @@
-
\ No newline at end of file
+
diff --git a/sdk/storage/Azure.Storage.Queues/src/Azure.Storage.Queues.csproj b/sdk/storage/Azure.Storage.Queues/src/Azure.Storage.Queues.csproj
index 0934c04db157..3e27e4531cb2 100644
--- a/sdk/storage/Azure.Storage.Queues/src/Azure.Storage.Queues.csproj
+++ b/sdk/storage/Azure.Storage.Queues/src/Azure.Storage.Queues.csproj
@@ -29,7 +29,7 @@
-
+
@@ -58,4 +58,4 @@
-
\ No newline at end of file
+
diff --git a/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Blobs/src/StorageBlobConverter{T}.cs b/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Blobs/src/StorageBlobConverter.cs
similarity index 100%
rename from sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Blobs/src/StorageBlobConverter{T}.cs
rename to sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Blobs/src/StorageBlobConverter.cs
diff --git a/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Common/tests/ExpectManualCompletionLogger{TResult}.cs b/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Common/tests/ExpectManualCompletionLogger.cs
similarity index 100%
rename from sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Common/tests/ExpectManualCompletionLogger{TResult}.cs
rename to sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Common/tests/ExpectManualCompletionLogger.cs
diff --git a/sdk/tables/Azure.Data.Tables/src/Azure.Data.Tables.csproj b/sdk/tables/Azure.Data.Tables/src/Azure.Data.Tables.csproj
index ac3f50440658..80a68edfb1cf 100644
--- a/sdk/tables/Azure.Data.Tables/src/Azure.Data.Tables.csproj
+++ b/sdk/tables/Azure.Data.Tables/src/Azure.Data.Tables.csproj
@@ -16,7 +16,7 @@
-
+
diff --git a/sdk/tables/Azure.Data.Tables/src/Queryable/ReferenceEqualityComparer{T}.cs b/sdk/tables/Azure.Data.Tables/src/Queryable/ReferenceEqualityComparerOfT.cs
similarity index 90%
rename from sdk/tables/Azure.Data.Tables/src/Queryable/ReferenceEqualityComparer{T}.cs
rename to sdk/tables/Azure.Data.Tables/src/Queryable/ReferenceEqualityComparerOfT.cs
index 0ab50f7d587b..508a5c8bf73f 100644
--- a/sdk/tables/Azure.Data.Tables/src/Queryable/ReferenceEqualityComparer{T}.cs
+++ b/sdk/tables/Azure.Data.Tables/src/Queryable/ReferenceEqualityComparerOfT.cs
@@ -7,7 +7,9 @@
namespace Azure.Data.Tables.Queryable
{
+#pragma warning disable SA1649 // File name should match first type name
internal sealed class ReferenceEqualityComparer : ReferenceEqualityComparer, IEqualityComparer
+#pragma warning restore SA1649 // File name should match first type name
{
private static ReferenceEqualityComparer s_instance;