繁体   English   中英

在代码中获取CSproj路径

[英]Get CSproj path in code

如何获取当前csproject的路径?

假设我有一个csproject名称MyProj.csproj ,里面有一个类想知道这个csproj的文件路径是什么,关于如何执行此操作的任何想法? 谢谢。

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

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

如果您确实必须执行此操作,那么我将考虑元编程。 在解决方案中创建另一个项目,该项目将构建一个带有一个参数的命令行exe。 命令行exe项目应该输出一个cs文件,其中包含一个带有静态属性的类,该类返回在命令行中传递的值。

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

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

当然,仅仅因为您可以做到这一点,并不意味着您应该这样做。 我只是假设您已经确定必须为您的项目执行此操作。

我刚刚发现了这一点,使用罗斯林有一个非常简单的方法。

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM