Hi,
I've written the following pesonal utility using f# + Mono.Cecil
(Should be self explanatory):
#r @"Mono.Cecil.dll"
open Mono.Cecil;
let targetAsm = @"Target.exe";
let ar = new DefaultAssemblyResolver()
ar.AddSearchDirectory(@"c:\Windows\Microsoft.NET
\Framework64\v4.0.30319")
let ad = AssemblyDefinition.ReadAssembly(targetAsm, new
ReaderParameters(AssemblyResolver = ar))
ad.Modules.[0].AssemblyReferences |>
Seq.filter (fun r -> r.Name.StartsWith("MyFramework.")) |> Seq.iter
(fun r -> r.Name <- "MyFrameWork.SDK")
ad.Write(@"TargetPatched.exe")
This basically replaces assembly references the MyFramework.A,
MyFramework.B, MyFramework.C
in Target.exe to reference MyFramework.SDK.
In case this bears any meaning, MyFramework.SDK is a merged assembly
created by using ILMerge.
The "issue" I'm encountering is that I basically get multiple
AssemblyReferences all called MyFramework.SDK.
(Which makes sense after all, as I did replace them "forecefully").
What is the "cleaner" way of getting this done?
Ultimately, I would replace all of the references with only one
reference.
Do I need to actually go over every TypeReference in every param,
member, IL, etc. and replace the existing reference to a newely
created one?
Thanks!
--
--
mono-cecil