Au lieu d'exécuter un programme externe avec son chemin d'accès codé en dur, j'aimerais obtenir le Dir de projet actuel. J'appelle un programme externe en utilisant un processus dans la tâche personnalisée.
Comment pourrais-je faire ça? AppDomain.CurrentDomain.BaseDirectory me donne juste l'emplacement de VS 2008.
la source
Si un projet s'exécute sur un IIS Express, le
Environment.CurrentDirectory
peut pointer vers l'emplacement d'IIS Express (le chemin d'accès par défaut serait C: \ Program Files (x86) \ IIS Express ), pas vers l'emplacement de votre projet.C'est probablement le chemin de répertoire le plus approprié pour différents types de projets.
C'est la définition MSDN.
la source
Cela vous donnera également le répertoire du projet en naviguant de deux niveaux vers le haut à partir du répertoire d'exécution actuel (cela ne retournera pas le répertoire du projet pour chaque build, mais c'est le plus courant).
Bien sûr, vous voudriez contenir cela dans une sorte de logique de validation / gestion des erreurs.
la source
Si vous voulez savoir quel est le répertoire où se trouve votre solution, vous devez faire ceci:
Si vous ne laissez qu'avec la
GetCurrrentDirectory()
méthode, vous obtenez le dossier de construction, peu importe si vous déboguez ou publiez. J'espère que cette aide! Si vous oubliez les validations, ce serait comme ceci:la source
Je cherchais ça aussi. J'ai un projet qui exécute HWC, et j'aimerais garder le site Web hors de l'arborescence des applications, mais je ne veux pas le garder dans le répertoire de débogage (ou de publication). FWIW, la solution acceptée (et celle-ci également) identifie uniquement le répertoire dans lequel s'exécute l'exécutable.
Pour trouver ce répertoire, j'ai utilisé
la source
Basé sur la réponse de Gucu112 , mais pour l'application .NET Core Console / Window, cela devrait être:
J'utilise ceci dans un projet xUnit pour une application Windows .NET Core.
la source
Une autre façon de faire cela
Si vous souhaitez obtenir le chemin du dossier bin
Peut-être qu'il y a un meilleur moyen =)
la source
Encore une autre solution imparfaite (mais peut-être un peu plus proche de la perfection que certaines des autres):
Cette version renverra le dossier des projets en cours même si le projet en cours n'est pas le
Startup Project
pour la solution.Le premier défaut avec ceci est que j'ai ignoré toutes les vérifications d'erreurs. Cela peut être résolu assez facilement mais ne devrait être un problème que si vous stockez votre projet dans le répertoire racine du lecteur ou si vous utilisez une jonction dans votre chemin (et cette jonction est un descendant du dossier de solution) donc ce scénario est peu probable . Je ne suis pas tout à fait sûr que Visual Studio puisse gérer l'une de ces configurations de toute façon.
Un autre problème (plus probable) que vous pouvez rencontrer est que le nom du projet doit correspondre au nom du dossier du projet pour qu'il soit trouvé.
Un autre problème que vous pouvez rencontrer est que le projet doit se trouver dans le dossier de solution. Ce n'est généralement pas un problème, mais si vous avez utilisé l'
Add Existing Project to Solution
option pour ajouter le projet à la solution, cela peut ne pas être la façon dont votre solution est organisée.Enfin, si votre application modifie le répertoire de travail, vous devez stocker cette valeur avant de le faire car cette valeur est déterminée par rapport au répertoire de travail actuel.
Bien sûr, tout cela signifie également que vous ne devez pas modifier les valeurs par défaut des options
Build
->Output path
ouDebug
-> de vos projetsWorking directory
dans la boîte de dialogue des propriétés du projet.la source
Essayez ceci, c'est simple
la source
Cette solution fonctionne bien pour moi, sur Develop mais aussi sur les serveurs TEST et PROD avec ASP.NET MVC5 via C # :
Si vous avez besoin du répertoire du projet dans le fichier de configuration du projet, utilisez:
la source
Après avoir finalement fini de peaufiner ma première réponse concernant l'utilisation des chaînes publiques pour obtenir une réponse, je me suis rendu compte que vous pouviez probablement lire une valeur du registre pour obtenir le résultat souhaité. En fait, cet itinéraire était encore plus court:
Tout d'abord, vous devez inclure l'espace de noms Microsoft.Win32 afin de pouvoir travailler avec le registre:
Voici le code principal:
Une note sur cette réponse:
J'utilise Visual Studio 2008 Professional Edition. Si vous utilisez une autre version (par exemple, 2003, 2005, 2010, etc.), vous n'aurez peut-être pas à modifier la partie «version» de la chaîne de sous-clé (par exemple, 8.0, 7.0; etc.).
Si vous utilisez l'une de mes réponses, et si ce n'est pas trop demander, alors j'aimerais savoir laquelle de mes méthodes vous avez utilisée et pourquoi. Bonne chance.
la source
J'ai eu une situation similaire, et après des Googles infructueux, j'ai déclaré une chaîne publique, qui modifie une valeur de chaîne du chemin de débogage / de publication pour obtenir le chemin du projet. Un avantage de l'utilisation de cette méthode est que puisqu'elle utilise le répertoire du projet currect, peu importe si vous travaillez à partir d'un répertoire de débogage ou d'un répertoire de version:
Vous pourrez alors l'appeler quand vous le souhaitez, en utilisant une seule ligne:
Cela devrait fonctionner dans la plupart des cas.
la source
Utilisez ceci pour obtenir le répertoire du projet (a fonctionné pour moi):
la source
la source
J'ai utilisé la solution suivante pour faire le travail:
la source
Essayer:
Cette solution différente des autres prend également en compte une éventuelle build x86 ou x64.
la source
La meilleure solution
Autre solution
Testez-le, AppDomain.CurrentDomain.BaseDirectory a travaillé pour moi sur le projet précédent, maintenant je reçois le dossier de débogage .... la BONNE réponse sélectionnée ne fonctionne tout simplement pas !.
la source
Si vous voulez vraiment vous assurer d'obtenir le répertoire du projet source, quel que soit le chemin de sortie du bac:
Ajoutez une ligne de commande d'événement de pré-génération (Visual Studio: Propriétés du projet -> Événements de génération):
echo $(MSBuildProjectDirectory) > $(MSBuildProjectDirectory)\Resources\ProjectDirectory.txt
Ajoutez le
ProjectDirectory.txt
fichier au Resources.resx du projet (s'il n'existe pas encore, faites un clic droit sur projet -> Ajouter un nouvel élément -> Fichier de ressources)Resources.ProjectDirectory
.la source
Cela fonctionne sur les configurations VS2017 avec SDK Core MSBuild.
Vous devez utiliser NuGet dans les packages EnvDTE / EnvDTE80.
N'utilisez pas COM ou Interop. rien ... des ordures !!
la source
Directory.GetParent (Directory.GetCurrentDirectory ()). Parent.Parent.Parent.Parent.FullName
Vous donnera le répertoire du projet.
la source