未验证 提交 333dc835 编写于 作者: T Tomáš Matoušek 提交者: GitHub

Merge pull request #22975 from dotnet/merges/master-to-dev15.5.x-20171102-070014

Merge master to dev15.5.x
...@@ -82,7 +82,7 @@ Some of the best ways to contribute are to try things out, file bugs, and join i ...@@ -82,7 +82,7 @@ Some of the best ways to contribute are to try things out, file bugs, and join i
* [How to Contribute](https://github.com/dotnet/roslyn/wiki/Contributing-Code) * [How to Contribute](https://github.com/dotnet/roslyn/wiki/Contributing-Code)
* [Pull requests](https://github.com/dotnet/roslyn/pulls): [Open](https://github.com/dotnet/roslyn/pulls?q=is%3Aopen+is%3Apr)/[Closed](https://github.com/dotnet/roslyn/pulls?q=is%3Apr+is%3Aclosed) * [Pull requests](https://github.com/dotnet/roslyn/pulls): [Open](https://github.com/dotnet/roslyn/pulls?q=is%3Aopen+is%3Apr)/[Closed](https://github.com/dotnet/roslyn/pulls?q=is%3Apr+is%3Aclosed)
Looking for something to work on? The list of [up for grabs issues](https://github.com/dotnet/roslyn/labels/up-for-grabs) is a great place to start. Looking for something to work on? The list of [up for grabs issues](https://github.com/dotnet/roslyn/labels/help%20wanted) is a great place to start.
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
......
...@@ -293,16 +293,6 @@ ...@@ -293,16 +293,6 @@
<Import Project="GenerateInternalsVisibleTo.targets" /> <Import Project="GenerateInternalsVisibleTo.targets" />
<Import Project="DisableTransitiveReferences.targets" Condition="'$(RoslynProjectType)' == 'Vsix' AND '$(RoslynSdkProject)' == 'true'" /> <Import Project="DisableTransitiveReferences.targets" Condition="'$(RoslynProjectType)' == 'Vsix' AND '$(RoslynSdkProject)' == 'true'" />
<!--
Work around some UI delays in the new project system
https://github.com/dotnet/project-system/issues/2297
-->
<ItemGroup>
<ProjectCapability Remove="DependenciesTree"/>
</ItemGroup>
<ItemDefinitionGroup> <ItemDefinitionGroup>
<VSIXSourceItem> <VSIXSourceItem>
<Visible>false</Visible> <Visible>false</Visible>
......
...@@ -35,6 +35,7 @@ param ( ...@@ -35,6 +35,7 @@ param (
[switch]$testVsiNetCore = $false, [switch]$testVsiNetCore = $false,
[switch]$testDesktop = $false, [switch]$testDesktop = $false,
[switch]$testCoreClr = $false, [switch]$testCoreClr = $false,
[switch]$testIOperation = $false,
# Special test options # Special test options
[switch]$testDeterminism = $false, [switch]$testDeterminism = $false,
...@@ -66,6 +67,7 @@ function Print-Usage() { ...@@ -66,6 +67,7 @@ function Print-Usage() {
Write-Host " -testCoreClr Run CoreClr unit tests" Write-Host " -testCoreClr Run CoreClr unit tests"
Write-Host " -testVsi Run all integration tests" Write-Host " -testVsi Run all integration tests"
Write-Host " -testVsiNetCore Run just dotnet core integration tests" Write-Host " -testVsiNetCore Run just dotnet core integration tests"
Write-Host " -testIOperation Run extra checks to validate IOperations"
Write-Host "" Write-Host ""
Write-Host "Special Test options" Write-Host "Special Test options"
Write-Host " -testBuildCorrectness Run build correctness tests" Write-Host " -testBuildCorrectness Run build correctness tests"
...@@ -141,6 +143,11 @@ function Run-MSBuild([string]$buildArgs = "", [string]$logFile = "", [switch]$pa ...@@ -141,6 +143,11 @@ function Run-MSBuild([string]$buildArgs = "", [string]$logFile = "", [switch]$pa
$args += " /p:BootstrapBuildPath=$bootstrapDir" $args += " /p:BootstrapBuildPath=$bootstrapDir"
} }
if ($testIOperation)
{
$args += " /p:TestIOperationInterface=true"
}
$args += " $buildArgs" $args += " $buildArgs"
Exec-Console $msbuild $args Exec-Console $msbuild $args
} }
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using Microsoft.CodeAnalysis.CodeGen; using Microsoft.CodeAnalysis.CodeGen;
using Microsoft.CodeAnalysis.CSharp.Emit; using Microsoft.CodeAnalysis.CSharp.Emit;
...@@ -514,11 +514,13 @@ public static SyntaxTree ParseWithRoundTripCheck(string text, CSharpParseOptions ...@@ -514,11 +514,13 @@ public static SyntaxTree ParseWithRoundTripCheck(string text, CSharpParseOptions
options = options.WithConcurrentBuild(false); options = options.WithConcurrentBuild(false);
} }
return CSharpCompilation.Create( Func<CSharpCompilation> createCompilationLambda = () => CSharpCompilation.Create(
assemblyName == "" ? GetUniqueName() : assemblyName, assemblyName == "" ? GetUniqueName() : assemblyName,
trees, trees,
references, references,
options); options);
CompilationExtensions.ValidateIOperations(createCompilationLambda);
return createCompilationLambda();
} }
public static CSharpCompilation CreateCompilation( public static CSharpCompilation CreateCompilation(
...@@ -529,7 +531,10 @@ public static SyntaxTree ParseWithRoundTripCheck(string text, CSharpParseOptions ...@@ -529,7 +531,10 @@ public static SyntaxTree ParseWithRoundTripCheck(string text, CSharpParseOptions
CSharpParseOptions parseOptions = null) CSharpParseOptions parseOptions = null)
{ {
var trees = (sources == null) ? null : sources.Select(s => Parse(s, options: parseOptions)).ToArray(); var trees = (sources == null) ? null : sources.Select(s => Parse(s, options: parseOptions)).ToArray();
var c = CSharpCompilation.Create(identity.Name, options: options ?? TestOptions.ReleaseDll, references: references, syntaxTrees: trees); Func<CSharpCompilation> createCompilationLambda = () => CSharpCompilation.Create(identity.Name, options: options ?? TestOptions.ReleaseDll, references: references, syntaxTrees: trees);
CompilationExtensions.ValidateIOperations(createCompilationLambda);
var c = createCompilationLambda();
Assert.NotNull(c.Assembly); // force creation of SourceAssemblySymbol Assert.NotNull(c.Assembly); // force creation of SourceAssemblySymbol
((SourceAssemblySymbol)c.Assembly).lazyAssemblyIdentity = identity; ((SourceAssemblySymbol)c.Assembly).lazyAssemblyIdentity = identity;
...@@ -545,7 +550,7 @@ public static SyntaxTree ParseWithRoundTripCheck(string text, CSharpParseOptions ...@@ -545,7 +550,7 @@ public static SyntaxTree ParseWithRoundTripCheck(string text, CSharpParseOptions
Type returnType = null, Type returnType = null,
Type hostObjectType = null) Type hostObjectType = null)
{ {
return CSharpCompilation.CreateScriptCompilation( Func<CSharpCompilation> createCompilationLambda = () => CSharpCompilation.CreateScriptCompilation(
GetUniqueName(), GetUniqueName(),
references: references, references: references,
options: options, options: options,
...@@ -553,6 +558,8 @@ public static SyntaxTree ParseWithRoundTripCheck(string text, CSharpParseOptions ...@@ -553,6 +558,8 @@ public static SyntaxTree ParseWithRoundTripCheck(string text, CSharpParseOptions
previousScriptCompilation: previous, previousScriptCompilation: previous,
returnType: returnType, returnType: returnType,
globalsType: hostObjectType); globalsType: hostObjectType);
CompilationExtensions.ValidateIOperations(createCompilationLambda);
return createCompilationLambda();
} }
private static ImmutableArray<MetadataReference> s_scriptRefs = ImmutableArray.Create(MscorlibRef_v4_0_30316_17626); private static ImmutableArray<MetadataReference> s_scriptRefs = ImmutableArray.Create(MscorlibRef_v4_0_30316_17626);
...@@ -566,7 +573,7 @@ public static SyntaxTree ParseWithRoundTripCheck(string text, CSharpParseOptions ...@@ -566,7 +573,7 @@ public static SyntaxTree ParseWithRoundTripCheck(string text, CSharpParseOptions
Type returnType = null, Type returnType = null,
Type hostObjectType = null) Type hostObjectType = null)
{ {
return CSharpCompilation.CreateScriptCompilation( Func<CSharpCompilation> createCompilationLambda = () => CSharpCompilation.CreateScriptCompilation(
GetUniqueName(), GetUniqueName(),
references: (references != null) ? s_scriptRefs.Concat(references) : s_scriptRefs, references: (references != null) ? s_scriptRefs.Concat(references) : s_scriptRefs,
options: options, options: options,
...@@ -574,6 +581,8 @@ public static SyntaxTree ParseWithRoundTripCheck(string text, CSharpParseOptions ...@@ -574,6 +581,8 @@ public static SyntaxTree ParseWithRoundTripCheck(string text, CSharpParseOptions
previousScriptCompilation: previous, previousScriptCompilation: previous,
returnType: returnType, returnType: returnType,
globalsType: hostObjectType); globalsType: hostObjectType);
CompilationExtensions.ValidateIOperations(createCompilationLambda);
return createCompilationLambda();
} }
public CompilationVerifier CompileWithCustomILSource(string cSharpSource, string ilSource, Action<CSharpCompilation> compilationVerifier = null, bool importInternals = true, string expectedOutput = null) public CompilationVerifier CompileWithCustomILSource(string cSharpSource, string ilSource, Action<CSharpCompilation> compilationVerifier = null, bool importInternals = true, string expectedOutput = null)
......
' Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. ' Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
Imports System.Collections.Immutable Imports System.Collections.Immutable
Imports System.Globalization Imports System.Globalization
...@@ -34,12 +34,17 @@ Friend Module CompilationUtils ...@@ -34,12 +34,17 @@ Friend Module CompilationUtils
options = options.WithConcurrentBuild(False) options = options.WithConcurrentBuild(False)
End If End If
Dim createCompilationLambda = Function()
Return VisualBasicCompilation.Create( Return VisualBasicCompilation.Create(
If(assemblyName, GetUniqueName()), If(assemblyName, GetUniqueName()),
sourceTrees, sourceTrees,
references, references,
options) options)
End Function End Function
CompilationExtensions.ValidateIOperations(createCompilationLambda)
Return createCompilationLambda()
End Function
Public Function CreateCompilation(sources As IEnumerable(Of String), Public Function CreateCompilation(sources As IEnumerable(Of String),
Optional references As IEnumerable(Of MetadataReference) = Nothing, Optional references As IEnumerable(Of MetadataReference) = Nothing,
...@@ -67,14 +72,14 @@ Friend Module CompilationUtils ...@@ -67,14 +72,14 @@ Friend Module CompilationUtils
Dim metadataReferences = If(references Is Nothing, {MscorlibRef}, {MscorlibRef}.Concat(references)) Dim metadataReferences = If(references Is Nothing, {MscorlibRef}, {MscorlibRef}.Concat(references))
assemblyName = If(assemblyName, GetUniqueName()) assemblyName = If(assemblyName, GetUniqueName())
#If Test_IOperation_Interface Then Dim createCompilationLambda = Function()
Dim compilationForOperationWalking = VisualBasicCompilation.Create(assemblyName, sourceTrees, metadataReferences, options)
WalkOperationTrees(compilationForOperationWalking)
#End If
Return VisualBasicCompilation.Create(assemblyName, sourceTrees, metadataReferences, options) Return VisualBasicCompilation.Create(assemblyName, sourceTrees, metadataReferences, options)
End Function End Function
CompilationExtensions.ValidateIOperations(createCompilationLambda)
Return createCompilationLambda()
End Function
Public Function CreateCompilationWithMscorlib(sources As IEnumerable(Of String), Public Function CreateCompilationWithMscorlib(sources As IEnumerable(Of String),
Optional references As IEnumerable(Of MetadataReference) = Nothing, Optional references As IEnumerable(Of MetadataReference) = Nothing,
Optional options As VisualBasicCompilationOptions = Nothing, Optional options As VisualBasicCompilationOptions = Nothing,
...@@ -98,8 +103,13 @@ Friend Module CompilationUtils ...@@ -98,8 +103,13 @@ Friend Module CompilationUtils
Optional options As VisualBasicCompilationOptions = Nothing, Optional options As VisualBasicCompilationOptions = Nothing,
Optional assemblyName As String = Nothing) As VisualBasicCompilation Optional assemblyName As String = Nothing) As VisualBasicCompilation
Dim additionalRefs = {MscorlibRef_v4_0_30316_17626} Dim additionalRefs = {MscorlibRef_v4_0_30316_17626}
Dim createCompilationLambda = Function()
Return VisualBasicCompilation.Create(If(assemblyName, GetUniqueName()), sourceTrees, If(references Is Nothing, additionalRefs, additionalRefs.Concat(references)), options) Return VisualBasicCompilation.Create(If(assemblyName, GetUniqueName()), sourceTrees, If(references Is Nothing, additionalRefs, additionalRefs.Concat(references)), options)
End Function End Function
CompilationExtensions.ValidateIOperations(createCompilationLambda)
Return createCompilationLambda()
End Function
Public Function CreateCompilationWithMscorlib45(source As String, Public Function CreateCompilationWithMscorlib45(source As String,
Optional references As IEnumerable(Of MetadataReference) = Nothing, Optional references As IEnumerable(Of MetadataReference) = Nothing,
...@@ -107,21 +117,33 @@ Friend Module CompilationUtils ...@@ -107,21 +117,33 @@ Friend Module CompilationUtils
Optional assemblyName As String = Nothing, Optional assemblyName As String = Nothing,
Optional parseOptions As VisualBasicParseOptions = Nothing) As VisualBasicCompilation Optional parseOptions As VisualBasicParseOptions = Nothing) As VisualBasicCompilation
Dim additionalRefs = {MscorlibRef_v4_0_30316_17626} Dim additionalRefs = {MscorlibRef_v4_0_30316_17626}
Dim createCompilationLambda = Function()
Return VisualBasicCompilation.Create(If(assemblyName, GetUniqueName()), {Parse(source, parseOptions)}, If(references Is Nothing, additionalRefs, additionalRefs.Concat(references)), options) Return VisualBasicCompilation.Create(If(assemblyName, GetUniqueName()), {Parse(source, parseOptions)}, If(references Is Nothing, additionalRefs, additionalRefs.Concat(references)), options)
End Function End Function
CompilationExtensions.ValidateIOperations(createCompilationLambda)
Return createCompilationLambda()
End Function
Public Function CreateCompilationWithMscorlib45AndVBRuntime(sourceTrees As IEnumerable(Of SyntaxTree), Public Function CreateCompilationWithMscorlib45AndVBRuntime(sourceTrees As IEnumerable(Of SyntaxTree),
Optional references As IEnumerable(Of MetadataReference) = Nothing, Optional references As IEnumerable(Of MetadataReference) = Nothing,
Optional options As VisualBasicCompilationOptions = Nothing) As VisualBasicCompilation Optional options As VisualBasicCompilationOptions = Nothing) As VisualBasicCompilation
Dim additionalRefs = {MscorlibRef_v4_0_30316_17626, MsvbRef_v4_0_30319_17929} Dim additionalRefs = {MscorlibRef_v4_0_30316_17626, MsvbRef_v4_0_30319_17929}
Dim createCompilationLambda = Function()
Return VisualBasicCompilation.Create(GetUniqueName(), sourceTrees, If(references Is Nothing, additionalRefs, additionalRefs.Concat(references)), options) Return VisualBasicCompilation.Create(GetUniqueName(), sourceTrees, If(references Is Nothing, additionalRefs, additionalRefs.Concat(references)), options)
End Function End Function
CompilationExtensions.ValidateIOperations(createCompilationLambda)
Return createCompilationLambda()
End Function
Public Function CreateCompilationWithMscorlib(sourceTree As SyntaxTree, Public Function CreateCompilationWithMscorlib(sourceTree As SyntaxTree,
Optional references As IEnumerable(Of MetadataReference) = Nothing, Optional references As IEnumerable(Of MetadataReference) = Nothing,
Optional options As VisualBasicCompilationOptions = Nothing) As VisualBasicCompilation Optional options As VisualBasicCompilationOptions = Nothing) As VisualBasicCompilation
Dim createCompilationLambda = Function()
Return VisualBasicCompilation.Create(GetUniqueName(), {sourceTree}, If(references Is Nothing, {MscorlibRef}, {MscorlibRef}.Concat(references)), options) Return VisualBasicCompilation.Create(GetUniqueName(), {sourceTree}, If(references Is Nothing, {MscorlibRef}, {MscorlibRef}.Concat(references)), options)
End Function End Function
CompilationExtensions.ValidateIOperations(createCompilationLambda)
Return createCompilationLambda()
End Function
Public Function CreateWinRtCompilation(text As XElement) As VisualBasicCompilation Public Function CreateWinRtCompilation(text As XElement) As VisualBasicCompilation
...@@ -308,14 +330,12 @@ Friend Module CompilationUtils ...@@ -308,14 +330,12 @@ Friend Module CompilationUtils
options = options.WithConcurrentBuild(False) options = options.WithConcurrentBuild(False)
End If End If
End If End If
Dim createCompilationLambda = Function()
#If Test_IOperation_Interface Then
Dim compilationForOperationWalking = VisualBasicCompilation.Create(If(assemblyName, GetUniqueName()), sourceTrees, references, options)
WalkOperationTrees(compilationForOperationWalking)
#End If
Return VisualBasicCompilation.Create(If(assemblyName, GetUniqueName()), sourceTrees, references, options) Return VisualBasicCompilation.Create(If(assemblyName, GetUniqueName()), sourceTrees, references, options)
End Function End Function
CompilationExtensions.ValidateIOperations(createCompilationLambda)
Return createCompilationLambda()
End Function
''' <param name="sources">The sources compile according to the following schema ''' <param name="sources">The sources compile according to the following schema
''' &lt;compilation name="assemblyname[optional]"&gt; ''' &lt;compilation name="assemblyname[optional]"&gt;
...@@ -337,34 +357,17 @@ Friend Module CompilationUtils ...@@ -337,34 +357,17 @@ Friend Module CompilationUtils
Optional options As VisualBasicCompilationOptions = Nothing) As VisualBasicCompilation Optional options As VisualBasicCompilationOptions = Nothing) As VisualBasicCompilation
Dim trees = If(sources Is Nothing, Nothing, sources.Select(AddressOf VisualBasicSyntaxTree.ParseText).ToArray()) Dim trees = If(sources Is Nothing, Nothing, sources.Select(AddressOf VisualBasicSyntaxTree.ParseText).ToArray())
Dim c = VisualBasicCompilation.Create(identity.Name, trees, references, options) Dim createCompilationLambda = Function()
Return VisualBasicCompilation.Create(identity.Name, trees, references, options)
End Function
CompilationExtensions.ValidateIOperations(createCompilationLambda)
Dim c = createCompilationLambda()
Assert.NotNull(c.Assembly) ' force creation of SourceAssemblySymbol Assert.NotNull(c.Assembly) ' force creation of SourceAssemblySymbol
DirectCast(c.Assembly, SourceAssemblySymbol).m_lazyIdentity = identity DirectCast(c.Assembly, SourceAssemblySymbol).m_lazyIdentity = identity
Return c Return c
End Function End Function
#If Test_IOperation_Interface Then
Private Sub WalkOperationTrees(compilation As VisualBasicCompilation)
Dim operationWalker = TestOperationWalker.GetInstance()
For Each tree In compilation.SyntaxTrees
Dim semanticModel = compilation.GetSemanticModel(tree)
Dim root = tree.GetRoot()
' need to check other operation root as well (property, etc)
For Each methodNode As MethodBlockBaseSyntax In root.DescendantNodesAndSelf().OfType(Of MethodBlockBaseSyntax)
' Have to iterate through statements because a bug:
' https://github.com/dotnet/roslyn/issues/8919
For Each statement In methodNode.Statements
Dim operation = semanticModel.GetOperation(statement)
operationWalker.Visit(operation)
Next
Next
Next
End Sub
#End If
''' <summary> ''' <summary>
''' '''
''' </summary> ''' </summary>
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
...@@ -251,5 +251,27 @@ internal static bool CanHaveExecutableCodeBlock(ISymbol symbol) ...@@ -251,5 +251,27 @@ internal static bool CanHaveExecutableCodeBlock(ISymbol symbol)
} }
} }
public static void ValidateIOperations(Func<Compilation> createCompilation)
{
#if TEST_IOPERATION_INTERFACE
var compilation = createCompilation();
foreach (var tree in compilation.SyntaxTrees)
{
var semanticModel = compilation.GetSemanticModel(tree);
var root = tree.GetRoot();
foreach (var node in root.DescendantNodesAndSelf())
{
var operation = semanticModel.GetOperationInternal(node);
if (operation != null)
{
// Make sure IOperation returned by GetOperation(syntaxnode) will have same syntaxnode as the given syntaxnode(IOperation.Syntax == syntaxnode).
Assert.True(node == operation.Syntax, $"Expected : {node} - Actual : {operation.Syntax}");
}
}
}
#endif
}
} }
} }
...@@ -23,6 +23,9 @@ ...@@ -23,6 +23,9 @@
</ItemGroup> </ItemGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'" />
<PropertyGroup Condition="'$(TestIOperationInterface)' == 'true'">
<DefineConstants>$(DefineConstants);TEST_IOPERATION_INTERFACE</DefineConstants>
</PropertyGroup>
<ItemGroup> <ItemGroup>
<InternalsVisibleToTest Include="Roslyn.Test.Utilities.CoreClr" /> <InternalsVisibleToTest Include="Roslyn.Test.Utilities.CoreClr" />
<InternalsVisibleToTest Include="Roslyn.Test.Utilities.Desktop" /> <InternalsVisibleToTest Include="Roslyn.Test.Utilities.Desktop" />
......
...@@ -6,7 +6,7 @@ This is a tool to validate the state of our solutions, project files and other b ...@@ -6,7 +6,7 @@ This is a tool to validate the state of our solutions, project files and other b
> BuildBoss.exe <solution / project / targets path / build log paths> > BuildBoss.exe <solution / project / targets path / build log paths>
``` ```
This tool is run on every CI job against our important solution files: [Roslyn.sln](https://github.com/dotnet/roslyn/blob/master/Roslyn.sln), [CrossPlatform.sln](https://github.com/dotnet/roslyn/blob/master/CrossPlatform.sln) and [Samples.sln)(https://github.com/dotnet/roslyn/blob/master/src/Samples/Samples.sln). This tool is run on every CI job against our important solution files: [Roslyn.sln](https://github.com/dotnet/roslyn/blob/master/Roslyn.sln), [CrossPlatform.sln](https://github.com/dotnet/roslyn/blob/master/CrossPlatform.sln) and [Samples.sln](https://github.com/dotnet/roslyn/blob/master/src/Samples/Samples.sln).
Violations reported are important to fix as they represent correctness issues in our build. Many of the properties verified represent problems that otherwise won't be verified at check in time. Violations reported are important to fix as they represent correctness issues in our build. Many of the properties verified represent problems that otherwise won't be verified at check in time.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册