2016-07-20 1 views
0

J'installe deux instances de mon add-in Revit. Lorsque je lance Revit, tout s'affiche correctement dans le panneau du ruban: deux menus déroulants - un pour chaque instance. Le problème est que les deux accèdent au même fichier dll (celui qui est chargé en premier) même si chaque chemin de chaque fichier addin conduit à un emplacement différent.Charger plusieurs fichiers addin dll dans Autodesk Revit

Voici comment les fichiers Addin ressemblent:

<?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> 

et

<?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> 

J'ai changé chaque entrée mais ne pouvait pas obtenir Revit pour charger deux fichiers différents.

Toutes les idées ou les conseils sont très appréciés.

+0

Je crois que les DLL ont leur propre nom et Revit comprend ce qui est déjà chargé. Cela existe pour éviter que les références soient chargées deux fois. –

+0

Oui, c'est ce que je pensais. Connaissez-vous des solutions de contournement? –

+0

d'abord, pourquoi avez-vous la même classe sur la même DLL (et je suppose qu'ils sont égaux) chargé deux fois? si vous devez, peut-être vous pouvez changer le nom de l'assemblée ... mais je n'ai pas essayé. –

Répondre

1

Le .NET AppDomain ne chargera pas deux fois la même classe. Et Revit utilise ce mécanisme.

Pour votre cas, je suggère de modifier le fichier AssemblyInfo.cs. Tout d'abord je vous suggère d'utiliser un nom différent pour chaque assemblage que vous construisez (avec différentes versions de votre référence). Si vous devez conserver le même nom, vous pouvez envisager différentes versions afin que .NET AppDomain charge les deux. Voici les attributs que vous devriez considérer le changement:

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

Pour maintenir le même code, vous pouvez utiliser C# Preprocessor Directives et compiler les deux cas (création de deux DLL lors de la construction).

+0

OK. Donc, le chargement de deux DLL à partir d'emplacements différents qui sont fondamentalement les mêmes n'est pas possible dans .NET. Je vais devoir trouver une autre solution, car il n'y a qu'une seule version dll dans mon installateur. Mais merci beaucoup pour clarifier. –