Skip to content

Commit c08b9b2

Browse files
committed
resolve assembly conflic pdb autocad vs civil3d
1 parent 15b2b34 commit c08b9b2

File tree

2 files changed

+36
-11
lines changed

2 files changed

+36
-11
lines changed

CadAddinManager/Model/AssemLoader.cs

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.Windows;
66
using CadAddinManager.View;
77
using Mono.Cecil;
8+
using Mono.Cecil.Pdb;
89

910
namespace CadAddinManager.Model;
1011

@@ -84,16 +85,18 @@ public Assembly LoadAddinsToTempFolder(string originalFilePath, bool parsingOnly
8485
{
8586
stringBuilder.Append("-Executing-");
8687
}
88+
8789
tempFolder = FileUtils.CreateTempFolder(stringBuilder.ToString());
88-
string fileAssemblyTemp = String.Empty;
89-
try
90-
{
91-
fileAssemblyTemp = ResolveDuplicateMethod(originalFilePath);
92-
}
93-
catch (Exception)
94-
{
95-
fileAssemblyTemp = originalFilePath;
96-
}
90+
string fileAssemblyTemp = ResolveDuplicateMethod(originalFilePath);
91+
// string fileAssemblyTemp = String.Empty;
92+
// try
93+
// {
94+
// fileAssemblyTemp = ResolveDuplicateMethod(originalFilePath);
95+
// }
96+
// catch (Exception)
97+
// {
98+
// fileAssemblyTemp = originalFilePath;
99+
// }
97100
var assembly = CopyAndLoadAddin(fileAssemblyTemp, parsingOnly);
98101
if (assembly == null || !IsAPIReferenced(assembly))
99102
{
@@ -104,7 +107,9 @@ public Assembly LoadAddinsToTempFolder(string originalFilePath, bool parsingOnly
104107

105108
private string ResolveDuplicateMethod(string originalFilePath)
106109
{
107-
AssemblyDefinition ass = AssemblyDefinition.ReadAssembly(originalFilePath);
110+
111+
// AssemblyDefinition ass = AssemblyDefinition.ReadAssembly(originalFilePath);
112+
AssemblyDefinition ass = GetAssemblyDef(originalFilePath);
108113
foreach (ModuleDefinition def in ass.Modules)
109114
{
110115
foreach (TypeDefinition d in def.Types)
@@ -144,7 +149,26 @@ private string ResolveDuplicateMethod(string originalFilePath)
144149
ass.Write(fileAssemblyTemp);
145150
return fileAssemblyTemp;
146151
}
152+
public static AssemblyDefinition GetAssemblyDef(string assemblyPath)
153+
{
154+
155+
var assemblyResolver = new DefaultAssemblyResolver();
156+
var assemblyLocation = Path.GetDirectoryName(assemblyPath);
157+
assemblyResolver.AddSearchDirectory(assemblyLocation);
147158

159+
var readerParameters = new ReaderParameters { AssemblyResolver = assemblyResolver };
160+
161+
var pdbName = Path.ChangeExtension(assemblyPath, "pdb");
162+
if (File.Exists(pdbName))
163+
{
164+
var symbolReaderProvider = new PdbReaderProvider();
165+
readerParameters.SymbolReaderProvider = symbolReaderProvider;
166+
readerParameters.ReadSymbols = true;
167+
}
168+
169+
var assemblyDef = AssemblyDefinition.ReadAssembly(assemblyPath, readerParameters);
170+
return assemblyDef;
171+
}
148172
private string SaveAssemblyModifyToTemp(string originalFilePath)
149173
{
150174
string prefix = "RenameCommand-";

CadAddinManager/ViewModel/AddinManager.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Diagnostics;
22
using System.IO;
3+
using System.Reflection;
34
using System.Windows;
45
using CadAddinManager.Model;
56
using Application = Autodesk.AutoCAD.ApplicationServices.Core.Application;
@@ -66,7 +67,7 @@ public AddinType LoadAddin(string filePath, AssemLoader assemLoader)
6667
{
6768
assemLoader.HookAssemblyResolve();
6869

69-
var assembly = assemLoader.LoadAddinsToTempFolder(filePath, true);
70+
Assembly assembly = assemLoader.LoadAddinsToTempFolder(filePath, true);
7071
list = commands.LoadItems(assembly, filePath, AddinType.Command);
7172
}
7273
catch (Exception e)

0 commit comments

Comments
 (0)