Autor Beitrag
MitgliedsnameUnbekannt
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Di 29.10.13 16:29 
Hallo :)

Ich habe ein Add In in Visual Studio geschrieben. Dieses soll nun die Datei "Beispiel.txt" in die Projektmappe von dem geöffnetem Programm kopieren. Das funktioniert mit folgender Codezeile fast:

ausblenden C#-Quelltext
1:
m_Solution.Projects.Item(1).ProjectItems.AddFromFileCopy(file);					


aber er fügt diese Datei nun dem Projekt hinzu und nicht, wie gwünscht, der Projektmappe.
Jemand eine Idee was ich ändern kann?
Verdeutliche meine Frage nochmal mit dem Bild im Anhang.

(Es ist wichtig das die Datei während der Laufzeit in dem Projektmappenexplorer angezeigt wird.)


Moderiert von user profile iconChristian S.: Topic aus Basistechnologien verschoben am Mo 04.11.2013 um 11:32
Einloggen, um Attachments anzusehen!
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 29.10.13 17:23 
Hallo,

so viel ich weiß kann eine Projektmappe (Solution) nur Projekte aufnehmen, d.h. es ist unmöglich dort einzelne Dateien zu hinterlegen, s.a. Solution (.Sln) File.
MitgliedsnameUnbekannt Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Di 29.10.13 17:32 
Okay, das kann gut sein.
Ich kann aber mit Rechtsklick auf meine Projektmappe einen neuen Ordner hinzufügen und dort Dateien reinlegen. Dann ist der Ordner nicht in dem Projekt xy sondern in meiner Projektmappe.
Das müsste doch dann auch per Code gehen?
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 29.10.13 17:50 
Einen SolutionFolder kann mann scheinbar auch per API hinzufügen. Darüber aber dann scheinbar nur Projecte aber keinen sonstigen Files, auch wenn der SolutionExplorer das selbst hergibt, hinzufügen.

Wenn man sich die sln Datei ansieht wird der SolutionFolder dort scheinbar genauso behandelt wie ein Project insofern könnte ich mir vorstellen das man den auch genauso ansprechen kann.
Sinnvollerweise mit Namen und nicht mit einem Index.

ausblenden C#-Quelltext
1:
m_Solution.Projects.Item("meinLieberSolutionFolderName").ProjectItems.AddFromFileCopy("meinLieberDateiPfad");					
MitgliedsnameUnbekannt Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Di 29.10.13 17:57 
"Sinnvollerweise mit Namen und nicht mit einem Index."

Ja, das wäre mir auch lieber, aber dann kommt immer folgendes (egal welches item ich mit Namen statt index anspreche):

Falscher Parameter. (Ausnahme von HRESULT: 0x80070057 (E_INVALIDARG))


"Wenn man sich die sln Datei ansieht wird der SolutionFolder dort scheinbar genauso behandelt wie ein Project insofern könnte ich mir vorstellen das man den auch genauso ansprechen kann."

nein, das geht leider nicht. Der SolutionFolder wird nicht als item "anerkannt".
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 29.10.13 18:21 
AddSolutionFolder an der Solution liefert aber ein Project. Hmmh.

Als Trockenübung (mein VS2013 bockt :( da hat sich hoffentlich am DTE Interface nicht zuviel geändert)

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
{
    foreach (Project item in ((DTE2)application).Solution.Projects)
    {
        if (item.Kind == ProjectKinds.vsProjectKindSolutionFolder &&
            item.Name == "meinLieberFolderName")
        {
            item.ProjectItems.AddFromFile("meinLieberFilePfad");
        }
    }           
}
MitgliedsnameUnbekannt Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Di 29.10.13 18:34 
Wenn ich deinen Quelltext, Ralf Jansen, einbaue und eine MessageBox in die Schleife einbringe, die mir jeden Item-Name den er untersucht ausgibt, taucht dort der Name der Projektmappe nicht auf, sondern nur die Projekte oder auch Ordner die in der Projektmappe enthalten sind. Ich möchte ja aber mein File der Projektmappe hinzufügen.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 29.10.13 18:53 
Eine Solution(Projektmappe) kann ja auch direkt keine Files enthalten. Ein Solution besteht aus Projekten. Es gibt aber die Sonderform eines Projekts eben einen Solutionfolder. Dem kann man dann wie jedem Project Dateien hinzufügen. Der erscheint visuell aber eben als Ordner mit Dateien in der Solution und nicht als Projekt. Ergo du mußt deine Dateien in einem Solutionfolder ablegen. Da es diesen Ordner nicht mal physisch auf der Platte gibt sehe ich da auch kein Problem da einen Ordner zu haben.
MitgliedsnameUnbekannt Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Mi 30.10.13 09:39 
genau das ist was ich will! :D aber ich weiß nicht wie. Ich möchte den Ordner ja nicht selbst anlegen sondern während das Programm läuft anlegen lassen.

Moderiert von user profile iconTh69: Full-Quote entfernt.
MitgliedsnameUnbekannt Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Mi 30.10.13 09:56 
habe ich jetzt wie folgt realisiert...

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
Project prj;
SolutionFolder sf;
Solution2 solution = (Solution2)m_Solution;

prj = solution.AddSolutionFolder("Test");


aber ich bekomme diese Fehlermeldung:

"Der Ordner enthält bereits ein Element mit dem Namen "Test", oder der Ordnername ist reserviert."

es ist aber kein Element mit diesem Namen vorhanden... -.-
MitgliedsnameUnbekannt Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Mi 30.10.13 10:08 
hat sich erledigt. Das Problem war das ich die Funktion danach nochmal aufgerufen habe.

Also es ist nun wie folgt gelöst:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
 //Solutionordner hinzufügen
Project project;
Solution2 solution = (Solution2)m_Solution;
project = solution.AddSolutionFolder("neuer Ordner");

//Datei hinzufügen
project.ProjectItems.AddFromFileCopy(filepath);


Danke für jede Hilfe! [: