예제 #1
0
        private async Task <List <NGenAssemblyData> > GetFromStream(Stream stream, Func <ZipArchiveEntry, bool> predicate)
        {
            var regex = new Regex(@"(.*)-([\w.]+).ngen.txt", RegexOptions.IgnoreCase | RegexOptions.Compiled);

            using var zipArchive = new ZipArchive(stream);
            var list = new List <NGenAssemblyData>();

            foreach (var entry in zipArchive.Entries)
            {
                if (predicate(entry))
                {
                    var match           = regex.Match(entry.Name);
                    var assemblyName    = match.Groups[1].Value;
                    var targetFramework = match.Groups[2].Value;
                    var methodList      = new List <string>();
                    using var entryStream = entry.Open();
                    using var reader      = new StreamReader(entryStream);

                    do
                    {
                        var line = await reader.ReadLineAsync();

                        if (line is null)
                        {
                            break;
                        }

                        methodList.Add(line);
                    }while (true);

                    var ngenAssemblyData = new NGenAssemblyData(assemblyName, targetFramework, methodList.Count);
                    list.Add(ngenAssemblyData);
                }
            }

            return(list);
        }
예제 #2
0
        private async Task UploadNGenAssemblyDataAsync(SqlTransaction transaction, int buildId, string branchName, string buildUri, NGenAssemblyData ngenAssemblyData)
        {
            var query = "INSERT INTO dbo.NGenAssemblyData (BuildId, BranchName, BuildUri, AssemblyName, TargetFramework, MethodCount) VALUES (@BuildId, @BranchName, @BuildUri, @AssemblyName, @TargetFramework, @MethodCount)";

            using var command = new SqlCommand(query, transaction.Connection, transaction);
            command.Parameters.AddWithValue("@BuildId", buildId);
            command.Parameters.AddWithValue("@BranchName", branchName);
            command.Parameters.AddWithValue("@BuildUri", buildUri);
            command.Parameters.AddWithValue("@AssemblyName", ngenAssemblyData.AssemblyName);
            command.Parameters.AddWithValue("@TargetFramework", ngenAssemblyData.TargetFramework);
            command.Parameters.AddWithValue("@MethodCount", ngenAssemblyData.MethodCount);
            var result = await command.ExecuteNonQueryAsync();

            if (result < 0)
            {
                throw new Exception("Unable to execute the insert");
            }
        }