2010-10-25 7 views
10

Ich verbringe die meiste Zeit damit, Steuerelemente für WPF und Silverlight mit derselben Codebasis zu entwickeln. Dazu füge ich bestehende Dateien aus einem Projekt (zB Silverlight) "als Links" zum anderen hinzu (zB WPF). Für kleinere Unterschiede verwende ich Präprozessordirektiven wieVisual Studio: "Dieses Dokument wird von einem anderen Projekt geöffnet"

#if SILVERLIGHT 
... 
#else 
... 
#endif 

Der Code in diesen Blöcken ausgegraut ist abhängig von der Art des Projekts Sie die Datei aus geöffnet haben. Wenn Sie Ihre Datei also vom Silverlight-Projekt aus öffnen (wo SILVERLIGHT definiert ist), ist der else-Teil grau und Intellisense funktioniert nicht.

Damit der WPF-Teil von der IDE verarbeitet werden kann (mit Farb- und Intellisense-Unterstützung), müssen Sie die Datei aus dem WPF-Projekt öffnen. Wenn Sie dies versuchen, erhalten Sie ein Meldungsfeld mit der Nachricht "Dieses Dokument wird von einem anderen Projekt geöffnet" und wenn Sie auf OK klicken, wird diese Datei im Kontext des Silverlight-Projekts angezeigt (nicht das, was ich sehen wollte). Also muss ich die Datei schließen, wieder zum WPF-Projekt navigieren und die Datei erneut öffnen. Das ist sehr, sehr nervig.

Die Frage ist also: Gibt es eine Art von Einstellung oder Add-on, die Visual Studio die Datei aus dem Projekt neu öffnen würde, wo ich doppelt klickte, anstatt diese dumme Nachricht anzuzeigen und zeigt mir diese Datei vom "falschen" Projekt?

+4

Bis jetzt keine Lösung für dieses Problem außer das Schließen der Datei. Es ist auch der Grund für die DLL-Sperre "Nicht in der Lage zu erstellen ..." Ausnahme in VS2010. –

+0

Ich frage mich, ob es für Add-In theoretisch möglich ist, dies zu behandeln: benachrichtigt werden, bevor Benutzer versucht, eine Datei zu öffnen, wenn die gleiche Datei bereits aus einem anderen Projekt geöffnet ist, schließen Sie die Datei und öffnen Sie das aktuelle Projekt erneut. Klingt machbar, wenn solche APIs vorhanden sind. –

+1

Mann, das wäre wirklich gut. Es ist ärgerlich, die Datei ständig zu schließen und zu öffnen. – andrecarlucci

Antwort

2

Sie könnten die Arbeit mit Teilklassen und mehreren Dateien vereinfachen: Gemeinsamer Code, der für WPF und Silverlight in einer gemeinsamen verknüpften Datei identisch ist, und eine separate Datei für jeden, der den spezifischen Code enthält das eine oder das andere (mit identischen Methoden/Eigenschaftensignaturen), von denen jedes nur in einem der Projekte ist. Auf diese Weise können sowohl die WPF- als auch die Silverlight-Version auf einmal geöffnet werden (da es sich um separate Dateien handelt), wobei zusätzliche Kosten für die Verwaltung von Dateien anfallen.

Darüber hinaus erhalten Sie zusätzlichen Speicher und separate Lösungen.

+0

Ich teile Dateien zwischen zwei Projekten in der gleichen Lösung - und schlechte VS gibt mir ständig diese Nachricht "von einem anderen Projekt geöffnet". Dieser Fehler ist für mehrere Versionen von VS vorhanden (ich verwende VS2015). Ich frage mich, ob jemand es MSFT gemeldet hat, so dass sie sich dessen bewusst sind. –

4

Dies ist mir etwa zweimal in einem Monat passiert, nicht in einer WPF-Anwendung. Keine Ahnung, warum das passiert, aber in beiden Fällen bestand die Lösung darin, die Lösung zu bereinigen, den PC neu zu starten (Visual Studio nicht nur neu zu starten) und dann die Lösung zu erstellen.

1

Ja, dies ist mit Visual Studio Shell möglich.

Erstes instantiate EnvDTE80.DTE2 Objekt:

private static EnvDTE80.DTE2 _dte; 

public static EnvDTE80.DTE2 DTE 
{ 
    get 
    { 
     if (_dte == null) 
      _dte = ServiceProvider.GlobalProvider.GetService(typeof(DTE)) as DTE2; 

     return _dte; 
    } 
} 

und dann:

// On Document Opening, close the existing instances. 
// This event occurs when you double-click file in Solution Explorer. 

DTE.Events.DocumentEvents.DocumentOpening += (s, e) => 
{ 
    if(!DTE.ItemOperations.IsFileOpen(YOURFILENAME)) 
     return; 

    foreach(Window win in DTE.Documents.Cast<Document>() 
         .FirstOrDefault(s => s.FullName == YOURFILENAME).Windows)) 
     win.Close(); 
} 

// next; VS itself will call DTE.ItemOperatins.OpenFile(YOURFILENAME); 

HTH.

1

Es fiel mir auf, als ich ein Projekt hatte, das eine verknüpfte Datei eines anderen Projekts unter einer VS-Lösung enthielt. Als ich versuchte, zu der Definition einer Methode in verknüpfter Datei zu navigieren, wurde VS mit einer Nachricht aufgefordert, dass dieses Dokument von einem anderen Projekt geöffnet wird.

Um dies zu beheben, musste ich entladen das Projekt, das die ursprüngliche Datei aus der VS-Lösung besitzt. Danach war das Navigieren zur Methodendefinition in normaler Zeit und Debuggingzeit kein Problem.

Verwandte Themen