2016-07-20 13 views
0

私はRevitアドインの2つのインスタンスをインストールしています。 Revitを実行すると、すべてがリボンパネルに正しく表示されます.2つのドロップダウン(各インスタンスに1つずつ)。 問題は、各addinファイルの各パスが別の場所につながっても、同じdllファイル(最初に読み込まれるファイル)にアクセスすることです。複数のアドインDLLファイルをAutodesk Revitにロード

これは、アドインファイルがどのように見えるかされています

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

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

私はすべてのエントリを変更したが、Revitのは、2つの異なるファイルをロードするために得ることができませんでした。

アイデアやヒントは大変ありがたいです。

+0

私はDLLが独自の名前を持っていると信じており、すでに読み込まれていることをRevitが理解しています。これは、参照が2回ロードされるのを避けるために存在します。 –

+0

はい、それは私が思ったことです。回避策を知っていますか? –

+0

最初に、同じDLLで同じクラスを持っているのはなぜですか(それは同じであると思います)。もし必要なら、アセンブリ名を変更することもできますが、試していません。 –

答えて

1

.NET AppDomainは同じクラスを2回ロードしません。 Revitはこのメカニズムを使用します。

あなたの場合は、AssemblyInfo.csファイルを編集することをお勧めします。まず、作成するアセンブリごとに異なる名前を使用することをお勧めします。同じ名前を維持する必要がある場合、.NET AppDomainが両方をロードするように異なるバージョンを検討することができます。同じコードを維持するために

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

、あなたがC# Preprocessor Directivesを使用して、両方のケース(ビルド中に両方のDLLを作成する)をコンパイルすることができます。以下は、属性変更を検討すべきです。

+0

OKです。したがって、基本的に同じ異なる場所から2つのdllをロードすることは.NETでは不可能です。 インストーラの中には1つのdllバージョンしかないので、別の解決策を見つけなければなりません。 しかし、明確化のために束に感謝。 –

関連する問題