2016-07-20 40 views
0

Ich installiere zwei Instanzen meines Revit-Addins. Wenn ich Revit ausführe, wird alles korrekt in der Multifunktionsleiste angezeigt: zwei Dropdown-Listen - eine für jede Instanz. Das Problem ist, dass beide auf die gleiche DLL-Datei zugreifen (die, die zuerst geladen wird), obwohl jeder Pfad jeder Add-In-Datei zu einem anderen Speicherort führt. DieseLaden Sie mehrere ADDL-DLL-Dateien in Autodesk Revit

ist, wie die Addin-Dateien wie folgt aussehen:

<?xml version="1.0" encoding="utf-8"?> 
    <RevitAddIns> 
    <AddIn Type="Application"> 
     <Assembly>C:\A\My.Application.dll</Assembly> 
     <ClientId>{GUID1}</ClientId> 
     <Name>My Plugin A</Name> 
     <FullClassName>My.Application.Application</FullClassName> 
    </AddIn> 
    </RevitAddIns> 

und

<?xml version="1.0" encoding="utf-8"?> 
    <RevitAddIns> 
    <AddIn Type="Application"> 
     <Assembly>C:\B\My.Application.dll</Assembly> 
     <ClientId>{GUID2}</ClientId> 
     <Name>My Plugin B</Name> 
     <FullClassName>My.Application.Application</FullClassName> 
    </AddIn> 
    </RevitAddIns> 

Ich habe jeden Eintrag geändert, aber konnte nicht Revit zwei verschiedene Dateien zu laden.

Alle Ideen oder Hinweise werden sehr geschätzt.

+0

Ich glaube, die DLL haben ihren eigenen Namen und Revit versteht, dass bereits geladen ist. Dies ist erforderlich, um zu vermeiden, dass Referenzen doppelt geladen werden. –

+0

Ja, das habe ich mir gedacht. Kennen Sie Workarounds? –

+0

zuerst, warum haben Sie die gleiche Klasse auf der gleichen DLL (und ich nehme an, sie sind gleich) zweimal geladen? Wenn du musst, vielleicht kannst du den Assemblynamen ändern ... aber ich habe es nicht versucht. –

Antwort

1

Die .NET AppDomain wird dieselbe Klasse nicht zweimal laden. Und Revit verwendet diesen Mechanismus.

Für Sie würde ich vorschlagen, bearbeiten Sie die Datei AssemblyInfo.cs. Zuerst würde ich vorschlagen, dass Sie für jede Assembly, die Sie erstellen, einen anderen Namen verwenden (mit verschiedenen Versionen Ihrer Referenz). Wenn Sie denselben Namen beibehalten müssen, können Sie verschiedene Versionen in Betracht ziehen, sodass .NET AppDomain beides lädt. Im Folgenden sind die Attribute, die Sie ändern zu berücksichtigen sind:

[assembly: AssemblyTitle("Name01")] 
[assembly: AssemblyProduct("Name01")] 
[assembly: AssemblyFileVersion("1.0.1")] 
[assembly: AssemblyInformationalVersion("1.0.1")] 

Zur Aufrechterhaltung der gleichen Code, können Sie C# Preprocessor Directives verwenden und beide Fälle zusammenstellen (beide DLLs während Build erstellen).

+0

OK. Daher ist es in .NET nicht möglich, zwei DLLs von verschiedenen Stellen zu laden, die im Grunde die gleichen sind. Ich muss dann eine andere Lösung finden, da es nur eine DLL-Version in meinem Installer gibt. Aber danke einen Haufen für die Klärung. –