【问题标题】:Debug and release nuget packages local repository调试和发布 nuget 包本地存储库
【发布时间】:2016-07-03 09:53:29
【问题描述】:

我们正在为我们的视觉工作室项目试验 nuget。但是,我们仅(或至少主要)将 nuget 用于我们自己的外部引用,并将它们存储在本地存储库(网络共享)中。我想知道的是如何处理整个调试/发布情况。

具体(简化)情况:

我们有一个主要项目,其中引用了我们自己开发的两个共享组件。这些共享组件也用于我们公司的其他产品中

当我们构建主项目(天蓝色管道)时,我们会构建项目的调试和发布版本。但是,我们只能为每个外部引用指定一个 nuget 包。

我们想要完成的是在调试构建期间使用共享组件的调试版本,在发布构建期间使用发布版本。然而,这些(据我所知)实际上是不同的包。

解决这个问题的方法是什么?例如,有没有一种方法可以将发布版本和调试版本都包含在一个 nuget 包中?是否可以为不同的构建配置设置使用不同的 nuget 配置?

我找到了Best practices with Nuget: Debug or Release?,但是这个主题并没有真正解决我的问题。该线程更多的是关于是否将调试版本或发布版本发布到远程服务器的讨论。我们希望同时发布并在私有存储库中使用它们。我们无意与世界其他地方共享我们的图书馆。

【问题讨论】:

    标签: visual-studio nuget


    【解决方案1】:

    NuGet 包通常只包含一组特定目标框架的程序集。它并不是真正设计用于发布调试和发布版本,因为您正在发布 NuGet 包以供其他用户使用。通常,您不会向最终用户发布应用程序的调试版本和单独的发布版本。

    您可以通过在具有自己的引用和配置信息的 NuGet 包中使用 custom MSBuild .targets file 来解决此问题。您可以将此 .targets 文件用作项目的扩展。它将被导入,因此您可以根据项目中定义的配置根据需要定义引用。这并不理想,但应该可以。

    【讨论】:

    • 这是否意味着对于我们的情况,nuget 可能不是要走的路?除了 nuget 之外,还有其他方法可以在我们的项目中包含这些共享组件吗?其他人如何做到这一点?我敢肯定我们不是第一家遇到这种情况的公司
    • 是的,NuGet 对您来说可能不是一个好方法。大概您的网络共享仍然适用于调试和发布版本,所以也许不需要更改它。
    • 我真的不明白为什么没有更多人遇到同样的问题。我已经勾勒出一个我认为对于很多公司来说很常见的情况。其他公司如何设置构建服务器以使用外部库进行构建?使用 nuget 的优点是它在 tfs2015 构建任务构建中开箱即用,它确保引用的版本在手动更新之前保持不变。如果我们离开 nuget,我们将失去这一优势。
    • NuGet 并非旨在同时提供调试和发布版本。它用于已发布的工件,通常是您的发布版本,然后由其他人使用。对于不在 NuGet 上的外部库,我倾向于使用一组二进制文件,通常是发布版本,并且没有两组二进制文件。但是,没有什么可以排除文件共享或版本控制。你可以为你的二进制文件使用一个子模块,例如在 GitHub 上。
    • 对,既然我们需要调试/发布配置,我们需要实现一个自定义构建任务。显然 nuget 在这里是不够的,所以我们将开始处理自定义构建任务,以按照我们希望的方式实现它。我仍然认为没有其他默认方式来实现这一点很奇怪
    猜你喜欢
    • 2016-03-13
    • 2016-12-29
    • 2020-11-09
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    • 2020-04-12
    相关资源
    最近更新 更多