【问题标题】:Updating Files in Existing Nuget Package更新现有 Nuget 包中的文件
【发布时间】:2011-09-11 20:24:57
【问题描述】:

我有一个多项目 ASP.NET Web 窗体应用程序解决方案。我需要将母版页(3 个文件)、一些用户控件以及一些图像、脚本和 CSS 文件共享给解决方案中的其他项目。

我已经根据文档使用 NuGet 包资源管理器创建了一个包:

http://docs.nuget.org/docs/creating-packages/using-a-gui-to-build-packages

我当前的问题是:我已经更新了根项目中的共享文件,现在我想在将包拉入其他项目之前更新包(包当前位于我的开发机器上的本地文件夹中)。 我该怎么做?

如果有人有一些快速入门的 NuGet 链接,请分享,因为官方文档不适合我。

【问题讨论】:

    标签: asp.net visual-studio nuget nuget-package


    【解决方案1】:

    使用新版本再次创建包,如果原始版本是 1.0,则制作此 1.1,NuGet 将获取更新。

    【讨论】:

    • 会试一试...但是实际上是否有必要再次“创建”它而不是“升级”它?
    • 没有“升级”包的概念...您可以在包资源管理器中打开包并编辑包并保存:)
    • 好的,已更新并保存。但是当我尝试将库包引用添加到子项目时,更新没有出现在 GUI 中;我可以在已安装软件包列表中看到“MyPackage”,但没有显示软件包更新...
    • 以为我让它工作了......必须单击主项目中顶部的“已安装包”链接才能让它在那里工作。 GUI 真的很不稳定。 1.1 显示为安装在 PM 控制台的子项目中......但 .nuspec 仍然显示 1.0??
    • 将此标记为答案...仍然对 NuGet 文档不满意:-/
    【解决方案2】:

    NuGet 文件最终只是一个 zip 文件。您可以使用任何可以更新 zip 文件的东西来更新条目。比如像

    using System.IO.Compression;
    using System.IO.Compression.FileSystem;
    
    // EG: AddOrUpdateZipEntry("mypackage.nupkg", "my.dll", "bin/my.dll")
    void AddOrUpdateZipEntry(string zipFilePath, string contentsFilePath, string entryPathInZip)
    {
        using (var zip = ZipFile.Open(zipFilePath, ZipArchiveMode.Update))
        {
            zip.GetEntry(entryPathInZip)?.Delete(); // Remove any existing entry first.
            zip.CreateEntryFromFile(contentsFilePath, entryPathInZip);
        }
    }
    

    【讨论】:

      【解决方案3】:

      您是否在问需要做什么来更新已经在使用该软件包的项目?

      在这种情况下,关键是版本控制。该文件的新版本将被删除。使用新版本号再次捆绑包,然后从 VS 的包管理器控制台运行 Update-Package。

      您可能还想考虑几个谨慎的包,而不是一个直接的包。如果您想更新几个图像或一个 CSS 文件,而不是 MasterPage,最好使用几个较小的文件。

      使用 PM Explorer(来自您提到的帖子)从 NuGet 主存储库打开几个包,特别是 jQuery 1.5.1 和 1.6.x 并查看一下,因为它们会做非常相似的事情。不需要真正的魔法!

      干杯。

      【讨论】:

      • 刚刚从 PM 命令行尝试了这个:Update-Package MyPackage -Version 1.1 -Source C:\VS2010 并得到了这个:没有可用于 'MyPackage' 的更新。
      • 那么,让我们验证几件事:你的编译包是否在 c:\vs2010 中?您当前安装的版本是什么(输入 Get-Package 进行确认)?您的新包裹是否与您现有的包裹不同?另外,您是指包管理器控制台还是 nuget 命令行?
      • 不是编译包,都在内容文件夹中,包括。主文件和支持文件 - 在 dest 中成功编译。项目。 1.0 到 1.1 升级不起作用 - 仍然显示 1.0。使用 PM 控制台 - 我什么时候可以通过 PM 控制台使用 Nuget.exe?
      【解决方案4】:

      我之前已经做过了。您只需要在 .nuspec 文件的元数据中增加包的版本。

      就我而言,我的包名称是 '[name].[version].nupkg' 所以我将新包保存为 '[name].[version + 1].nupkg' 也是如此。

      更新出现在“管理 nuget 包”更新部分。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-26
        • 1970-01-01
        • 2019-03-02
        • 2017-04-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多