.net核心将csproj文件解析为对象

时间:2018-12-17 07:00:21

标签: c# msbuild .net-core csproj

问题-我们可以通过某种方式解析csproj文件,但是大多数信息不在文件中,而是默认情况下或受其他属性影响。

我想处理csproj文件和解决方案-获取项目依赖项,获取属性和项(例如“ TargetFramework”,已编译文件等)。

TargetFramework可以是带有值的标签,也可以是具有解析为“ TargetFramework”的多值的“ TargetFramework s ”标签。

旧的解决方案-MSBuild提供了microsoft.build.evaluation library来与csproj文件一起使用,但是该库已编译为net471,在netcoreapp中使用该库时会导致错误。

.net核心项目中问题的解决方案是什么?

1 个答案:

答案 0 :(得分:2)

对于 .Net Core Microsoft.Build NuGet 包的工作方式如下:

var projectRootElement = ProjectRootElement.Open(csprojPath);
projectRootElement.AddProperty("Version", "3.4.5");
projectRootElement.Save();

如果版本存在,它会覆盖它。如果不存在,则添加新的属性名称为“Version”,值为“3.4.5”。

您还可以获取所有在 .csproj

中定义的属性
var projectRootElement = ProjectRootElement.Open(csprojPath);
foreach (var property in projectRootElement.Properties)
{
    Console.WriteLine($"Name: {property.Name} - Value: {property.Value}");
}

在 .NetCore 5.0 中测试