在代码中获取CSproj路径

时间:2008-10-23 02:47:57

标签: c#

如何获取当前csproject的路径?

假设我有一个csproject名称MyProj.csproj,里面有一个类想知道这个csproj的文件路径是什么,有关如何做到这一点的任何想法?感谢。

3 个答案:

答案 0 :(得分:4)

除非您在讨论为Visual Studio创建插件,否则一旦您的程序编译并运行,CsProj文件就不再存在(就您的代码而言)。

CsProj实际上用于指示编译器如何将C#代码编译到程序集中。在那之后,CsProj留在开发人员的工作站上,因为应用程序的“最终用户”不需要它。

答案 1 :(得分:2)

如果你真的必须这样做,我会考虑元编程。在解决方案中创建另一个项目,该项目构建一个带有一个参数的命令行exe。命令行exe项目应该输出一个cs文件,该文件包含一个带有静态属性的类,返回在命令行传递的值。

然后,作为您的其他项目的预构建步骤,使用ProjectDir变量调用此命令行exe(您将需要构建顺序,以便首先构建命令行exe),以便命令行参数为你的项目目录。

您还需要使用csproj来包含将由命令行输出的文件,以便将其合并到已编译的程序集中。您的主汇编代码可以调用生成的类的静态属性,从而访问路径。

当然,仅仅因为你能做到这一点,并不意味着你应该这样做;我只是假设你已经确定你必须为你的项目做这件事。

答案 2 :(得分:1)

我刚刚发现了这一点,并且罗斯林有一种非常简单的方法。

string solutionPath = @"C:\Users\...\PathToSolution\MySolution.sln";
var msWorkspace = MSBuildWorkspace.Create();

var solution = msWorkspace.OpenSolutionAsync(solutionPath).Result;
foreach (var project in solution.Projects)
{
    foreach (var document in project.Documents)
    {
        //get all C# Files here
    }
}

如果您只想拥有CSproj文件。你可以得到这样的路径

var path=solution.FilePath;