如何使用C#获取当前项目目录路径

时间:2012-06-27 02:54:49

标签: c# .net

好的,这是问题所在。我有两个项目,一个是C#Console,另一个是类库。 我从控制台应用程序访问/调用类库方法。 在类库项目中有一个名为Files的文件夹。

我需要获取类库的文件夹的路径,但每当我使用

System.IO.Directory.GetCurrentDirectory();

Environment.CurrentDirectory; 

它给了我控制台项目的路径,我用它来调用方法。

以上方法给我的路径如

C:\\ConsolePro\\bin\\Debug

但我需要类库项目的路径

C:\\ClassLibPro\\bin\\Debug

请告知

9 个答案:

答案 0 :(得分:9)

编译并运行代码后,“项目路径”没有任何意义。您可以确定所有已编译程序集的文件位置。如果您的Console项目直接引用构建的“类库”DLL,而不是通过项目引用,那么您只能这样做。

然后,您可以使用Reflection来获取装配路径;

string path = Assembly.GetAssembly(typeof (SomeClassInOtherProject)).Location;

答案 1 :(得分:3)

如果从其他程序集加载类库。

string Path = System.Reflection.Assembly.GetAssembly(typeof({LibraryClassName})).Location;

string PathToClassLibPro = Path.GetDirectoryName( Path);

{LibraryClassName}替换为您的图书馆的班级名称。

答案 2 :(得分:3)

我认为问题是:

由于Console项目具有DLL文件引用,因此它使用DLL来调用任何方法。 此时它返回类库projct的DLL位置,该位置位于控制台项目的bin目录中,它不知道类库项目的物理位置。

所以基本上它返回相同的项目路径。我必须将两个项目都移到同一目录中才能解决这个问题。

答案 3 :(得分:2)

我希望我能正确理解你:

Path.GetDirectoryName(typeof(Foo.MyFooClass).Assembly.Location);

答案 4 :(得分:1)

您应该能够使用Directory.GetParent(Directory.GetCurrentDirectory())几次来获取更高级别的目录,然后将lib目录的路径添加到该目录的末尾。

答案 5 :(得分:1)

在无法访问我的命名空间的bin / debug文件夹中的文件时,我也遇到了这个确切的问题。我的解决方案是使用Split()处理字符串,然后构造一个新字符串,这是我在命名空间中拥有的json文件的绝对路径。

private static string GetFilePath()
        {            
            const char Escape = '\\'; //can't have '\' by itself, it'll throw the "Newline in constant" error
            string directory = Environment.CurrentDirectory;
            string[] pathOccurences = directory.Split(Escape);            
            string pathToReturn = pathOccurences[0] + Escape; //prevents index out of bounds in upcoming loop
            for(int i = 1; i < pathOccurences.Length; i++)
            {
                if (pathOccurences[i] != pathOccurences[i - 1]) //the project file name and the namespace file name are the same
                    pathToReturn += pathOccurences[i] + Escape;
                else
                    pathToReturn += typeof(thisClass).Namespace + Escape; //In the one occurrence of the duplicate substring, I replace it with my class Namespace name
            }
            return pathToReturn + "yourFile.json";
        }

我个人不喜欢这种解决方案,但这是我能想到的唯一答案。

答案 6 :(得分:0)

我会推荐两个选项中的一个。

  1. 如果文件很小,请将它们包含在类库中,并在需要时将它们流式传输到临时位置

  2. 其他选项是在构建期间将文件复制到输出目录并以这种方式使用它们。在多个共享项目的情况下,最好有一个公共bin文件夹,您可以将程序集复制到该位置并从该位置运行。

答案 7 :(得分:0)

尽管我找不到一个好的解决方案但我使用这个技巧: 只要您想回到理想的路径,就应该添加 Directory.GetParent()而不是 ......

  Directory.GetParent(...(Directory.GetParent(Directory.GetCurrentDirectory()).ToString()...).ToString()

答案 8 :(得分:0)

我使用以下方法在运行时获取当前项目路径:

public static class ProjectInfo {
   public static string appDirectory = AppDomain.CurrentDomain.BaseDirectory;
   public static string projectPath = appDirectory.Substring(0, appDirectory.IndexOf("\\bin"));
}