Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
assembly check
  • Loading branch information
KevinRansom committed Dec 16, 2020
commit e191053adef31f0ed22c9d2d21d5c4cb81d7506a
61 changes: 37 additions & 24 deletions src/buildtools/AssemblyCheck/AssemblyCheck.fs
Original file line number Diff line number Diff line change
Expand Up @@ -15,29 +15,42 @@ module AssemblyCheck =
let private devVersionPattern = new Regex(@"-(ci|dev)", RegexOptions.Compiled)

let verifyEmbeddedPdb (filename:string) =
use fileStream = File.OpenRead(filename)
let reader = new PEReader(fileStream)
let mutable hasEmbeddedPdb = false

try
for entry in reader.ReadDebugDirectory() do
match entry.Type with
| DebugDirectoryEntryType.CodeView ->
let _ = reader.ReadCodeViewDebugDirectoryData(entry)
()

| DebugDirectoryEntryType.EmbeddedPortablePdb ->
let _ = reader.ReadEmbeddedPortablePdbDebugDirectoryData(entry)
hasEmbeddedPdb <- true
()

| DebugDirectoryEntryType.PdbChecksum ->
let _ = reader.ReadPdbChecksumDebugDirectoryData(entry)
()

| _ -> ()
with | e -> printfn "Error validating assembly %s\nMessage: %s" filename (e.ToString())
hasEmbeddedPdb
let isManagedDll =
try
// Is il assembly? throws if not
let _ = AssemblyName.GetAssemblyName(filename).Version
true
with
| :? System.BadImageFormatException -> false // uninterested in embedded pdbs for native dlls

if isManagedDll then
use fileStream = File.OpenRead(filename)
let reader = new PEReader(fileStream)
let mutable hasEmbeddedPdb = false

try
for entry in reader.ReadDebugDirectory() do
match entry.Type with
| DebugDirectoryEntryType.CodeView ->
let _ = reader.ReadCodeViewDebugDirectoryData(entry)
()

| DebugDirectoryEntryType.EmbeddedPortablePdb ->
let _ = reader.ReadEmbeddedPortablePdbDebugDirectoryData(entry)
hasEmbeddedPdb <- true
()

| DebugDirectoryEntryType.PdbChecksum ->
let _ = reader.ReadPdbChecksumDebugDirectoryData(entry)
()

| _ -> ()
with
| e -> printfn "Error validating assembly %s\nMessage: %s" filename (e.ToString())

hasEmbeddedPdb
else
true

let verifyAssemblies (binariesPath:string) =

Expand Down Expand Up @@ -72,7 +85,7 @@ module AssemblyCheck =
assemblyVersion = versionZero || assemblyVersion = versionOne
with | :? System.BadImageFormatException ->
// fsc.exe and fsi.exe are il on the desktop and native on the coreclr
Set.contains (Path.GetFileName(a)) maybeNativeExe)
Set.contains (Path.GetFileName(a)) maybeNativeExe |> not)

if failedVersionCheck.Length > 0 then
printfn "The following assemblies had a version of %A or %A" versionZero versionOne
Expand Down