而不是运行其路径硬编码的外部程序,我想获得当前的项目目录。我正在使用自定义任务中的进程调用外部程序。
我该怎么做呢?AppDomain.CurrentDomain.BaseDirectory只是给了我VS 2008的位置。
而不是运行其路径硬编码的外部程序,我想获得当前的项目目录。我正在使用自定义任务中的进程调用外部程序。
我该怎么做呢?AppDomain.CurrentDomain.BaseDirectory只是给了我VS 2008的位置。
当前回答
另一种方法
string startupPath = System.IO.Directory.GetParent(@"./").FullName;
如果你想获取bin文件夹的路径
string startupPath = System.IO.Directory.GetParent(@"../").FullName;
也许有更好的方法=)
其他回答
.Parent.Parent.Parent.Parent.FullName Directory.GetParent (Directory.GetCurrentDirectory ())
会给你项目目录。
另一种方法
string startupPath = System.IO.Directory.GetParent(@"./").FullName;
如果你想获取bin文件夹的路径
string startupPath = System.IO.Directory.GetParent(@"../").FullName;
也许有更好的方法=)
这个解决方案很适合我,在开发和测试和PROD服务器上使用ASP。NET MVC5通过c#:
var projectDir = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory);
如果你需要项目目录中的项目配置文件使用:
$(ProjectDir)
使用这个来获得项目目录(为我工作):
string projectPath =
Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName;
这适用于VS2017 w/ SDK核心MSBuild配置。
您需要在EnvDTE / EnvDTE80包中NuGet。
不要使用COM或互操作。任何东西……垃圾! !
internal class Program {
private static readonly DTE2 _dte2;
// Static Constructor
static Program() {
_dte2 = (DTE2)Marshal.GetActiveObject("VisualStudio.DTE.15.0");
}
private static void FindProjectsIn(ProjectItem item, List<Project> results) {
if (item.Object is Project) {
var proj = (Project) item.Object;
if (new Guid(proj.Kind) != new Guid(Constants.vsProjectItemKindPhysicalFolder))
results.Add((Project) item.Object);
else
foreach (ProjectItem innerItem in proj.ProjectItems)
FindProjectsIn(innerItem, results);
}
if (item.ProjectItems != null)
foreach (ProjectItem innerItem in item.ProjectItems)
FindProjectsIn(innerItem, results);
}
private static void FindProjectsIn(UIHierarchyItem item, List<Project> results) {
if (item.Object is Project) {
var proj = (Project) item.Object;
if (new Guid(proj.Kind) != new Guid(Constants.vsProjectItemKindPhysicalFolder))
results.Add((Project) item.Object);
else
foreach (ProjectItem innerItem in proj.ProjectItems)
FindProjectsIn(innerItem, results);
}
foreach (UIHierarchyItem innerItem in item.UIHierarchyItems)
FindProjectsIn(innerItem, results);
}
private static IEnumerable<Project> GetEnvDTEProjectsInSolution() {
var ret = new List<Project>();
var hierarchy = _dte2.ToolWindows.SolutionExplorer;
foreach (UIHierarchyItem innerItem in hierarchy.UIHierarchyItems)
FindProjectsIn(innerItem, ret);
return ret;
}
private static void Main() {
var projects = GetEnvDTEProjectsInSolution();
var solutiondir = Path.GetDirectoryName(_dte2.Solution.FullName);
// TODO
...
var project = projects.FirstOrDefault(p => p.Name == <current project>);
Console.WriteLine(project.FullName);
}
}