我有一個WPF容器應用程序(包含ContentControl
主機)和一個集裝箱應用程序(UserControl
)。兩人都沒有注意到對方。WPF XAML引用未通過myAssembly.GetReferencedAssemblies()解析()
只有一個XML配置文件包含集裝箱內部的集裝箱DLL的字符串dllpath
和ViewModelClass
的完整名稱空間名稱。
容器中的通用代碼解析了集裝箱的裝配(Assembly.LoadFrom(dllpath)
)並使用Activator.CreateInstance(vmType)
創建了視圖模型的實例。當這個viewmodel
被託管在容器的ContentControl
裏面時,相關的vierwmodel特定的ResourceDictionary被添加到容器的內容控件的ContentControl.Resources.MergedDictionaries
,所以視圖加載正常。
現在我的集裝箱必須使用我的本地C:\Lib
文件夾中的程序集引用WPFToolkit.dll
來承載WPF DataGrid
。
的複製本地參考WPFToolkit.dll
被添加到.csproj
文件containee的項目和它只是利用其XAML namepsace在UserControl.XAML
稱。這樣我的集裝箱應用程序中的我的bin\debug
文件夾獲得WPFToolkit.dll
複製。
XAML:
xmlns:Controls="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit"
<Controls:DataGrid ItemsSource="{Binding AssetList}" ... />
問題: 當下ViewModel
(即containee的用戶控件)嘗試加載本身我得到這個錯誤。
「Can not find type'Microsoft.Windows.Controls.DataGrid'。編譯時使用的程序集可能與加載時使用的程序集不同並且類型缺失。
因此,我試圖在viewmodel託管之前加載集裝箱的引用程序集(myAssembly.GetReferencedAssemblies()
)。 但WPFToolkit
不在那裏的程序集列表!
奇怪的是我有另一個DLL在集裝箱代碼庫中稱爲Logger.dll
,但這個是用C#代碼實現的。所以我在myAssembly.GetReferencedAssemblies()
正確解決其參考。
那麼這是否意味着程序集的BAML引用永遠不會被GetReferencedAssemblies
解析?
編輯:
忘了補充我在做一個containee後生成事件到XCOPY所有bin\debug\*.*
到容器的「本\調試」。它的作品。但是我不希望所有的集裝箱被這樣複製到集裝箱上。容器應該忽略集裝箱應用程序(甚至是dll)直到運行時。
僅用於測試目的,只能嘗試將'wpfToolkit.dll'移動到'exe'文件所在的文件夾,並查看是否可以解決該問題。如果是這樣,你的應用程序不能找到這個'dll',所以通過附加到'AppDomain.AssemblyResolve'事件並自己找到它來添加自定義參考解析器。 – Rafal
忘了補充我在containee做了一個post build事件,把所有的'bin \ debug \ *。*'拷貝到容器的'bin \ debug'中。它的作品。但是我不希望所有的集裝箱被這樣複製到集裝箱上。容器應該忽略集裝箱應用程序(甚至是dll)直到運行時。 –