2009-05-13 5 views
1

Hallo Leute, entschuldigen Sie sich zuerst dafür, dass Sie eine so einfache und doch überflüssige Frage gestellt haben, aber es scheint, dass mein Fall ein bisschen anders ist, wo Googeln keine Antworten lieferte. Ich habe eine Lösung mit 2 Projekten sagen proj1 und proj2 wo proj1 eine winform Anwendung ist und proj2 ein Classlibrary application.proj1 ist hierWinform-Stammverzeichnispfad.Wie wieder!

C sitzt: \ Dokumente und Einstellungen \ myname \ Eigene Dateien \ Visual Studio 2005 \ Projects \ proj1 \ proj1

an den Classlibrary hier ist

C: \ Dokumente und Einstellungen \ myname \ Eigene Dateien \ Visual Studio 2005 \ Projects \ proj1 \ proj2

Jetzt habe ich einen Bericht in einem Unterordner Bericht, wo ich meine Crystal haben und andere Stoffe ich diese Root-Pfad von proj1 haben müssen

C: \ Dokumente und Einstellungen \ myname \ Eigene Dateien \ Visual Studio 2005 \ Projects \ proj1 \ proj1

so dass ich @"Report\myreport.rpt" daran anhängen. Ich glaube, mit, dass es angenommen hat, relativer Pfad sein auf dem machine.correct sie entfalten, wenn ich falsch.Die Leitgedanke bin, ist bei

C relativen Pfad zu dem Bericht Ordner zu haben: \ Dokumente und Einstellungen \ myname \ Eigene Dateien \ Visual Studio 2005 \ Projects \ proj1 \ proj \ Report.

von allen i Online wie Environment.CurrentDirectory gesucht oder Application.StartupPath oder Application.ExecutablePath oder System.Reflection.Assembly.GetExecutingAssembly().Location sind mir gerade gegeben entweder die bin/proj1.exe oder die Debug-Ordner. ich kann einfach nicht herausfinden, wie man das macht

danke für das Lesen this.oh yeah! und für deine freundliche Antwort. PS: mit C# 2.0

+0

dieses http: //stackoverflow.com/questions/3057763/how-do-you-get-the-solution-directory-in-c-sharp-vs-2008-in-code – nawfal

Antwort

4

Sie müssen nur die Eigenschaft "Copy to Output Directory" der Berichtsdatei auf "Copy allways" oder "Copy if neuer" setzen. Dies kopiert den Bericht unterhalb des tatsächlichen Ausgabeverzeichnisses während eines Builds und Sie können darauf mit Path.Combine(Application.StartupPath, "Reports", "report.rpt") zugreifen.

+0

Danke für den Vorschlag.Ich nur die Sachen mit einer Messagebox ausgeben und sehen Sie im Debug-Ordner.Es ist korrekt, ich habe es noch nicht in meinem Projekt aufgenommen, aber ich glaube, es würde funktionieren.Es gibt keine Path.Join in meinem. Net 2.0 vielleicht auf 3.5, aber ich benutze sowieso die Path.combine.Thanks dude –

+0

Fixed, dass ... Join ist Python, denke ich ... –

1

Ich denke, die sicherste Art und Weise, zu finden Ordner Ihrer Assembly befindet sich dies:

private static string GetAppFolder() 
{ 
    return new FileInfo(Assembly.GetExecutingAssembly().Location).Directory.FullName; 
} 

... und diese Funktion verwenden, können Sie Ihren Bericht Pfad erhalten:

+0

Danke für die schnelle Antwort. Ich gebe Ihnen einen Vorschlag mit einem messagebox und ich habe das ... \ bin \ debug \ Report \ myreport.rpt.Ich denke ich t funktioniert nicht in meinem Fall –

+0

Wenn Sie Ihre Anwendung in Visual Studio ausführen und wenn Sie einen Debug-Build ausführen, wird es aus dem bin \ debug-Verzeichnis ausgeführt. Wenn Sie Ihre EXE-Datei (und das Berichtsverzeichnis) in ein anderes Verzeichnis verschieben, gibt GetAppPath() stattdessen dieses Verzeichnis zurück. Der "bin \ debug" -Teil wird nicht in das Programm kompiliert. Ich nehme an, dass der "Bericht" ein Unterverzeichnis zu dem Verzeichnis ist, in dem sich Ihre .exe-Datei befindet? –

3

Sie werden nicht das Projekt Ordner von der kompilierten Assembly bekommen, weil (soweit ich weiß) es keine Ahnung hat, wo es kompiliert wurde. Sie werden jedoch den Ordner erhalten, in dem die Assembly von ausgeführt wird. Dies ist der "Debug-Ordner", den Sie von Application.ExecutablePath erhalten.

Sie wären besser dran, die Berichte in einen Ordner Berichte in den Ordner bin/debug zu kopieren und von dort auf sie zuzugreifen (Sie könnten Application.ExecutablePath verwenden, um dies zu erhalten).Wenn Sie dann die kompilierten Dateien verschieben müssen, können Sie den Ordner Berichte damit verschieben.

Wenn Sie bereitstellen, würden Sie dann folgende Struktur haben:

C:\Program Files\proj1\proj1.exe 
C:\Program Files\proj1\Reports\myreport.rpt

und nicht die folgenden (das ist, was Sie vorschlagen?):

C:\Program Files\proj1\proj1.exe 
C:\Documents and Settings\myname\My Documents\Visual Studio 2005\Projects\proj1\Reports\myreport.rpt
+0

danke für die Antwort.Ich verwendete Daniels Methode, aber Ihre und seine sind sehr ähnlich Ich muss weitere Änderungen an dem Bericht vornehmen, den ich gerne über den Lösungs-Explorer habe. Ich wähle seinen. Vielen Dank –

2
string path =new DirectoryInfo(Environment.CurrentDirectory).Parent.Parent.FullName