Konnte nicht geladen, Datei oder assembly 'Xceed.Wpf.Toolkit
Entwickle ich ein add-in für eine andere Anwendung, Autodesk Revit, die ist gebaut wie eine separate DLL-Klassenbibliothek. Ich versuche, die Wpf-Tool-Kit-Eigenschaft grid in einem meiner WPF-windows. Die Eigenschaft grid gut zeigt in Visual studio und intellisense funktioniert auch. Aber Wenn ich versuche, starten Sie Revit mit meinem add-in geladen, bekomme ich die folgende exception.
System.Windows.Markup.XamlParseException occurred
HResult=-2146233087
Message=Could not load file or assembly 'Xceed.Wpf.Toolkit, PublicKeyToken=3e4669d2f30244f4' or one of its dependencies. The system cannot find the file specified.
Source=PresentationFramework
LineNumber=133
LinePosition=27
StackTrace:
at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
InnerException: System.IO.FileNotFoundException
HResult=-2147024894
Message=Could not load file or assembly 'Xceed.Wpf.Toolkit, PublicKeyToken=3e4669d2f30244f4' or one of its dependencies. The system cannot find the file specified.
Source=mscorlib
FileName=Xceed.Wpf.Toolkit, PublicKeyToken=3e4669d2f30244f4
FusionLog==== Pre-bind state information ===
LOG: User = GLOBAL\eric.anastas
LOG: DisplayName = Xceed.Wpf.Toolkit, PublicKeyToken=3e4669d2f30244f4
(Partial)
WRN: Partial binding information was supplied for an assembly:
WRN: Assembly Name: Xceed.Wpf.Toolkit, PublicKeyToken=3e4669d2f30244f4 | Domain ID: 1
WRN: A partial bind occurs when only part of the assembly display name is provided.
WRN: This might result in the binder loading an incorrect assembly.
WRN: It is recommended to provide a fully specified textual identity for the assembly,
WRN: that consists of the simple name, version, culture, and public key token.
WRN: See whitepaper http://go.microsoft.com/fwlink/?LinkId=109270 for more information and common solutions to this issue.
LOG: Appbase = file:///C:/Program Files/Autodesk/Revit 2014/
LOG: Initial PrivatePath = NULL
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 2014\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 2014/Xceed.Wpf.Toolkit.DLL.
LOG: Attempting download of new URL file:///C:/Program Files/Autodesk/Revit 2014/Xceed.Wpf.Toolkit/Xceed.Wpf.Toolkit.DLL.
LOG: Attempting download of new URL file:///C:/Program Files/Autodesk/Revit 2014/SDA/bin/Xceed.Wpf.Toolkit.DLL.
LOG: Attempting download of new URL file:///C:/Program Files/Autodesk/Revit 2014/SDA/bin/Xceed.Wpf.Toolkit/Xceed.Wpf.Toolkit.DLL.
LOG: Attempting download of new URL file:///C:/Program Files/Autodesk/Revit 2014/Xceed.Wpf.Toolkit.EXE.
LOG: Attempting download of new URL file:///C:/Program Files/Autodesk/Revit 2014/Xceed.Wpf.Toolkit/Xceed.Wpf.Toolkit.EXE.
LOG: Attempting download of new URL file:///C:/Program Files/Autodesk/Revit 2014/SDA/bin/Xceed.Wpf.Toolkit.EXE.
LOG: Attempting download of new URL file:///C:/Program Files/Autodesk/Revit 2014/SDA/bin/Xceed.Wpf.Toolkit/Xceed.Wpf.Toolkit.EXE.
StackTrace:
at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.Assembly.Load(AssemblyName assemblyRef)
at System.Windows.Baml2006.Baml2006SchemaContext.ResolveAssembly(BamlAssembly bamlAssembly)
at System.Windows.Baml2006.Baml2006SchemaContext.ResolveBamlTypeToType(BamlType bamlType)
at System.Windows.Baml2006.Baml2006SchemaContext.ResolveBamlType(BamlType bamlType, Int16 typeId)
at System.Windows.Baml2006.Baml2006SchemaContext.GetXamlType(Int16 typeId)
at System.Windows.Baml2006.Baml2006Reader.Process_ElementStart()
at System.Windows.Baml2006.Baml2006Reader.Process_OneBamlRecord()
at System.Windows.Baml2006.Baml2006Reader.Process_BamlRecords()
at System.Windows.Baml2006.Baml2006Reader.Read()
at System.Windows.Markup.WpfXamlLoader.TransformNodes(XamlReader xamlReader, XamlObjectWriter xamlWriter, Boolean onlyLoadOneNode, Boolean skipJournaledProperties, Boolean shouldPassLineNumberInfo, IXamlLineInfo xamlLineInfo, IXamlLineInfoConsumer xamlLineInfoConsumer, XamlContextStack`1 stack, IStyleConnector styleConnector)
at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
InnerException:
In der Regel, wenn ich will, auf ein 3rd-party-assembly aus einem Revit plug-in, das ich einfach sichergehen, dass der 3rd-party-DLL kopiert wird, an der gleichen Stelle wie mein plug-in DLL. Habe ich überprüft und Xceed.Wpf.Toolkit.dll
wird kopiert in das Verzeichnis mit meinem plug-in DLL.
Bemerkte ich aus den log-Nachrichten in der Fehler, dass es die Suche nach der DLL in das Revit-Programm-Verzeichnis. Nach dem kopieren Xceed.Wpf.Toolkit.dll
in diesem Verzeichnis nicht mehr ich erhielt den Fehler.
Allerdings habe ich vorhandene plug-in deployment-tools, die abhängig von der plug-in-Dateien in Ihrer eigenen isolierten Ordner.
So, hat jemand eine Idee, wie kann ich das plug-in zu finden, die WPF Toolkit Bibliothek?
- Ich weiß nicht die Lösung, aber ich habe es in der Vergangenheit und hat einige Fehler. Ich schlage vor Sie 1 Sache. Klicken Sie rechts auf dll-Datei. Gehen Sie zu Eigenschaften und Entsperren Sie es. Ich denke, das könnte helfen.
- Ich auch vor demselben Problem...: (
- Entdeckt, dass, wenn zwei verschiedene Projekte sind auf zwei verschiedene Versionen der Extended Wpf Toolkit Nuget-Pakete, die dann ähnliche Fehler auf (z.B. ein Projekt wurde mit Xceed.Wpf.Toolkit 3.3.0 und schien zu sein, die bekam ausgeliefert, aber das betroffene Projekt, das nicht finden/laden-Montage, denn es war die Referenzierung von Xceed.Wpf.Toolkit 3.2.0). Dummer Fehler ich weiß, aber hoffentlich hilft sparen, jemand anderes die Haare aus gezogen aus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
So, ich fand eine neue und bessere Lösung für diese Frage von mir aus 2014.
Heute ich lief in das gleiche problem wo laden Sie ein WPF-Steuerelement von einer Baugruppe werfen würde eine XamlParseException, außer dieser Zeit, es war mit ein WPF control library-assembly, die ich erstellt hatte.
Ich versuchte, verschieben Sie die DLL in den gleichen Ordner wie die EXE, und wie vor diesem das problem gelöst.
Nach einiger Suche, fand ich dieser Frage auf den telerik.com Foren:
http://www.telerik.com/forums/xamlparseexception-could-not-load-file-or-assembly
Es stellt sich heraus, wenn Sie einfach geben Sie dem Steuerelement einen Namen, indem Sie eine
x:Name
- Attribut, dies wird fügen Sie einen Verweis auf das Steuerelement im code-behind und aus irgendeinem Grund löst das Problem mit dem laden der assembly.obj
Ordner, wieobj\MainWindow.g.i.cs
. Ihre code-behind ist eine partielle Klasse, und so ist das, und zusammen sind Sie aufgereiht, die zusammen in einer gesamten Klasse. Bei der Verwendung vonx:Name
, würde ich erwarten, dass eine Zeile angezeigt, die in dieser Datei.Ich bin ein fan von diesem Konzept.
Sie können sich registrieren, ein event auf die Anwendungsdomäne für das AssemblyResolve-Ereignis, die Fänge, wenn eine assembly nicht geladen werden kann.
Sieht es wie folgt aus:
Können Sie es ein wenig mehr als diese, aber Sie bekommen die Idee...
Ich weiß, dass dies eine sehr alte Frage, aber ich zufällig über genau dieses Fehlers nicht allzu lange her. Wenn Ihre visual studio-Anwendung verwendet zwei Projekte, oder ein Projekt, das auf ein anderes Projekt, würde ich prüfen, um sicherzustellen, dass BEIDE Projekte haben das extended toolkit installiert.
Rechts klicken Sie auf Projekte und klicken Sie auf "NuGet-Pakete Verwalten" und navigieren Sie dann auf der linken Seite des dialogs auf "Installierte Pakete". Wenn Sie nicht sehen, extended toolkit auf beide Projekte dann können Sie den manager für die online-Suche und Sie für Sie zu installieren.
Mein Problem war, dass ich hatte nur das extended toolkit installiert ist, an einem Projekt nicht beide.
Hoffentlich hilft jemand in der Zukunft.
Obwohl das wahrscheinlich gelöst, ein häufiger Grund ist die Unfähigkeit, fügen Sie die Xceed.Wpf.Toolkit dll Einstiegspunkt Projekt. Sie wahrscheinlich Hinzugefügt, um einen Ihrer Klasse-Bibliothek-Projekte und legen Sie die "Copy Local" - Attribut auf true. Ein Verweis auf diese dll hat auch Hinzugefügt werden zu Ihrem wichtigsten Projekt enthält Ihre App.xaml.cs mit Ihrem "Lokale Kopie" auf "true" eingestellt.
Ich bin überrascht, Visual Studio 2013 nicht behandeln dies automatisch.
Während ich persönlich glaube, Sie sollten es tun, wie bereits in der akzeptierten Antwort (von @Matt), würde ich mag zu erwähnen, dass das kopieren der dll in den "Programme" Ordner in der Autodesk Revit-installation würde wahrscheinlich auch den trick tun. Wenn ich mich Recht erinnere, zeigen Sie auch, Sie stellen Ihre add-ins ein Unterordner dieses Ordners, um sicherzustellen, dass es funktioniert einfach. Ich vermute, das ist durch Effekte wie die, die Sie haben.
AddIns
Unterordner) funktioniert nicht. Ich finde die DLLs werden Geschwister vonrevit.exe
. Haben Sie einen Hinweis darauf, wo Sie vorschlagen, um die Bereitstellung Ihrer addins als Unterordner?In der
System.Reflection
namespace, es ist dieAssembly
Klasse. Dies kann verwendet werden, um die Last der neuen Baugruppen in die aktuelle Anwendungsdomäne.Dies ist zwar immer noch ärgerlich, ich denke, das könnte der einzige Weg, um es zu laden, eine Bibliothek, die nicht im main Verzeichnis.
Stellen Sie sicher, dass Sie "Entsperren" den Xceed Montage. Der rechten Maustaste auf die Datei und wählen Sie Eigenschaften dann auf "Blockierung aufheben". Die VS kompilieren wird der code ohne Fehler, aber wenn Sie gehen, zu laufen, wird Windows nicht laden Sie die assembly. Mir war auch eingebunden in eine einzelne assembly.
Ich verwendet Fody Costura zu embedd die
Xceed.Wpf.Toolkit.dll
in der kompilierten.dll
.Installieren Sie es einfach über NuGet und die Art
Install-CleanReferencesTarget
in IhrePacket Manager Console
und dort gehen Sie.Wenn das Steuerelement geladen wird aus der XAML-Code der aufrufenden assembly, von dem Ihr
Xceed.Wpf.Toolkit.dll
geladen istPresentationFramework.dll
. So wird die CLR nicht in Ihrem add-in-Ordner, in diesem Fall (was es tut, wenn eine andere Klasse geladen wird von der Haupt-Versammlung von Ihrem add-in, denn es sieht in den Ordner der aufrufenden assembly).Also man kann Sie schon finden, setzen Sie einen Verweis auf das Steuerelement im code-behind oder verwenden Sie den
AppDomain.CurrentDomain.AssemblyResolve
zu zwingen, die CLR zu suchen, die in Ihrem add-in-Ordner.Setzen Sie die dll in das Revit-Installations-Ordner funktioniert, aber es ist eine schlechte Praxis, in meiner Sicht, weil Sie überschrieben werden kann, von einem anderen add-in-installation mit Folgen, die schwer zu Messen.