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

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

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

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

@ -58,21 +58,9 @@ namespace ICSharpCode.WpfDesign.AddIn @@ -58,21 +58,9 @@ namespace ICSharpCode.WpfDesign.AddIn
BasicMetadata.Register();
// TODO Move this Initialization to LoadInternal
// WpfToolbox.Instance.AddProjectDlls(file);
ProjectService.ProjectItemAdded += ProjectService_ProjectItemAdded;
this.TabPageText = "${res:FormsDesigner.DesignTabPages.DesignTabPage}";
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()
{
@ -106,6 +94,7 @@ namespace ICSharpCode.WpfDesign.AddIn @@ -106,6 +94,7 @@ namespace ICSharpCode.WpfDesign.AddIn
designer = new DesignSurface();
this.UserContent = designer;
InitPropertyEditor();
InitWpfToolbox();
}
this.UserContent = designer;
if (outline != null) {
@ -204,6 +193,19 @@ namespace ICSharpCode.WpfDesign.AddIn @@ -204,6 +193,19 @@ namespace ICSharpCode.WpfDesign.AddIn
propertyContainer.PropertyGridReplacementContent = propertyGridView;
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)
{
@ -281,7 +283,7 @@ namespace ICSharpCode.WpfDesign.AddIn @@ -281,7 +283,7 @@ namespace ICSharpCode.WpfDesign.AddIn
public override void Dispose()
{
ProjectService.ProjectItemAdded -= ProjectService_ProjectItemAdded;
SD.ProjectService.ProjectItemAdded -= OnReferenceAdded;
propertyContainer.Clear();
base.Dispose();

Loading…
Cancel
Save