2009-05-13 8 views
1

Bonjour les gars d'abord s'excuser d'avoir posé une question aussi simple et pourtant redondante mais il semble que mon cas soit un peu différent lorsque googling n'a pas réussi à fournir des réponses. J'ai une solution avec 2 projets dire proj1 et proj2 où proj1 est une application Winform et proj2 est un application.proj1 classlibrary est assis iciChemin du répertoire racine Winform.Comment encore!

C: \ Documents and Settings \ myname \ Mes documents \ Visual Studio 2005 \ Projects \ proj1 \ proj1

ane le classlibrary est ici

C: \ Documents and Settings \ myname \ Mes documents \ Visual studio 2005 \ Projects \ proj1 \ proj2

Maintenant, j'ai un rapport dans un rapport du sous-dossier où j'ai mon CrystalReport et d'autres étoffes je dois avoir ce chemin racine de proj1

C: \ Documents and Settings \ myname \ Mes documents \ visuels Studio 2005 \ Projects \ proj1 \ proj1

de sorte que j'ajoute @"Report\myreport.rpt" à celui-ci. Je crois avec ce qu'il est censé être un chemin relatif au déploiement me machine.correct si je suis wrong.the idée principale est d'avoir un chemin relatif au dossier rapport à

C: \ Documents and Settings \ myname \ Mes documents \ Visual Studio 2005 \ Projects \ proj1 \ proj \ Report.

de tout ce que je cherchai en ligne comme Environment.CurrentDirectory ou Application.StartupPath ou Application.ExecutablePath ou System.Reflection.Assembly.GetExecutingAssembly().Location sont juste de me donner soit le bac/proj1.exe ou le dossier de débogage. je ne peux pas comprendre comment faire cela

merci de lire ceci.oh yeah! et pour votre réponse aimable. PS: en utilisant C# 2.0

+0

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

Répondre

4

Il vous suffit de définir la propriété "Copier dans le répertoire de sortie" du fichier de rapport sur "Copier toujours" ou "Copier si plus récent". Cela va copier le rapport ci-dessous le répertoire de sortie réel au cours d'une construction et vous pouvez y accéder avec Path.Combine(Application.StartupPath, "Reports", "report.rpt").

+0

Merci pour la suggestion. Je viens de sortir le truc avec un messagebox et de voir dans le dossier de débogage. C'est correct, je ne l'ai pas encore incorporé dans mon projet mais je crois que ça marcherait.Il n'y a pas de Path.Join dans mon. Net 2.0 peut-être sur 3.5 mais de toute façon j'utilise le Path.combine.Thanks mec –

+0

Correction que ... Rejoindre est Python, je pense ... –

1

Je pense que la meilleure façon de trouver le dossier dans lequel votre assemblage est situé est la suivante:

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

... et en utilisant cette fonction, vous pouvez obtenir votre chemin de rapport:

Path.Combine(GetAppFolder(), @"Report\myreport.rpt") 
+0

Merci pour la réponse rapide.J'ai sorti une suggestion avec un messagebox et je vais avoir ce ... \ bin \ debug \ Report \ myreport.rpt.Je suppose que je t ne fonctionnera pas dans mon cas –

+0

Si vous exécutez votre application à partir de Visual Studio et si vous exécutez une version de débogage, elle sera exécutée à partir du répertoire bin \ debug. Si vous déplacez votre fichier .exe (et le répertoire Report) vers un autre répertoire, GetAppPath() retournera ce répertoire à la place. La partie "bin \ debug" n'est pas compilée dans le programme. Je suppose que le "rapport" est un sous-répertoire dans le répertoire où se trouve votre fichier .exe? –

3

Tu ne vas pas obtenir le dossier projet de l'ensemble compilé parce que (pour autant que je sache), il n'a aucune idée où il a été compilée à partir. Vous allez cependant obtenir le dossier où l'assembly est en cours d'exécution à partir de, qui est le "dossier de débogage" que vous obtenez de Application.ExecutablePath.

Il vaudrait mieux copier les rapports dans un dossier Reports dans le dossier bin/debug et y accéder à partir de là (vous pouvez utiliser Application.ExecutablePath pour l'obtenir).Ensuite, lorsque vous devez déplacer les fichiers compilés, vous pouvez déplacer le dossier Rapports avec.

Lorsque vous déployez, vous auriez alors la structure suivante:

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

et non les éléments suivants (qui est ce que vous proposez?):

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

merci pour la réponse.J'ai utilisé la méthode de Daniel mais le vôtre et le sien sont très similaires.since j'ai besoin de faire d'autres changements au rapport que je vais vouloir avoir accès à travers l'explorateur de solution je choisis son.Merci beaucoup –

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