Browse Source

fix #292: Opening .xaml file that makes use of user controls causes SharpDevelop to load the user .dlls

pull/331/head
Siegfried Pammer 12 years ago
parent
commit
5988520b64
  1. 23
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.AddIn/Src/MyTypeFinder.cs
  2. 44
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.AddIn/Src/WpfToolbox.cs
  3. 28
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.AddIn/Src/WpfViewContent.cs

23
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.AddIn/Src/MyTypeFinder.cs

@ -41,17 +41,18 @@ namespace ICSharpCode.WpfDesign.AddIn
f.file = file; f.file = file;
f.ImportFrom(CreateWpfTypeFinder()); f.ImportFrom(CreateWpfTypeFinder());
// TODO : reimplement this! // DO NOT USE Assembly.LoadFrom!
// DO NOT USE Assembly.LoadFrom // use the special handling logic defined in TypeResolutionService!
// var compilation = SD.ParserService.GetCompilationForFile(file.FileName); var compilation = SD.ParserService.GetCompilationForFile(file.FileName);
// foreach (var referencedAssembly in compilation.ReferencedAssemblies) { foreach (var referencedAssembly in compilation.ReferencedAssemblies) {
// try { try {
// var assembly = Assembly.LoadFrom(referencedAssembly.GetReferenceAssemblyLocation()); var assembly = f.typeResolutionService.LoadAssembly(referencedAssembly);
// f.RegisterAssembly(assembly); if (assembly != null)
// } catch (Exceptions ex) { f.RegisterAssembly(assembly);
// ICSharpCode.Core.LoggingService.Warn("Error loading Assembly : " + referencedAssembly.FullAssemblyName, ex); } catch (Exception ex) {
// } ICSharpCode.Core.LoggingService.Warn("Error loading Assembly : " + referencedAssembly.FullAssemblyName, ex);
// } }
}
return f; return f;
} }

44
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.AddIn/Src/WpfToolbox.cs

@ -90,28 +90,28 @@ namespace ICSharpCode.WpfDesign.AddIn
try { try {
// DO NOT USE Assembly.LoadFrom!!! // DO NOT USE Assembly.LoadFrom!!!
// see http://community.sharpdevelop.net/forums/t/19968.aspx // see http://community.sharpdevelop.net/forums/t/19968.aspx
// TODO : reimplement this! Assembly assembly = typeResolutionService.LoadAssembly(assemblyFileName);
// var assembly = Assembly.LoadFrom(f); if (assembly == null) continue;
//
// SideTab sideTab = new SideTab(sideBar, assembly.FullName.Split(new[] {','})[0]); SideTab sideTab = new SideTab(sideBar, assembly.FullName.Split(new[] {','})[0]);
// sideTab.DisplayName = StringParser.Parse(sideTab.Name); sideTab.DisplayName = StringParser.Parse(sideTab.Name);
// sideTab.CanBeDeleted = false; sideTab.CanBeDeleted = false;
// sideTab.ChoosedItemChanged += OnChoosedItemChanged; sideTab.ChosenItemChanged += OnChosenItemChanged;
//
// sideTab.Items.Add(new WpfSideTabItem()); sideTab.Items.Add(new WpfSideTabItem());
//
// foreach (var t in assembly.GetExportedTypes()) foreach (var t in assembly.GetExportedTypes())
// { {
// if (IsControl(t)) if (IsControl(t))
// { {
// sideTab.Items.Add(new WpfSideTabItem(t)); sideTab.Items.Add(new WpfSideTabItem(t));
// } }
// } }
//
// if (sideTab.Items.Count > 1) if (sideTab.Items.Count > 1)
// sideBar.Tabs.Add(sideTab); sideBar.Tabs.Add(sideTab);
//
// addedAssemblys.Add(f); addedAssemblies.Add(assemblyFileName);
} catch (Exception ex) { } catch (Exception ex) {
WpfViewContent.DllLoadErrors.Add(new SDTask(new BuildError(assemblyFileName, ex.Message))); WpfViewContent.DllLoadErrors.Add(new SDTask(new BuildError(assemblyFileName, ex.Message)));
} }

28
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.AddIn/Src/WpfViewContent.cs

@ -58,22 +58,10 @@ namespace ICSharpCode.WpfDesign.AddIn
BasicMetadata.Register(); BasicMetadata.Register();
// TODO Move this Initialization to LoadInternal
// WpfToolbox.Instance.AddProjectDlls(file);
ProjectService.ProjectItemAdded += ProjectService_ProjectItemAdded;
this.TabPageText = "${res:FormsDesigner.DesignTabPages.DesignTabPage}"; this.TabPageText = "${res:FormsDesigner.DesignTabPages.DesignTabPage}";
this.IsActiveViewContentChanged += OnIsActiveViewContentChanged; this.IsActiveViewContentChanged += OnIsActiveViewContentChanged;
} }
void ProjectService_ProjectItemAdded(object sender, ProjectItemEventArgs e)
{
// TODO reimplement this!
// if (e.ProjectItem is ReferenceProjectItem)
// WpfToolbox.Instance.AddProjectDlls(this.Files[0]);
}
static WpfViewContent() static WpfViewContent()
{ {
DragDropExceptionHandler.UnhandledException += delegate(object sender, ThreadExceptionEventArgs e) { DragDropExceptionHandler.UnhandledException += delegate(object sender, ThreadExceptionEventArgs e) {
@ -106,6 +94,7 @@ namespace ICSharpCode.WpfDesign.AddIn
designer = new DesignSurface(); designer = new DesignSurface();
this.UserContent = designer; this.UserContent = designer;
InitPropertyEditor(); InitPropertyEditor();
InitWpfToolbox();
} }
this.UserContent = designer; this.UserContent = designer;
if (outline != null) { if (outline != null) {
@ -205,6 +194,19 @@ namespace ICSharpCode.WpfDesign.AddIn
propertyGridView.PropertyGrid.PropertyChanged += OnPropertyGridPropertyChanged; propertyGridView.PropertyGrid.PropertyChanged += OnPropertyGridPropertyChanged;
} }
void InitWpfToolbox()
{
WpfToolbox.Instance.AddProjectDlls(Files[0]);
SD.ProjectService.ProjectItemAdded += OnReferenceAdded;
}
void OnReferenceAdded(object sender, ProjectItemEventArgs e)
{
if (!(e.ProjectItem is ReferenceProjectItem)) return;
if (e.Project != SD.ProjectService.FindProjectContainingFile(Files[0].FileName)) return;
WpfToolbox.Instance.AddProjectDlls(Files[0]);
}
void OnSelectionChanged(object sender, DesignItemCollectionEventArgs e) void OnSelectionChanged(object sender, DesignItemCollectionEventArgs e)
{ {
propertyGridView.PropertyGrid.SelectedItems = DesignContext.Services.Selection.SelectedItems; propertyGridView.PropertyGrid.SelectedItems = DesignContext.Services.Selection.SelectedItems;
@ -281,7 +283,7 @@ namespace ICSharpCode.WpfDesign.AddIn
public override void Dispose() public override void Dispose()
{ {
ProjectService.ProjectItemAdded -= ProjectService_ProjectItemAdded; SD.ProjectService.ProjectItemAdded -= OnReferenceAdded;
propertyContainer.Clear(); propertyContainer.Clear();
base.Dispose(); base.Dispose();

Loading…
Cancel
Save