繁体   English   中英

获取包含在 csproj in.Net Core 3.1 中的 nuget package 版本

[英]Get nuget package version included in csproj in .Net Core 3.1

简而言之,我希望能够以编程方式修改.csproj 文件。

我正在开发一个应用程序,将 nuget package 替换为其实际项目参考。 这是应用程序用于调试目的。 我们在解决方案文件中添加了大量的包。 为此,我读取了一个 csproj 文件并应用正则表达式来查找指定的 nuget package 参考并添加项目参考。 这部分工作正常,但它不再挑选包裹。

以上可以使用dotnet命令完成,但使用它我无法替换旧版本。

是否有任何可用的 Microsoft nuget package 可以读取 csproj 文件中的 package 引用?

此处提出了类似的问题,但 Build.Engine 在最新版本中不可用。

是否有任何可用的 Microsoft nuget package 可以读取 csproj 文件中的 package 引用?

据我所知Microsoft.Build.Engine不支持编辑新的 Sdk 格式项目( Net Core )并且与此 nuget package 不兼容。 This nuget package is just for old sdk format projects( Net Framework ) and you cannot edit xml elements of Net Core Projects.

获取包含在 csproj in.Net Core 3.1 中的 nuget package 版本

由于您想获得 Nuget package 参考及其版本,您可以通过编程方式尝试此 function:

public class PackageReference
        {
            public string Include { get; set; } //get the nuget reference name
            public Version Version { get; set; } // get thee nuget package version
        }


        static void Main(string[] args)
        {

    //load the xxx.csproj file
            var doc = XDocument.Load("C:\\xxxx\\xxxx\\xxx\\xxx\\xxx.csproj");
            var packageReferences = doc.XPathSelectElements("//PackageReference")
                .Select(pr => new PackageReference
                {
                    Include = pr.Attribute("Include").Value,
                    Version = new Version(pr.Attribute("Version").Value)
                });

            Console.WriteLine($"Project file contains {packageReferences.Count()} package references:");
            foreach (var packageReference in packageReferences)
            {
                Console.WriteLine($"{packageReference.Include}, version {packageReference.Version}");
            }


        }

更新 1

只需在 net framework 项目中安装Microsoft.BuildMicrosoft.Build.Utilities.Core ,然后键入这些可以在xxx.csproj文件中设置属性,如Build.Engine nuget package 那样。

请注意,它应该写在 net framework 项目中,而不是 net core 或 net standard 项目中(这会导致错误)。

using Microsoft.Build.Evaluation;
.......
{
    class Program
    {

        static void Main(string[] args)
        {
            var collection = new ProjectCollection();
            var project = collection.LoadProject(@"xx:\xxx\xxx\xxx.csproj");
            project.SetProperty("Test","true");

            project.Save(@"xx:\xxx\xxx\xxx.csproj");


        }
    }
}

希望它可以帮助你。

暂无
暂无

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

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