Wo kommt der Visual-Studio-look für Baugruppen?

Habe ich ein framework besteht aus einer Vielzahl von Basis-Klassen, die abgeleitet werden können, entwickeln viele apps. Zwischen diesen Klassen gibt es eine Unterklasse von System.Windows.Formen.Panel, für die ich schrieb, seinen eigenen designer. Alles ist in Ordnung arbeiten mit Visual Studio 2005, aber etwas geht schief, wenn ich versuche zu bewegen, um VS2010. Dies ist eine stark vereinfachte version von dem, was ich Tue:

Habe ich ein Projekt namens CoreClasse enthält ein interface und zwei Klassen:

public interface IConf
{
    string foo { get; set; }
    void InitFoo();
}

public class SimpleClass
{
    public string foo;
}

public class ConfLoader
{
    public static IConf LoadConf()
    {
        AssemblyName anAssemblyName = new AssemblyName("ConfClasses");
        Assembly anAssembly = Assembly.Load(anAssemblyName);
        IConf result = (IConf)anAssembly.CreateInstance("ConfClasses.ConfClass");
        result.InitFoo();
        return result;
    }
}

Dann gibt es ein Projekt ConfClasses die Verweise CoreClasses und enthält nur eine Klasse Umsetzung IConf:

public class ConfClass : IConf
{
    public SimpleClass confVal;

    public string foo
    {
        get { return confVal.foo; }
        set { confVal.foo = value; }
    }

    public void InitFoo()
    {
        confVal = new SimpleClass();
        confVal.foo = "bar";
    }
}

Und schließlich gibt es ein Projekt für die Kontrollen, die Verweise werden nur CoreClasses und enthält eine Unterklasse von Panel und die damit verbundene designer:

[Designer("MyControls.Design.SimplePanelDesigner", typeof(IRootDesigner))]
public class SimplePanel : Panel
{
    public SimpleClass dummy = new SimpleClass();
}

public class SimplePanelDesigner : DocumentDesigner
{
    public IConf DesignerConf;

    public SimplePanelDesigner()
        : base()
    {
        DesignerConf = ConfLoader.LoadConf();
    }
}

Nun erstelle ich eine weitere Lösung, die Referenzen alle diese dlls und enthält ein leeres Unterklasse von SimplePanel. Wenn ich Doppelklick auf diese Klasse im SolutionExplorer der Konstruktor der SimplePanelDesigner ausgeführt und die Methode LoadConf von ConfLoader genannt wird. Dies bedeutet, dass ConfClasses.dll geladen wird dinamically und eine Instanz von ConfClass erstellt. Alles ist in Ordnung bis zu diesem moment, aber wenn InitFoo genannt wird diese Ausnahme ausgelöst wird:

Konnte nicht geladen, Datei oder assembly 'CoreClasses, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" oder eine seiner Abhängigkeiten. Das system kann nicht die angegebene Datei gefunden werden.

Machen die Dinge schwieriger, die Ausnahme ist eigentlich nicht raisedin diesem Beispiel, aber das ist genau die Art von Wartungsanleitungen meine echte app ausgeführt wird, und die exception die ich erhalte. Ich habe keine Ahnung, was hier geschieht. VS ist die Ausführung einer Methode, die in CoreClasses. Warum ist es zu laden versucht es wieder? Und wo ist es zu suchen? Ich habe in der aktuellen Anwendungsdomäne, auch, aber es hat CoreClasses unter seinen geladenen assemblies, und es scheint nicht zu ändern.

Nur um ein paar mehr details, jedes Projekt bauen Sie in einen gemeinsamen Ordner (nicht die übliche obj/debug-Ordner innerhalb des Projektordners), und es gibt keine andere Kopie von meinem dlls auf dem PC im moment starte ich meinen test. Dann eine Kopie der referenzierten dlls erfolgt in einer Reihe von Ordnern in AppData\Local\Microsoft\VisualStudio\10.0\ProjectAssemblies Ordner von meinem userprofile, und dies scheint der Ort VS sucht für die Baugruppen bei der Montage.Laden ausgeführt wird, und ich kann eine Kopie von CoreClasses es. Ich habe versucht, reinigen Sie alle Ordner, neu erstellen alles, und die verschiedenen Lösungen, die geöffnet/geschlossen, in jeder Kombination, aber ohne Verbesserung.

EDIT:

Als GranMasterFlush vorgeschlagen, dies ist die FusionLog generiert, die von der Ausnahme:

=== Pre-bind state information ===
LOG: User = FCDB\fc0107
LOG: DisplayName = XEngine.Core, Version=1.0.0.1, Culture=neutral, PublicKeyToken=null (Fully-specified)
LOG: Appbase = file:///C:/Program Files (x86)/Microsoft Visual Studio 10.0/Common7/IDE/
LOG: Initial PrivatePath = NULL
Calling assembly : (Unknown).
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe.Config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\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: The same bind was seen before, and was failed with hr = 0x80070002.
ERR: Unrecoverable error occurred during pre-download check (hr = 0x80070002).

EDIT 2

Nur hinzufügen, dass einige info, ich habe einen Blick auf die fusion generierten Protokolle durch mein einfaches Beispiel, und fand heraus, dass genau die gleichen log generiert wurde, während Sie versuchen zu laden, CoreClasses, aber irgendwie VisualStudio einen Weg findet, damit umzugehen.

  • Ich verwendete procmon, um sicherzustellen, dass die Datei es war, beschwerte sich über war eigentlich AppData\Local\Microsoft\VisualStudio\11.0\ProjectAssemblies\<some temporary name>. Am Ende war es weil mein benutzerdefiniertes Steuerelement versucht hatte zu Beginn einen thread (DesignMode- Eigenschaft funktioniert nicht, siehe diese Lösung). Ich fand diese durch Anstrengungen, durch diesem Artikel, wie debug-design-Zeit-Verhalten.
Schreibe einen Kommentar