2016-10-25 4 views
0

Ich habe eine Lösung, die mehrere Projekte verwendet. Vor kurzem habe ich alle meine Ressourcen (.resx-Dateien) in einer anderen DLL, namens MyLibrary.Resources, zentralisiert. So weit, so gut, keine Kompilierung-Fehler, weder Laufzeit, aber in Design-Zeit habe ich dies auf einige meiner Ansichten:Visual Studio Design-Zeit FileNotFoundException auf WPF

FileNotFoundException: Konnte nicht geladen werden Datei oder Assembly ‚MyLibrary.Resources, Version = 1,0. 0.0, Kultur = neutral, PublicKeyToken = 14d55462beec1408 'oder eine seiner Abhängigkeiten. Das System kann die angegebene Datei nicht finden.

Die Linie, die nicht verursacht, ist auf einem Wandler (von den Ansichten verwendet):

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
{ 
    //Non-relevant converter stuff 


    //this line causes the exception 
    string translate = MyLibrary.Resources.Properties.Resources.ResourceManager.GetString(Key); 

    //More non-relevant stuff, with proper return value 
} 

Also meine App ohne Probleme läuft Ich kann, aber ich kann nicht einige Ansichten auf dem Designer sehen.

Dinge im Auge haben:

  • Wenn ich die Linie auf dem Konverter kommentieren, arbeitet Design-Zeit ok, so bin ich sicher, dass dies die Linie ist, die fehlschlägt.
  • MyLibrary.Resources hat keine Verweise auf andere Projekte, es enthält nur 2. Resx-Dateien, die App-Strings speichern.
  • Ich bin mit Visual Studio 2015 auf Windows 10.

Dinge, die ich versucht:

  • prüfen, wenn ich im Design-Modus bin. Ich habe versucht wie 6 verschiedene Methoden zu wissen, ob ich im Design-Modus bin. Keiner von ihnen funktioniert, weil es so aussieht, als würde Design-Zeit den Code ignorieren. wenn ich diesen Code an den Konverter Fügen Sie zum Beispiel:

    if (parameter != null) 
        string translate = MyLibrary.Resources.Properties.Resources.ResourceManager.GetString(Key); 
    

    parameter ist immer null, weil ich es nie verwenden Sie den Konverter anzurufen. Aber in der Entwurfszeit wird die Ausnahme weiterhin geworfen, daher sieht es für mich so aus, als ignoriere es irgendeinen Code.

  • Ich habe versucht, die Entwurfszeit mit einer anderen Instanz von VS zu debuggen, nach mehreren SO-Posts, aber ich kann es nicht funktionieren.

  • Auch ich habe Referenzen zu anderen Bibliotheken aus meiner Sicht, Dinge wie Malerei Leinwand zu tun, so kann ich nicht einfach die "Design Time Creation" aufhören, weil ich eine Menge Informationen verlieren.

Antwort

0

Ein Mitarbeiter von mir hat eine Lösung gefunden. Ich muss nur noch auf einer anderen Funktion die Krachen Referenz setzen, wie folgt aus:

private System.Resources.ResourceManager GetResourceManager() 
{ 
    return MyLibrary.Resources.Properties.Resources.ResourceManager; 
} 

Und dann kann ich überprüfen, ob ich im Debug-Modus bin:

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
{ 
    //Non-relevant converter stuff 


    if ((System.Diagnostics.Process.GetCurrentProcess().ProcessName == "XDesProc")) return value; //use "devenv" instead of "XDesProc" in other versions 
    string translate = GetResourceManager().GetString(Key); 

    //More non-relevant stuff, with proper return value 
} 

Also, es sieht aus wie der Designer überprüft Zeile für Zeile jeden Code auf dem Konverter, auch wenn der Code nicht erreichbar ist, aber nicht durch Funktionen geht.