未验证 提交 611d2491 编写于 作者: J Jared Parsons 提交者: GitHub

Merge pull request #25213 from jaredpar/fix-ns

Move more test projects to net461
......@@ -425,6 +425,21 @@
Condition="'$(UsingMicrosoftNETSdk)' == ''" />
</Target>
<!--
This target is used to copy referenced projects to a sub-directory vs. the direct output
directory of the build. Useful when the referenced project is an EXE and the referencing
project uses an incompatible targetframework
-->
<Target Name="CopyReferencedProjectsToDependenciesDirectory" Condition="'@(RoslynReferenceToDependencyDirectory)' != ''" AfterTargets="ResolveProjectReferences">
<PropertyGroup>
<_RoslynReferenceOutputPath>@(RoslynReferenceToDependencyDirectory->'%(RootDir)%(Directory)')</_RoslynReferenceOutputPath>
</PropertyGroup>
<ItemGroup>
<_RoslynReferenceContent Include="$(_RoslynReferenceOutputPath)*.*" />
<Content Include="@(_RoslynReferenceContent)" Link="dependency\%(_RoslynReferenceContent.Filename)%(_RoslynReferenceContent.Extension)" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>
</Target>
<!-- Count PublicAPIs as AdditionalFiles to get them to analyzers. This is working around
https://github.com/dotnet/project-system/issues/2160 where AdditionalFileItemNames
isn't fully supported yet in the new project system. Removal of this hack is tracked
......
......@@ -69,6 +69,7 @@
<InternalsVisibleTo Include="VBCSCompiler" />
<InternalsVisibleTo Include="VBCSCompilerPortable" />
<InternalsVisibleToTest Include="Roslyn.Compilers.UnitTests" />
<InternalsVisibleToTest Include="Roslyn.Compilers.CompilerServer.UnitTests" />
<InternalsVisibleToTest Include="Roslyn.Compilers.CSharp.CommandLine.UnitTests" />
<InternalsVisibleToTest Include="Roslyn.Compilers.CSharp.Emit.UnitTests" />
<InternalsVisibleToTest Include="Roslyn.Compilers.CSharp.WinRT.UnitTests" />
......
......@@ -8,20 +8,15 @@
<OutputType>Library</OutputType>
<RootNamespace>Microsoft.CodeAnalysis.CSharp.CommandLine.UnitTests</RootNamespace>
<AssemblyName>Roslyn.Compilers.CSharp.CommandLine.UnitTests</AssemblyName>
<TargetFramework>net46</TargetFramework>
<TargetFramework>net461</TargetFramework>
<RuntimeIdentifier>$(RoslynDesktopRuntimeIdentifier)</RuntimeIdentifier>
<RoslynProjectType>UnitTest</RoslynProjectType>
</PropertyGroup>
<ItemGroup Label="Project References">
<ProjectReference Include="..\..\..\..\Test\Utilities\Portable\TestUtilities.csproj" />
<ProjectReference Include="..\..\..\Test\Utilities\CSharp\CSharpCompilerTestUtilities.csproj" />
<ProjectReference Include="..\..\csc\csc.csproj" >
<Aliases>CscExe</Aliases>
</ProjectReference>
<ProjectReference Include="..\..\csc\csc.csproj" ReferenceOutputAssembly="false" OutputItemType="RoslynReferenceToDependencyDirectory" />
<ProjectReference Include="..\..\..\Core\Portable\CodeAnalysis.csproj" />
<ProjectReference Include="..\..\..\Server\VBCSCompiler\VBCSCompiler.csproj">
<Aliases>VBCSCompiler</Aliases>
</ProjectReference>
<ProjectReference Include="..\..\..\Test\Resources\Core\CompilerTestResources.csproj" />
<ProjectReference Include="..\..\Portable\CSharpCodeAnalysis.csproj" />
<ProjectReference Include="..\..\..\VisualBasic\Portable\BasicCodeAnalysis.vbproj" />
......@@ -46,11 +41,9 @@
<DesignTime>True</DesignTime>
<DependentUpon>CommandLineTestResources.resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="..\..\csc\csc.rsp">
<Link>csc.rsp</Link>
</None>
<AssemblyVersionAttribute Include="Microsoft.CodeAnalysis.CommitHashAttribute">
<_Parameter1>$(CommitHashDisplay)</_Parameter1>
</AssemblyVersionAttribute>
</ItemGroup>
<ItemGroup>
<Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
extern alias CscExe;
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
......@@ -13,6 +12,7 @@
using System.Reflection.Metadata;
using System.Reflection.PortableExecutable;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
......@@ -30,20 +30,19 @@
using Xunit;
using static Microsoft.CodeAnalysis.CommonDiagnosticAnalyzers;
using static Roslyn.Test.Utilities.SharedResourceHelpers;
using CscExe.Microsoft.CodeAnalysis.CSharp.CommandLine;
using System.Security.Cryptography;
namespace Microsoft.CodeAnalysis.CSharp.CommandLine.UnitTests
{
public class CommandLineTests : CSharpTestBase
{
private static readonly string s_CSharpCompilerExecutable = typeof(Csc).GetTypeInfo().Assembly.Location;
private static readonly string s_CSharpCompilerExecutable = Path.Combine(
Path.GetDirectoryName(typeof(CommandLineTests).GetTypeInfo().Assembly.Location),
Path.Combine("dependency", "csc.exe"));
private static readonly string s_defaultSdkDirectory = RuntimeEnvironment.GetRuntimeDirectory();
private static readonly string s_compilerVersion = typeof(Csc).GetTypeInfo().Assembly.GetCustomAttribute<AssemblyFileVersionAttribute>().Version;
private static readonly string s_compilerShortCommitHash =
CommonCompiler.ExtractShortCommitHash(typeof(CSharpCompiler).GetTypeInfo().Assembly.GetCustomAttribute<CommitHashAttribute>()?.Hash);
private readonly string _baseDirectory = TempRoot.Root;
private static readonly string s_compilerVersion = typeof(CommandLineTests).Assembly.GetCustomAttribute<AssemblyFileVersionAttribute>().Version;
private static readonly string s_compilerCommitHash = typeof(CommandLineTests).Assembly.GetCustomAttribute<CommitHashAttribute>()?.Hash;
private static readonly string s_compilerShortCommitHash = CommonCompiler.ExtractShortCommitHash(s_compilerCommitHash);
private class TestCommandLineParser : CSharpCommandLineParser
{
......@@ -9450,7 +9449,7 @@ class Runner
static int Main(string[] args)
{{
var assembly = Assembly.LoadFrom(@""{s_CSharpCompilerExecutable}"");
var program = assembly.GetType(""{typeof(Program).FullName}"");
var program = assembly.GetType(""Microsoft.CodeAnalysis.CSharp.CommandLine.Program"");
var main = program.GetMethod(""Main"");
return (int)main.Invoke(null, new object[] {{ args }});
}}
......@@ -9720,7 +9719,7 @@ public void CompilingCodeWithMultipleInvalidPreProcessorSymbolsShouldErrorOut()
public void MissingCompilerAssembly()
{
var dir = Temp.CreateDirectory();
var cscPath = dir.CopyFile(typeof(Csc).Assembly.Location).Path;
var cscPath = dir.CopyFile(s_CSharpCompilerExecutable).Path;
dir.CopyFile(typeof(Compilation).Assembly.Location);
// Missing Microsoft.CodeAnalysis.CSharp.dll.
......@@ -9818,9 +9817,8 @@ public void StrongNameProviderWithCustomTempPath()
var workingDir = Temp.CreateDirectory();
workingDir.CreateFile("a.cs");
var csc = new Csc(null, new BuildPaths("", workingDir.Path, null, tempDir.Path),
new[] { "/features:UseLegacyStrongNameProvider", "/nostdlib", "a.cs" },
analyzerLoader: null);
var buildPaths = new BuildPaths(clientDir: "", workingDir: workingDir.Path, sdkDir: null, tempDir: tempDir.Path);
var csc = new MockCSharpCompiler(null, buildPaths, args: new[] { "/features:UseLegacyStrongNameProvider", "/nostdlib", "a.cs" });
var comp = csc.CreateCompilation(new StringWriter(), new TouchedFileLogger(), errorLogger: null);
var desktopProvider = Assert.IsType<DesktopStrongNameProvider>(comp.Options.StrongNameProvider);
using (var inputStream = Assert.IsType<DesktopStrongNameProvider.TempFileStream>(desktopProvider.CreateInputStream()))
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
extern alias VBCSCompiler;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using VBCSCompiler.Microsoft.CodeAnalysis.CompilerServer;
using Microsoft.CodeAnalysis.CSharp.Test.Utilities;
using Microsoft.CodeAnalysis.Test.Utilities;
using Roslyn.Test.Utilities;
using Xunit;
using static Roslyn.Test.Utilities.SharedResourceHelpers;
using System.Reflection;
......@@ -198,53 +195,6 @@ public class C { }").Path;
CleanupAllGeneratedFiles(sourcePath);
}
[ConditionalFact(typeof(WindowsOnly))]
public void TrivialMetadataCaching()
{
List<String> filelist = new List<string>();
// Do the following compilation twice.
// The compiler server API should hold on to the mscorlib bits
// in memory, but the file tracker should still map that it was
// touched.
for (int i = 0; i < 2; i++)
{
var source1 = Temp.CreateFile().WriteAllText(helloWorldCS).Path;
var touchedDir = Temp.CreateDirectory();
var touchedBase = Path.Combine(touchedDir.Path, "touched");
filelist.Add(source1);
var outWriter = new StringWriter();
var cmd = new CSharpCompilerServer(
DesktopCompilerServerHost.SharedAssemblyReferenceProvider,
new[] { "/nologo", "/touchedfiles:" + touchedBase, source1 },
new BuildPaths(null, _baseDirectory, RuntimeEnvironment.GetRuntimeDirectory(), Path.GetTempPath()),
s_libDirectory,
new TestAnalyzerAssemblyLoader());
List<string> expectedReads;
List<string> expectedWrites;
BuildTouchedFiles(cmd,
Path.ChangeExtension(source1, "exe"),
out expectedReads,
out expectedWrites);
var exitCode = cmd.Run(outWriter);
Assert.Equal(string.Empty, outWriter.ToString().Trim());
Assert.Equal(0, exitCode);
AssertTouchedFilesEqual(expectedReads,
expectedWrites,
touchedBase);
}
foreach (String f in filelist)
{
CleanupAllGeneratedFiles(f);
}
}
/// <summary>
/// Builds the expected base of touched files.
/// Adds a hook for temporary file creation as well,
......
......@@ -18,10 +18,8 @@
<ItemGroup Label="Project References">
<ProjectReference Include="..\..\..\Test\PdbUtilities\PdbUtilities.csproj" />
<ProjectReference Include="..\..\..\Test\Utilities\Portable\TestUtilities.csproj" />
<ProjectReference Include="..\..\CSharp\csc\csc.csproj" />
<ProjectReference Include="..\..\CSharp\Portable\CSharpCodeAnalysis.csproj" />
<ProjectReference Include="..\..\Test\Resources\Core\CompilerTestResources.csproj" />
<ProjectReference Include="..\..\VisualBasic\vbc\vbc.csproj" />
<ProjectReference Include="..\MSBuildTask\MSBuildTask.csproj" />
<ProjectReference Include="..\Portable\CodeAnalysis.csproj" />
<ProjectReference Include="..\..\VisualBasic\Portable\BasicCodeAnalysis.vbproj" />
......
// 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.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using Microsoft.CodeAnalysis.Test.Utilities;
using Roslyn.Test.Utilities;
using Xunit;
using static Roslyn.Test.Utilities.SharedResourceHelpers;
using System.Reflection;
using Microsoft.CodeAnalysis.CompilerServer;
namespace Microsoft.CodeAnalysis.CSharp.CommandLine.UnitTests
{
public class TouchedFileLoggingTests : TestBase
{
private static readonly string s_libDirectory = Environment.GetEnvironmentVariable("LIB");
private readonly string _baseDirectory = TempRoot.Root;
private const string helloWorldCS = @"using System;
class C
{
public static void Main(string[] args)
{
Console.WriteLine(""Hello, world"");
}
}";
[ConditionalFact(typeof(DesktopOnly))]
public void TrivialMetadataCaching()
{
List<String> filelist = new List<string>();
// Do the following compilation twice.
// The compiler server API should hold on to the mscorlib bits
// in memory, but the file tracker should still map that it was
// touched.
for (int i = 0; i < 2; i++)
{
var source1 = Temp.CreateFile().WriteAllText(helloWorldCS).Path;
var touchedDir = Temp.CreateDirectory();
var touchedBase = Path.Combine(touchedDir.Path, "touched");
filelist.Add(source1);
var outWriter = new StringWriter();
var cmd = new CSharpCompilerServer(
DesktopCompilerServerHost.SharedAssemblyReferenceProvider,
new[] { "/nologo", "/touchedfiles:" + touchedBase, source1 },
new BuildPaths(null, _baseDirectory, RuntimeEnvironment.GetRuntimeDirectory(), Path.GetTempPath()),
s_libDirectory,
new TestAnalyzerAssemblyLoader());
List<string> expectedReads;
List<string> expectedWrites;
BuildTouchedFiles(cmd,
Path.ChangeExtension(source1, "exe"),
out expectedReads,
out expectedWrites);
var exitCode = cmd.Run(outWriter);
Assert.Equal(string.Empty, outWriter.ToString().Trim());
Assert.Equal(0, exitCode);
AssertTouchedFilesEqual(expectedReads,
expectedWrites,
touchedBase);
}
foreach (String f in filelist)
{
CleanupAllGeneratedFiles(f);
}
}
/// <summary>
/// Builds the expected base of touched files.
/// Adds a hook for temporary file creation as well,
/// so this method must be called before the execution of
/// Csc.Run.
/// </summary>
private static void BuildTouchedFiles(CSharpCompiler cmd,
string outputPath,
out List<string> expectedReads,
out List<string> expectedWrites)
{
expectedReads = cmd.Arguments.MetadataReferences
.Select(r => r.Reference).ToList();
foreach (var file in cmd.Arguments.SourceFiles)
{
expectedReads.Add(file.Path);
}
var writes = new List<string>();
writes.Add(outputPath);
expectedWrites = writes;
}
private static void AssertTouchedFilesEqual(
List<string> expectedReads,
List<string> expectedWrites,
string touchedFilesBase)
{
var touchedReadPath = touchedFilesBase + ".read";
var touchedWritesPath = touchedFilesBase + ".write";
var expected = expectedReads.Select(s => s.ToUpperInvariant()).OrderBy(s => s);
Assert.Equal(string.Join("\r\n", expected),
File.ReadAllText(touchedReadPath).Trim());
expected = expectedWrites.Select(s => s.ToUpperInvariant()).OrderBy(s => s);
Assert.Equal(string.Join("\r\n", expected),
File.ReadAllText(touchedWritesPath).Trim());
}
private class TestAnalyzerAssemblyLoader : IAnalyzerAssemblyLoader
{
public void AddDependencyLocation(string fullPath)
{
throw new NotImplementedException();
}
public Assembly LoadFromPath(string fullPath)
{
throw new NotImplementedException();
}
}
}
}
......@@ -20,8 +20,18 @@ public MockCSharpCompiler(string responseFile, string baseDirectory, string[] ar
{
}
public MockCSharpCompiler(string responseFile, BuildPaths buildPaths, string[] args)
: this(responseFile, buildPaths, args, ImmutableArray<DiagnosticAnalyzer>.Empty, RuntimeUtilities.CreateAnalyzerAssemblyLoader())
{
}
public MockCSharpCompiler(string responseFile, string workingDirectory, string[] args, ImmutableArray<DiagnosticAnalyzer> analyzers, AnalyzerAssemblyLoader loader)
: base(CSharpCommandLineParser.Default, responseFile, args, CreateBuildPaths(workingDirectory), Environment.GetEnvironmentVariable("LIB"), loader)
: this(responseFile, CreateBuildPaths(workingDirectory), args, analyzers, loader)
{
}
public MockCSharpCompiler(string responseFile, BuildPaths buildPaths, string[] args, ImmutableArray<DiagnosticAnalyzer> analyzers, AnalyzerAssemblyLoader loader)
: base(CSharpCommandLineParser.Default, responseFile, args, buildPaths, Environment.GetEnvironmentVariable("LIB"), loader)
{
_analyzers = analyzers;
}
......
......@@ -9,7 +9,7 @@
<AssemblyName>Roslyn.Compilers.VisualBasic.Test.Utilities</AssemblyName>
<NoWarn>$(NoWarn);42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
<Nonshipping>true</Nonshipping>
<TargetFramework>net46</TargetFramework>
<TargetFramework>net461</TargetFramework>
</PropertyGroup>
<ItemGroup Label="Project References">
<ProjectReference Include="..\..\..\..\Test\PdbUtilities\PdbUtilities.csproj" />
......
......@@ -16,11 +16,19 @@ Friend Class MockVisualBasicCompiler
End Sub
Public Sub New(responseFile As String, baseDirectory As String, args As String(), Optional analyzer As DiagnosticAnalyzer = Nothing)
MyClass.New(responseFile, baseDirectory, args, If(analyzer Is Nothing, ImmutableArray(Of DiagnosticAnalyzer).Empty, ImmutableArray.Create(analyzer)))
MyClass.New(responseFile, CreateBuildPaths(baseDirectory, Path.GetTempPath()), args, analyzer)
End Sub
Public Sub New(responseFile As String, buildPaths As BuildPaths, args As String(), Optional analyzer As DiagnosticAnalyzer = Nothing)
MyClass.New(responseFile, buildPaths, args, If(analyzer Is Nothing, ImmutableArray(Of DiagnosticAnalyzer).Empty, ImmutableArray.Create(analyzer)))
End Sub
Public Sub New(responseFile As String, workingDirectory As String, args As String(), analyzers As ImmutableArray(Of DiagnosticAnalyzer))
MyBase.New(VisualBasicCommandLineParser.Default, responseFile, args, CreateBuildPaths(workingDirectory, Path.GetTempPath()), Environment.GetEnvironmentVariable("LIB"), New DesktopAnalyzerAssemblyLoader())
MyClass.New(responseFile, CreateBuildPaths(workingDirectory, Path.GetTempPath()), args, analyzers)
End Sub
Public Sub New(responseFile As String, buildPaths As BuildPaths, args As String(), analyzers As ImmutableArray(Of DiagnosticAnalyzer))
MyBase.New(VisualBasicCommandLineParser.Default, responseFile, args, buildPaths, Environment.GetEnvironmentVariable("LIB"), New DesktopAnalyzerAssemblyLoader())
_analyzers = analyzers
End Sub
......
......@@ -7,7 +7,7 @@
<PlatformTarget>AnyCPU</PlatformTarget>
<OutputType>Library</OutputType>
<AssemblyName>Roslyn.Compilers.VisualBasic.CommandLine.UnitTests</AssemblyName>
<TargetFramework>net46</TargetFramework>
<TargetFramework>net461</TargetFramework>
<RuntimeIdentifier>$(RoslynDesktopRuntimeIdentifier)</RuntimeIdentifier>
<RoslynProjectType>UnitTest</RoslynProjectType>
<RootNamespace></RootNamespace>
......@@ -19,7 +19,7 @@
<ProjectReference Include="..\..\..\Server\VBCSCompiler\VBCSCompiler.csproj" />
<ProjectReference Include="..\..\..\Core\Portable\CodeAnalysis.csproj" />
<ProjectReference Include="..\..\..\Test\Utilities\VisualBasic\BasicCompilerTestUtilities.vbproj" />
<ProjectReference Include="..\..\vbc\vbc.csproj" />
<ProjectReference Include="..\..\vbc\vbc.csproj" ReferenceOutputAssembly="false" OutputItemType="RoslynReferenceToDependencyDirectory" />
<ProjectReference Include="..\..\Portable\BasicCodeAnalysis.vbproj" />
<ProjectReference Include="..\..\..\Test\Resources\Core\CompilerTestResources.csproj" />
</ItemGroup>
......@@ -70,11 +70,11 @@
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>CommandLineTestResources.Designer.vb</LastGenOutput>
</EmbeddedResource>
<AssemblyVersionAttribute Include="Microsoft.CodeAnalysis.CommitHashAttribute">
<_Parameter1>$(CommitHashDisplay)</_Parameter1>
</AssemblyVersionAttribute>
</ItemGroup>
<ItemGroup>
<None Include="..\..\vbc\vbc.rsp">
<Link>vbc.rsp</Link>
</None>
<None Include="My Project\Application.myapp">
<Generator>MyApplicationCodeGenerator</Generator>
<LastGenOutput>Application.Designer.vb</LastGenOutput>
......
......@@ -31,11 +31,13 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.CommandLine.UnitTests
Inherits BasicTestBase
Private ReadOnly _baseDirectory As String = TempRoot.Root
Private Shared ReadOnly s_basicCompilerExecutable As String = GetType(Vbc).Assembly.Location
Private Shared ReadOnly s_basicCompilerExecutable As String = Path.Combine(
Path.GetDirectoryName(GetType(CommandLineTests).Assembly.Location),
Path.Combine("dependency", "vbc.exe"))
Private Shared ReadOnly s_defaultSdkDirectory As String = RuntimeEnvironment.GetRuntimeDirectory()
Private Shared ReadOnly s_compilerVersion As String = FileVersionInfo.GetVersionInfo(GetType(VisualBasicCompiler).Assembly.Location).FileVersion
Private Shared ReadOnly s_compilerVersion As String = FileVersionInfo.GetVersionInfo(GetType(CommandLineTests).Assembly.Location).FileVersion
Private Shared ReadOnly s_compilerShortCommitHash As String =
CommonCompiler.ExtractShortCommitHash(GetType(VisualBasicCompiler).GetTypeInfo().Assembly.GetCustomAttribute(Of CommitHashAttribute).Hash)
CommonCompiler.ExtractShortCommitHash(GetType(CommandLineTests).Assembly.GetCustomAttribute(Of CommitHashAttribute).Hash)
Private Shared Function DefaultParse(args As IEnumerable(Of String), baseDirectory As String, Optional sdkDirectory As String = Nothing, Optional additionalReferenceDirectories As String = Nothing) As VisualBasicCommandLineArguments
sdkDirectory = If(sdkDirectory, s_defaultSdkDirectory)
......@@ -8809,7 +8811,7 @@ End Module
<ConditionalFact(GetType(IsEnglishLocal))>
Public Sub MissingCompilerAssembly()
Dim dir = Temp.CreateDirectory()
Dim vbcPath = dir.CopyFile(GetType(Vbc).Assembly.Location).Path
Dim vbcPath = dir.CopyFile(s_basicCompilerExecutable).Path
dir.CopyFile(GetType(Compilation).Assembly.Location)
' Missing Microsoft.CodeAnalysis.VisualBasic.dll.
......@@ -8858,9 +8860,8 @@ End Module
Dim workingDir = Temp.CreateDirectory()
workingDir.CreateFile("a.vb")
Dim vbc = New Vbc(Nothing, New BuildPaths("", workingDir.Path, Nothing, tempDir.Path),
{"/features:UseLegacyStrongNameProvider", "/nostdlib", "a.vb"},
analyzerLoader:=Nothing)
Dim vbc = New MockVisualBasicCompiler(Nothing, New BuildPaths("", workingDir.Path, Nothing, tempDir.Path),
{"/features:UseLegacyStrongNameProvider", "/nostdlib", "a.vb"})
Dim comp = vbc.CreateCompilation(New StringWriter(), New TouchedFileLogger(), errorLogger:=Nothing)
Dim desktopProvider = Assert.IsType(Of DesktopStrongNameProvider)(comp.Options.StrongNameProvider)
Using inputStream = Assert.IsType(Of DesktopStrongNameProvider.TempFileStream)(desktopProvider.CreateInputStream())
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册