调试和发布 NuGet 包本地仓库

11
我们正在使用NuGet来管理我们的Visual Studio项目。然而,我们只使用(或至少主要使用)NuGet来管理我们自己的外部引用,并将它们存储在本地仓库(网络共享)中。我想知道的是如何处理整个调试/发布情况。
具体(简化)情况如下:我们有一个主项目,该项目引用了两个共享组件,这些组件是我们自己开发的。这些共享组件还用于我们公司的其他产品中。
当我们构建主项目时(使用Azure管道),我们会构建项目的调试和发布版本。但是,每个外部引用只能指定一个NuGet包。
我们希望在调试构建期间使用共享组件的调试版本,在发布构建期间使用共享组件的发布版本。但是,据我所知,这实际上是不同的NuGet包。
如何解决这个问题?例如,是否有一种方法可以在单个NuGet包中包含调试和发布版本?是否可以为不同的构建配置设置不同的NuGet配置?
我在这里找到了与NuGet最佳实践:Debug或Release相关的信息,但是这个主题并没有真正解决我的问题。这个主题更多的是讨论是否将调试或发布版本发布到远程服务器。我们希望同时发布两个版本并将其用于私有仓库。我们没有将我们的库与世界分享的意图。
1个回答

3

NuGet包通常只包含特定目标框架的一组程序集。它实际上并不适用于发布调试和发布版本,因为您要发布NuGet包供其他用户使用。通常情况下,您不会向最终用户发布调试和单独的发布版本应用程序。

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


这是否意味着对于我们的情况,NuGet 可能不是最佳选择?除了 NuGet 之外,有没有其他方法可以在我们的项目中包含这些共享组件?其他人是如何完成这个任务的?我相信我们不是第一个遇到这种情况的公司。 - PaulVrugt
是的,NuGet可能不适合您。假设您的网络共享仍然适用于调试和发布构建,因此可能没有必要更改它。 - Matt Ward
2
我真的不明白为什么没有更多人遇到同样的问题。我描绘了一种情况,我相信很多公司都会遇到类似的问题。其他公司如何设置其构建服务器以使用外部库进行构建?使用nuget的优点是它可以在tfs2015构建任务构建中开箱即用,并确保引用的版本在手动更新之前保持不变。如果我们放弃nuget,就会失去这个优势。 - PaulVrugt
2
正确的,由于我们需要有调试/发布配置,所以我们需要实现一个自定义构建任务。显然 nuget 在这里不够用,所以我们将开始开发一个定制的构建任务来实现我们想要的工作方式。我仍然认为很奇怪,没有其他默认的方法来实现这个。 - PaulVrugt
@JonoRogers 我们最终决定不使用NuGet。我们正在考虑使用自定义的构建任务或PowerShell脚本,以收集正确的dll文件,但目前我们认为这需要太多的工作量。我们可能会很快重新考虑这个话题,因为我们仍然需要从XAML构建迁移到新的构建任务系统。 - PaulVrugt
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接