アプリケーションのアドインを作成しています。AddInはDLLであり、特定のフォルダー%APPDATA&/ Application / AddIns/MyAddInにあります。
したがって、いくつかのプロジェクトを含むソリューションがあり、MyAddInFolderには次のファイルが含まれています。
IVC.Common.dll
IVC.MaterialCatalogEditorAddIn.dll
IVC.MaterialCatalogEditor.dll
アプリケーションは、 IVC.MaterialCatalogEditor.dllを参照するIVC.MaterialCatalogEditorAddIn.dllおよびIVC.MaterialCatalogEditorAddIn.dllにあるメソッドと、IVC.Common.dllを参照するIVC.MaterialCatalogEditor.dllを呼び出します。
IVC.MaterialCatalogEditor.dllにWPFfromがあります。そして、xamlファイルの1つはIVC.Common.dllを参照しています
アプリケーションからAddInコマンドを実行しようとすると、「アセンブリIVC.Common.dllを読み込めませんでした」という例外が発生します。
FusionLogViewerを使用しましたが、次のメッセージログが表示されました
Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
Running under executable C:\Program Files\Autodesk\Revit Structure 2012\Program\Revit.exe
--- A detailed error log follows.
=== Pre-bind state information ===
LOG: User = SK\ChekalinVV
LOG: DisplayName = IVC.MaterialCatalogEditor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
(Fully-specified)
LOG: Appbase = file:///C:/Program Files/Autodesk/Revit Structure 2012/Program/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = Revit.exe
Calling assembly : IVC.MaterialCatalogEditorAddIn, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in LoadFrom load context.
WRN: Native image will not be probed in LoadFrom context. Native image will only be probed in default load context, like with Assembly.Load().
LOG: Using application configuration file: C:\Program Files\Autodesk\Revit Structure 2012\Program\Revit.exe.Config
LOG: Using host configuration file:
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///C:/Program Files/Autodesk/Revit Structure 2012/Program/IVC.MaterialCatalogEditor.DLL.
LOG: Attempting download of new URL file:///C:/Program Files/Autodesk/Revit Structure 2012/Program/IVC.MaterialCatalogEditor/IVC.MaterialCatalogEditor.DLL.
LOG: Attempting download of new URL file:///C:/Program Files/Autodesk/Revit Structure 2012/Program/IVC.MaterialCatalogEditor.EXE.
LOG: Attempting download of new URL file:///C:/Program Files/Autodesk/Revit Structure 2012/Program/IVC.MaterialCatalogEditor/IVC.MaterialCatalogEditor.EXE.
LOG: Attempting download of new URL file:///C:/Users/ChekalinVV/AppData/Roaming/Autodesk/Revit/Addins/2012/IVC/FamilyManager/IVC.MaterialCatalogEditor.DLL.
LOG: Assembly download was successful. Attempting setup of file: C:\Users\ChekalinVV\AppData\Roaming\Autodesk\Revit\Addins\2012\IVC\FamilyManager\IVC.MaterialCatalogEditor.dll
LOG: Entering run-from-source setup phase.
LOG: Assembly Name is: IVC.MaterialCatalogEditor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
LOG: Where-ref bind Codebase does not match what is found in default context. Keep the result in LoadFrom context.
LOG: Binding succeeds. Returns assembly from C:\Users\ChekalinVV\AppData\Roaming\Autodesk\Revit\Addins\2012\IVC\FamilyManager\IVC.MaterialCatalogEditor.dll.
LOG: Assembly is loaded in LoadFrom load context.
これがすべて大丈夫です。IVC.MaterialCatalogEditorAddIn.dllは、AddInフォルダー内の*IVC.MaterialCatalogEditor.dll*を呼び出します。
しかし、次のログ:
Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
Running under executable C:\Program Files\Autodesk\Revit Structure 2012\Program\Revit.exe
--- A detailed error log follows.
=== Pre-bind state information ===
LOG: User = SK\ChekalinVV
LOG: DisplayName = IVC.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
(Fully-specified)
LOG: Appbase = file:///C:/Program Files/Autodesk/Revit Structure 2012/Program/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = Revit.exe
Calling assembly : PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Program Files\Autodesk\Revit Structure 2012\Program\Revit.exe.Config
LOG: Using host configuration file:
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///C:/Program Files/Autodesk/Revit Structure 2012/Program/IVC.Common.DLL.
LOG: Attempting download of new URL file:///C:/Program Files/Autodesk/Revit Structure 2012/Program/IVC.Common/IVC.Common.DLL.
LOG: Attempting download of new URL file:///C:/Program Files/Autodesk/Revit Structure 2012/Program/IVC.Common.EXE.
LOG: Attempting download of new URL file:///C:/Program Files/Autodesk/Revit Structure 2012/Program/IVC.Common/IVC.Common.EXE.
LOG: All probing URLs attempted and failed.
PresebtationFrameworkアセンブリは、IVC.Common.dllを呼び出して、アプリケーションフォルダーからのみロードしてみてください。
1つのdllがAddInフォルダーからロードしようとしているのに、別のdllがアプリケーションフォルダーからのみロードしようとしているのはなぜですか?そして、私の問題を解決する方法。
すべてのプロジェクトには、任意のCPUプラットフォームターゲットがあります。アプリケーションはx64です。
テスト実行可能アプリケーションからIVC.MaterialCatalogEditor.dllをロードすると、すべてが正常に機能します。
編集された いくつかのコード:
IVC.MaterialCatalogEditorAddIn.dllのメインコード
[Transaction(TransactionMode.ReadOnly)]
public class Command : IExternalCommand
{
public Result Execute(
ExternalCommandData commandData,
ref string message,
ElementSet elements)
{
MaterialsWindow materialsWindow =
new MaterialsWindow();
materialsWindow.DataContext =
new MaterialsViewModel();
materialsWindow.ShowDialog();
return Result.Succeeded;
}
}
MaterialsWindowクラスとMaterialsViewModelクラスは、IVC.MaterialCatalogEditor.dllにあります。
debbugerは、IVC.MaterialCatalogEditor.dllのxamlのこの部分でエラーを表示します。
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ViewModel="clr-namespace:IVC.MaterialCatalogEditor.ViewModel"
xmlns:Common="clr-namespace:IVC.Common;assembly=IVC.Common">
<DataTemplate
DataType="{x:Type Common:ResourceWithCharge}">
<!-- Some data template -->
</DataTemplate>
</ResourceDictionary>
編集済み2 作業ソリューションと同じ構造でテストソリューションを作成しました。テストアプリケーションから起動すると、エラーなしで動作します。しかし、アドインから実行すると、「アセンブリCommon.dllを読み込めませんでした」と失敗します。