提交 af3c6740 编写于 作者: T Ty Overby

Merge pull request #5398 from TyOverby/4578-wildcard-deterministic

Ban assembly versions with wildcards in deterministic builds
......@@ -2073,7 +2073,7 @@ private void DecodeWellKnownAttribute(ref DecodeWellKnownAttributeArguments<Attr
{
string verString = (string)attribute.CommonConstructorArguments[0].Value;
Version version;
if (!VersionHelper.TryParseAssemblyVersion(verString, allowWildcard: true, version: out version))
if (!VersionHelper.TryParseAssemblyVersion(verString, allowWildcard: !_compilation.IsEmitDeterministic, version: out version))
{
Location attributeArgumentSyntaxLocation = attribute.GetAttributeArgumentSyntaxLocation(0, arguments.AttributeSyntaxOpt);
arguments.Diagnostics.Add(ErrorCode.ERR_InvalidVersionFormat, attributeArgumentSyntaxLocation);
......
......@@ -51,6 +51,21 @@ private ImmutableArray<byte> EmitDeterministic(string source, Platform platform,
return compilation.EmitToArray(EmitOptions.Default.WithDebugInformationFormat(pdbFormat), pdbStream: new MemoryStream());
}
[Fact, WorkItem(4578, "https://github.com/dotnet/roslyn/issues/4578")]
public void BanVersionWildcards()
{
string source = @"[assembly: System.Reflection.AssemblyVersion(""10101.0.*"")] public class C {}";
var compilationDeterministic = CreateCompilation(source, assemblyName: "DeterminismTest", references: new[] { MscorlibRef },
parseOptions: TestOptions.Regular.WithFeature("deterministic", "true"));
var compilationNonDeterministic = CreateCompilation(source, assemblyName: "DeterminismTest", references: new[] { MscorlibRef });
var resultDeterministic = compilationDeterministic.Emit(Stream.Null, Stream.Null);
var resultNonDeterministic = compilationNonDeterministic.Emit(Stream.Null, Stream.Null);
Assert.False(resultDeterministic.Success);
Assert.True(resultNonDeterministic.Success);
}
[Fact, WorkItem(372, "https://github.com/dotnet/roslyn/issues/372")]
public void Simple()
{
......
......@@ -998,7 +998,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Symbols
ElseIf attrData.IsTargetAttribute(Me, AttributeDescription.AssemblyVersionAttribute) Then
Dim verString = DirectCast(attrData.CommonConstructorArguments(0).Value, String)
Dim version As Version = Nothing
If Not VersionHelper.TryParseAssemblyVersion(verString, allowWildcard:=True, version:=version) Then
If Not VersionHelper.TryParseAssemblyVersion(verString, allowWildcard:=Not _compilation.IsEmitDeterministic, version:=version) Then
arguments.Diagnostics.Add(ERRID.ERR_InvalidVersionFormat, GetAssemblyAttributeFirstArgumentLocation(arguments.AttributeSyntaxOpt))
End If
arguments.GetOrCreateData(Of CommonAssemblyWellKnownAttributeData)().AssemblyVersionAttributeSetting = version
......
' 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
Imports System.IO
Imports System.Collections.Generic
Imports System.Collections.Immutable
Imports System.Threading
......@@ -25,6 +26,25 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.UnitTests.Emit
Return compilation.EmitToArray()
End Function
<Fact>
Public Sub BanVersionWildcards()
Dim source =
"<assembly: System.Reflection.AssemblyVersion(""10101.0.*"")>
Class C
Shared Sub Main()
End Sub
End Class"
Dim compilationDeterministic = CreateCompilationWithMscorlib({source}, assemblyName:="DeterminismTest",
parseOptions:=TestOptions.Regular.WithFeature("deterministic", "true"))
Dim compilationNonDeterministic = CreateCompilationWithMscorlib({source}, assemblyName:="DeterminismTest")
Dim resultDeterministic = compilationDeterministic.Emit(Stream.Null, Stream.Null)
Dim resultNonDeterministic = compilationNonDeterministic.Emit(Stream.Null, Stream.Null)
Assert.False(resultDeterministic.Success)
Assert.True(resultNonDeterministic.Success)
End Sub
<Fact>
Public Sub CompareAllBytesEmitted_Release()
Dim source =
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册