2016-04-12 14 views
1

Ich muss alle meine Projekte zwingen, dll's zu verwenden, die an einem gemeinsamen Speicherort gespeichert sind. Ich beginne mit dem Refactoring bestehender Projekte, um auf den dll's Quellordner meiner Präferenz zu verweisen. Also entschied ich mich, einen programmatischen Weg zu versuchen, diese Referenzen zu ändern.DLL-Referenzen in Projektdatei programmatisch ändern

las ich dll Hinweise, wie folgend:

XNamespace msbuild = "http://schemas.microsoft.com/developer/msbuild/2003"; 
      XDocument projDefinition = XDocument.Load(filePath); 
      IEnumerable<string> references = projDefinition 
       .Element(msbuild + "Project") 
       .Elements(msbuild + "ItemGroup") 
       .Elements(msbuild + "Reference") 
       .Elements(msbuild + "HintPath") 
       .Select(refElem => refElem.Value); 

Der nächste Schritt ist anhand zu ändern HintPath basierend auf Referenznamen. Ich plane, ein Wörterbuch von Verweisen zu erstellen und dann durchlaufen sie, um jede der Projektdateien zu aktualisieren.

Allerdings kann ich keine solide Art zu lesen und zu ändern HintPath basierend auf Reference innerhalb csproj finden.

+0

Schauen Sie sich diese Antwort auf eine ähnliche Frage: http://stackoverflow.com/a/35233082/33082 –

+0

Die Antwort zeigt genau das, was ich tue, und es Dumps die Referenz, die zu einer txt gelesen wurde. Nicht sehr nützlich. Was ich brauche, ist in der Lage, HintPath basierend auf der Referenz zu modifizieren. – eYe

Antwort

0

Ich bin wahrscheinlich ziemlich spät zu diesem und ich bin noch, diese spezielle Anwendung zu testen, aber Sie sollten in der Lage sein, den Code zu nehmen, und entfernen Sie die .Select(refElem => refElem.Value) vor der Iteration der Referenzen.

Dadurch erhalten Sie Zugriff auf das Element selbst und sollten eine Aktualisierung des Werts für das Element ermöglichen. Sobald Sie alle erforderlichen Werte geändert haben, können Sie das XMLdoc zurück in die proj-Datei schreiben.

XNamespace msbuild = "http://schemas.microsoft.com/developer/msbuild/2003"; 
     XDocument projDefinition = XDocument.Load(filePath); 
     IEnumerable<string> references = projDefinition 
      .Element(msbuild + "Project") 
      .Elements(msbuild + "ItemGroup") 
      .Elements(msbuild + "Reference") 
      .Elements(msbuild + "HintPath"); 
     foreach(var element in references) 
     { 
      // do what you need to in order to update the reference 
     } 
     projDefinition.Save(filePath);