以编程方式为本地存储库创建 NuGet 包

2024-01-22

我正在编写一个控制台应用程序来创建 NuGet 包(使用 Nuget.Core 库),该包将托管在我们的内部服务器上以部署到我们的应用程序中。当我们使用 NuGet Package Explorer 手动创建包时,这一切都可以正常工作,但我们现在需要自动化此过程。

我将以下代码拼凑在一起以自动构建包,但出现错误builder.Populate(packageMetadata);

错误是:

Value cannot be null.

Parameter name: source

这是堆栈跟踪:

at System.Linq.Enumerable.Select[TSource,TResult](IEnumerable`1 source, Func`2 selector)
at NuGet.PackageBuilder.Populate(ManifestMetadata manifestMetadata)
at BuildPackage.Create(String packageName, String path, String description) in c:\Source Code\Visual Studio Projects\Tools\Console Applications\NuGet Package Builder\BuildPackage.cs:line 134

我查看了 NuGet 的源代码(请参阅here http://nuget.codeplex.com/SourceControl/latest#src/Core/Authoring/PackageBuilder.cs),但我无法弄清楚是什么原因造成的。

关于以下代码的一些注意事项:

  • 前两个区域只是为了找出新包的版本号,您可以忽略它们
  • ReferencePaths.NuGetPackages 是本地 NuGet 存储库路径的静态字符串
  • 此代码使用提供的 packageName 和路径获取构建的 DLL 和 PDB 文件

这是代码:

class BuildPackage
{
    public static void Create(string packageName, string path, string description)
    {
        try
        {
            #region Get the current package version

            int major = 0;
            int minor = 0;
            int packageNo = 0;
            List<string> files = Directory.EnumerateFiles(ReferencePaths.NuGetPackages, packageName + "*").ToList();

            if (files.Count > 0)
            {
                foreach (string file in files)
                {
                    string[] versions = file.Replace(ReferencePaths.NuGetPackages, "").Replace(packageName + ".", "").Replace(".nupkg", "").Split('.');
                    int newMajor = Convert.ToInt32(versions[0]);
                    int newMinor = Convert.ToInt32(versions[1]);
                    int newPackageNo = Convert.ToInt32(versions[2]);

                    // Figure out if this is the latest package
                    if (newMajor > major ||
                        (newMajor == major && newMinor > minor) ||
                        (newMajor == major && newMinor == minor && newPackageNo > packageNo))
                    {
                        major = newMajor;
                        minor = newMinor;
                        packageNo = newPackageNo;
                    }
                }
            }

            #endregion Get the current package version

            #region Get the new assembly version

            FileVersionInfo version = FileVersionInfo.GetVersionInfo(path + packageName + ".dll");

            if (version.FileMajorPart > major ||
                (version.FileMajorPart == major && version.FileMinorPart > minor))
            {
                major = version.FileMajorPart;
                minor = version.FileMinorPart;
                packageNo = 0;
            }
            else
            {
                while (File.Exists(ReferencePaths.NuGetPackages + packageName + "." + major.ToString() + "." + minor.ToString() + "." + packageNo.ToString() + ".nupkg"))
                {
                    packageNo++;
                }
            }

            #endregion Get the new assembly version

            #region Create the package

            string packageVersion = major.ToString() + "." + minor.ToString() + "." + packageNo.ToString();
            string newPackageName = packageName + "." + packageVersion + ".nupkg";
            ManifestMetadata packageMetadata = new ManifestMetadata();
            packageMetadata.Id = packageName;
            packageMetadata.Version = packageVersion;
            packageMetadata.Authors = "Test";
            packageMetadata.Description = description;

            List<ManifestFile> manifestFiles = new List<ManifestFile>();
            ManifestFile dllFile = new ManifestFile();
            dllFile.Source = packageName + ".dll";
            dllFile.Target = @"lib\" + packageName + ".dll";
            manifestFiles.Add(dllFile);
            ManifestFile pdbFile = new ManifestFile();
            pdbFile.Source = packageName + ".pdb";
            pdbFile.Target = @"lib\" + packageName + ".pdb";
            manifestFiles.Add(pdbFile); 

            PackageBuilder builder = new PackageBuilder();
            builder.PopulateFiles(path, manifestFiles);
            builder.Populate(packageMetadata);
            using (FileStream stream = File.Open(ReferencePaths.NuGetPackages + newPackageName, FileMode.OpenOrCreate))
            {
                builder.Save(stream);
            }

            #endregion Create the package

            Console.WriteLine("New package created: " + newPackageName);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

有谁知道可能出了什么问题?我需要清单元数据中的更多信息吗?我尝试填写我能想到的所有属性,但没有帮助。


好吧,我尝试了几种不同的方法来完成同一件事,但没有任何效果。所以我注意到代码版本http://nuget.codeplex.com/SourceControl http://nuget.codeplex.com/SourceControl都是 v2.0 以上版本,并决定检查我引用的 DLL(这是库存的 .NET 4.0 或 4.5 版本),我注意到我的 NuGet.Core 引用适用于版本 1.6.3。

因此,我使用 NuGet Package Manager 获取最新版本的 NuGet.Core(在撰写本文时为 v2.8.5),现在上面的代码可以正常工作了! *

艾拉妮丝·莫莉塞特可能会说这很讽刺。

  • 我确实必须改变File.Open就在保存之前,因为我错过了文件名。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以编程方式为本地存储库创建 NuGet 包 的相关文章

  • C# 打印问题(RichTextBox)

    我想打印我的 RichTextBox eintragRichTextBox 的内容 我现在有这个代码 private void druckenPictureBox Click object sender EventArgs e PrintD
  • 将 new 与 decltype 一起使用

    T t T is an implementation detail t new T want to avoid naming T to allow for flexibility t new decltype t error cannot
  • 在 Java 中创建 T 的新实例

    在C 中 我们可以定义一个泛型class A
  • 检测wlan是否关闭

    任何人都可以给我一个提示 如何在 Windows Phone 上以编程方式检测 C 8 1 应用程序 不是 8 0 是否启用 禁用 WLAN 我不想更改这些设置 只是需要知道 该解决方案是一个 Windows 8 1 通用应用程序 Wind
  • linq 中使用字符串数组 c# 的 'orderby'

    假设我有一个这样的方法定义 public CustomerOrderData GetCustomerOrderData string CustomerIDs var query from a in db Customer join b in
  • 如何使用 SOAP 且不使用 WSE 在 .NET 中签署 Amazon Web 服务请求

    亚马逊产品广告 API 以前称为 Amazon Associates Web Service 或 Amazon AWS 实施了一项新规则 即自 2009 年 8 月 15 日起 向其发送的所有 Web 服务请求都必须经过签名 他们在其网站上
  • 从模板切换传递的类型

    在 C 中是否可以检查传递给模板函数的类型 例如 template
  • 将表(行)与 OpenXML SDK 2.5 保持在一起

    我想在 Word 文档中生成多个表 每行 2 行 但我想将这两行保留在一起 如果可能的话 new KeepNext 第一行不起作用 new KeepNext 第一行的最后一段不起作用 new CantSplit 放在桌子上不起作用 在所有情
  • 访问 ascx 文件中的母版页控件

    我有一个母版页文件 其中包含 2 个面板控件中的 2 个菜单 我还使用控件来检查用户是否登录并获取用户类型 根据我想要显示 隐藏面板的类型 控件本身不在母版页中引用 而是通过 CMS 系统动态引用 我想在用户控件中使用findcontrol
  • 使用查询表达式对 List 进行排序

    我在使用 Linq 订购这样的结构时遇到问题 public class Person public int ID get set public List
  • UI 函数在快速事件完成之前触发

    我有一个停靠在 Silverlight 应用程序中的 Web 浏览器框架 有时会在其上弹出全窗口 XAML Silverlight UI 元素 我已经或多或少修复了一个老问题 即 Web 框架的内容似乎与 Silverlight 内容不能很
  • 析构函数中的异步操作

    尝试在类析构函数中运行异步操作失败 这是代码 public class Executor public static void Main var c1 new Class1 c1 DoSomething public class Class
  • 搜索实体的所有字段

    我正在尝试在客户数据库上实现 多功能框 类型的搜索 其中单个查询应尝试匹配客户的任何属性 这是一些示例数据来说明我想要实现的目标 FirstName LastName PhoneNumber ZipCode Mary Jane 12345
  • 引用/指针失效到底是什么?

    我找不到任何定义指针 引用无效在标准中 我问这个问题是因为我刚刚发现 C 11 禁止字符串的写时复制 COW 据我了解 如果应用了 COW 那么p仍然是一个有效的指针并且r以下命令后的有效参考 std string s abc std st
  • 使用 GCC 生成可读的程序集?

    我想知道如何使用GCC http en wikipedia org wiki GNU Compiler Collection在我的 C 源文件中转储机器代码的助记符版本 这样我就可以看到我的代码被编译成什么 你可以使用 Java 来做到这一
  • ASP.NET MVC 路由:如何从 URL 中省略“索引”

    我有一个名为 StuffController 的控制器 具有无参数索引操作 我希望从表单中的 URL 调用此操作mysite com stuff 我的控制器定义为 public class StuffController BaseContr
  • 如何停止无限循环?

    我正在编写一个程序 该程序将计算三角形或正方形的面积 然后提示用户是否希望计算另一个 我的代码已经运行到可以计算任一形状的面积的程度 但随后不再继续执行代码的其余部分 例如 如果选择了正方形 则计算面积 然后返回到正方形边长的提示 我假设这
  • CUDA 8 编译错误 -std=gnu++11

    我正在尝试转换一些代码以使用 CUDA 并且我认为我遇到了兼容性问题 我们使用CMake 这些是我使用的 gcc 和 CUDA 版本 gcc version gcc Ubuntu 5 4 0 6ubuntu1 16 04 5 5 4 0 2
  • 需要提取字符串中点后的最后一个数字,如“7.8.9.1.5.1.100”

    我需要提取 C 字符串中最后一个点后面的最后一个数字 例如 7 8 9 1 5 1 100 并将其存储在整数中 Added 该字符串也可以是 7 8 9 1 5 1 1 或 7 8 9 1 5 1 0 我还想验证它在最后一个点之前恰好是 7
  • 如何将 SQL“LIKE”与 LINQ to Entities 结合使用?

    我有一个文本框 允许用户指定搜索字符串 包括通配符 例如 Joh Johnson mit ack on 在使用 LINQ to Entities 之前 我有一个存储过程 该存储过程将该字符串作为参数并执行以下操作 SELECT FROM T

随机推荐

  • Python 发送的 MIME 电子邮件附件未显示在 mail.live 中

    我有一个 Python 3 脚本 它使用 MIMEMultipart 发送带有生成的附件的 xlsx 文件的电子邮件 我曾经在 Py2 上使用相同的脚本来发送相同的生成文件 唯一的区别是 Py2 脚本从 MySQL 收集信息来创建 xlsx
  • 三次曲线 JavaFX

    我在 JavaFX 中的 CubicCurve 上遇到了困难 例如 如何绘制 y x 3 绘制曲线的机制看起来非常笨拙 是否可以将曲线的端点之一连接到另一个节点 以便当该节点的位置发生变化时曲线会适应它 Thanks 我认为 JavaFX
  • 更换默认手机APP

    我正在尝试替换默认的 Android 电话应用程序 更具体地说 我想在每次执行呼叫操作时启动自定义电话呼叫屏幕 我知道自 Android 的 API 24 版本 7 0 Nougat 以来这是可能的 但我没有找到有关如何实现此目的的参考资料
  • 在 ionic 中加载 url 显示空白屏幕

    我在网上搜索过 但没有得到关于这个问题的具体信息 我正在使用 ionic v1 其中我正在加载我的 adfs url 来要求用户通过 adfs 网页登录 但仅在某些手机上我看到登录页面 而在其他手机上我看到空白屏幕 我尝试调试它 但到目前为
  • 如何在 Android 中以编程方式加载布局 XML 文件?

    我已经做了一个布局 比如说my layout xml 其中以编程方式包括另外两个 XML 布局文件 例如一些 layout xml and another layout xml my layout xml是使用绘制的setContentVi
  • 查找两个蓝牙设备之间的方向(定位)

    我有一个应用程序 可以扫描另一部手机正在广播的特定 UUID 并测量它们之间的信号强度 并告诉您离它们是否越来越近或越来越远 我想添加一个方向箭头 我知道如果你有 3 个点 你可以使用三角测量 但我想用 2 个点得到一些稍微准确的东西 有什
  • 对模拟对象的期望似乎没有得到满足(最小起订量)

    我在 Moq 中遇到了一些奇怪的行为 尽管我设置了一个模拟对象以某种方式行事 然后在我正在测试的对象中以完全相同的方式调用该方法 但它的反应就像该方法是从来没有打电话过 我正在尝试测试以下控制器操作 public ActionResult
  • 作为 jar 运行时出现 FileNotFoundException

    FileInputStream fstream new FileInputStream abc txt 作为 jar 运行时抛出 FileNotFoundException 为什么 通常它可以在从 main 方法运行时找到 class My
  • 如何仅删除第一页的页眉页脚 - mpdf

    下面 Mpdf 中的两个函数在所有页面中添加页眉和页脚 设置HTML标题 设置HTML页脚 但是 有人可以帮我从 pdf 第一页中删除页眉和页脚吗 mPDF 有一个名为 show this page 的选项 将其设置为0我想 不会在第一页上
  • Intellij Idea 无法启动 Windows 10

    我下载了 Intellij Idea 并使用了一段时间 效果很好 我不知道它工作期间和开始不工作期间发生了什么 当我单击快捷方式时 我的鼠标会给我加载轮 然后什么也不会发生 在任务管理器中 有一个名为 IntelliJ Idea 的任务正在
  • 发出 GET 请求时的 WhiteLabel 错误页面[重复]

    这个问题在这里已经有答案了 我收到状态为 404 的 WhiteLabel 错误页面 而不是字符串 所有电影 我正在 http localhost 8080 api v1 movies 上发出 GET 请求 我的控制器 package pl
  • 如果应用程序已经启动一次,如何阻止用户第二次进入登录屏幕?

    我正在制作一个具有登录屏幕的应用程序 登录的验证和其他内容由网络服务处理 我的问题是 如果用户安装了该应用程序 那么如果用户第一次运行该应用程序 则会出现一个登录屏幕 通过用户在从市场下载时提供的详细信息进行登录 如果用户成功登录 则第二次
  • AngularJS:在 ng-repeat 生成的范围中设置变量

    如何访问 ng repeat 生成的范围集 我想这的核心是这样一个事实 我不太明白 a 我传递到 ng repeat 指令的对象集合和 b 它生成的范围集合之间的关系是如何工作的 我可以使用 a ng repeat 作用域会监视并拾取该作用
  • 使用自定义文件格式注册ForDraggedTypes

    开发人员文档没有提供 registerForDraggedTypes 方法的完整描述 例如 我希望我的应用程序仅允许访问 abc 文件 我怎样才能做到这一点 如果您希望将文件拖到您的视图中 您应该注册NSFilenamesPboardTyp
  • 不同列的条件平均值

    我有一个像这样的 R 数据框 city2001 lt c a b a grade2001 lt c 5 5 7 city2002 lt c b b a grade2002 lt c 8 9 10 df lt data frame city2
  • 根据条件删除列表中的元素

    我有一个名为 Info 的类 其中 Info 有一个字符串类型实例变量 可以通过以下方式访问 Info getName 我还有一个实例信息列表 例如class list Info Aleck Info John Given a name l
  • 无法将类型“System.Web.Mvc.RedirectToRouteResult”隐式转换为“System.Web.Mvc.JsonResult”

    我如何将操作从 JsonResult 重定向到 ActionResult 但出现错误 我的错误是 无法将类型 System Web Mvc RedirectToRouteResult 隐式转换为 System Web Mvc JsonRes
  • pthread 与 python VM 的回调

    假设我有一个 python 脚本 它通过 ctypes 加载共享库 SL SL 设置了一个pthread T1 python 脚本通过 SL 配置回调 即 python 脚本通过引用 python 可调用项从 SL 调用函数 替代文本 ht
  • 如何通过互联网使用 MQTT?

    目前 我正在成功运行一个 mosquitto 代理 订阅主题并与本地网络中的客户端发布消息 如何与位于不同 IP 地址的另一个本地网络进行通信 我应该设置 2 个 mosquitto 经纪人 每个本地网络一个吗 其他本地网络中的 PC 需要
  • 以编程方式为本地存储库创建 NuGet 包

    我正在编写一个控制台应用程序来创建 NuGet 包 使用 Nuget Core 库 该包将托管在我们的内部服务器上以部署到我们的应用程序中 当我们使用 NuGet Package Explorer 手动创建包时 这一切都可以正常工作 但我们