Skip to content

Commit

Permalink
Fixing .NET build ILMerge task to correctly locate .NET 4.0 reference…
Browse files Browse the repository at this point in the history
… assemblies

Using assemblies merged using ILMerge built on a machine with .NET 4.5
installed without specifying the referenced assemblies directory for .NET
4.0 can lead to problems. Fixes issue SeleniumHQ#5257.
  • Loading branch information
jimevans committed Feb 28, 2013
1 parent ba2f5ff commit 01a0bd2
Showing 1 changed file with 50 additions and 40 deletions.
90 changes: 50 additions & 40 deletions rake-tasks/crazy_fun/mappings/visualstudio.rb
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,53 @@ def upload_file(file_name, file_description, featured_file)
end

module CrazyFunDotNet
class DotNetLibrary < Tasks
class DotNetTasks < Tasks
def get_reference_assemblies_dir()
@reference_assemblies_dir ||= (
program_files_dir = find_environment_variable(['ProgramFiles(x86)', 'programfiles(x86)', 'PROGRAMFILES(X86)'], "C:/Program Files (x86)")
unless File.exists? program_files_dir
program_files_dir = find_environment_variable(['ProgramFiles', 'programfiles', 'PROGRAMFILES'], "C:/Program Files")
end
File.join(program_files_dir, 'Reference Assemblies', 'Microsoft', 'Framework')
)
end

def get_framework_dir()
@framework_dir ||= (
windows_dir = find_environment_variable(['WinDir', 'windir', 'WINDIR'], "C:/Windows")
File.join(windows_dir, 'Microsoft.NET', 'Framework')
)
end

def get_reference_assemblies_version_dir(version)
if version == "net35"
return File.join(get_reference_assemblies_dir(), "v3.5").to_s
end
return File.join(get_reference_assemblies_dir(), '.NETFramework', "v4.0").to_s
end

def resolve_framework_reference(ref, version)
if version == "net35"
assembly = File.join(get_reference_assemblies_version_dir(version), ref)
unless File.exists? assembly
assembly = File.join(get_framework_dir(), "v2.0.50727", ref)
end

return assembly.to_s
end
return File.join(get_reference_assemblies_version_dir(version), ref).to_s
end

def find_environment_variable(possible_vars, fallback)
var_name = possible_vars.find { |e| ENV[e] }
if var_name.nil?
return fallback
end
return ENV[var_name]
end
end

class DotNetLibrary < DotNetTasks
def handle(fun, dir, args)
base_dir = "build/dotnet"
framework_ver = "net40"
Expand Down Expand Up @@ -209,43 +255,6 @@ def resolve_references(dir, refs, framework_ver, assemblies_to_copy)
return references
end

def get_reference_assemblies_dir()
@reference_assemblies_dir ||= (
program_files_dir = find_environment_variable(['ProgramFiles(x86)', 'programfiles(x86)', 'PROGRAMFILES(X86)'], "C:/Program Files (x86)")
unless File.exists? program_files_dir
program_files_dir = find_environment_variable(['ProgramFiles', 'programfiles', 'PROGRAMFILES'], "C:/Program Files")
end
File.join(program_files_dir, 'Reference Assemblies', 'Microsoft', 'Framework')
)
end

def get_framework_dir()
@framework_dir ||= (
windows_dir = find_environment_variable(['WinDir', 'windir', 'WINDIR'], "C:/Windows")
File.join(windows_dir, 'Microsoft.NET', 'Framework')
)
end

def resolve_framework_reference(ref, version)
if version == "net35"
assembly = File.join(get_reference_assemblies_dir(), "v3.5", ref)
unless File.exists? assembly
assembly = File.join(get_framework_dir(), "v2.0.50727", ref)
end

return assembly.to_s
end
return File.join(get_reference_assemblies_dir(), '.NETFramework', "v4.0", ref).to_s
end

def find_environment_variable(possible_vars, fallback)
var_name = possible_vars.find { |e| ENV[e] }
if var_name.nil?
return fallback
end
return ENV[var_name]
end

def resolve_buildable_targets(target_candidates)
buildable_targets = []
unless target_candidates.nil?
Expand All @@ -259,7 +268,7 @@ def resolve_buildable_targets(target_candidates)
end
end

class MergeAssemblies < Tasks
class MergeAssemblies < DotNetTasks
def handle(fun, dir, args)
base_dir = "build/dotnet"
framework_ver = "net40"
Expand All @@ -284,7 +293,8 @@ def handle(fun, dir, args)
if framework_ver == "net35"
params << "/v2"
else
params << "/v4"
mscorlib_location = get_reference_assemblies_version_dir("net40").gsub('/', Platform.dir_separator)
params << "/targetplatform:v4,\"#{mscorlib_location}\""
end
params << "/keyfile:#{args[:keyfile]}" unless args[:keyfile].nil?
params << "/out:#{full_path.gsub('/', Platform.dir_separator)}"
Expand Down

0 comments on commit 01a0bd2

Please sign in to comment.