gpt4 book ai didi

c# - 多个解决方案引用的项目的 Nu-Get 和项目级别依赖性问题

转载 作者:可可西里 更新时间:2023-11-01 02:59:10 24 4
gpt4 key购买 nike

我正在尝试弄清楚处理这种情况的最佳方法是什么。

假设我有一个被多个不同的不相关解决方案引用的库,我们称它为 WebServiceInterface.dll。该库依赖于 JSON.NET。

在 NuGet 之前

JSON.NET 二进制文件是通过 WebServiceInterface 项目中的外部 SVN 引用的。其他依赖于 WebServiceInterface 的解决方案引用了该项目(也作为 SVN 外部),结果拉动了该项目及其依赖项。

使用 NuGet

我还没有想出如何强制将 JSON.NET 引用存储在 WebServiceInterface 项目下(而不是 RandomSolution\packages 位置)。我找到了对项目级和解决方案级包的引用@nu-get,但是当我通过 nu-get 添加依赖项时,我似乎无法找到如何指定它。

这里的目标是当有人 check out WebServiceInterface 并将其添加到它构建的新解决方案时(而不是破坏对 JSON.NET 的引用,它指向最后一个检入的解决方案下的包目录)。

最佳答案

当我去寻找 Chris B 是否为此创建了一个 NuGet 问题时,我找不到。编辑:他做到了,请参阅下面的评论。但我确实找到了用于解决此问题的 NuGet 的半文档化功能:Allow specifying the folder where packages are installed

让我把这个问题分成两个问题:

  1. 让 NuGet 允许多个解决方案使用相同的包位置
  2. 当您包含具有 NuGet 包的项目时,让 NuGet 包自动从源代码管理中获取

问题 1:默认情况下,NuGet 将包存储在解决方案文件夹中的包文件夹中。要更改该位置,请在解决方案的根文件夹中创建一个包含以下内容的 nuget.config 文件:

<settings>
<repositoryPath>..\..\..\Utilities\Library\nuget.packages</repositoryPath>
</settings>

<repositoryPath>与您的解决方案相关;所以很明显,随心所欲。使每个解决方案都有自己的相同包文件夹的相对路径。

就 NuGet 的流程而言,从那时起,repositories.config 中的路径是相对于包含 repositories.config 的文件夹,而不是解决方案,因此现在所有项目/包的管理都独立于解决方案位置。

这允许多个解决方案在源代码管理中使用相同的包,如果这些解决方案使用相同的项目(使用 NuGet 包),那么无论哪个解决方案更新包,这些解决方案/项目都将保持同步。

问题1彻底解决

问题2:

让我从两个角度来解决这个问题。这适用于 Visual Studio 和 TFS——我将把 SVN 留给其他人解决。

首先:如果您的驱动器上没有源代码并且要获取一个解决方案(不是一个项目),我更愿意创建它以便您获得解决方案构建所需的一切。不应该有任何遗漏的引用去手动抓取。我们可以通过将包文件添加为解决方案项来完成这些工作。是的,在每个 解决方案中。是的,需要做一些工作,但是完成后,包文件将自动从源代码管理中获取/更新。

其次:在新的解决方案中,当您包含具有 NuGet 包的现有源代码管理项目时,您必须手动从源代码管理中获取包并将它们添加为解决方案项。至少将来获得您的解决方案的任何其他人都会自动获得成功构建所需的一切。至少对于 VS/TFS,这就是它的方式,AFAIK。如果 projB 依赖于 projA,并且你将 projB 添加到新的解决方案中,VS/TFS 将不会自动从 TFS 中获取 projA。您必须手动执行此操作。因此,dll 引用(如 NuGet 包)也是如此。

我的解决方案总结:

  • 所有解决方案在源代码管理中只有一份包副本
  • 任何解决方案都可以更新包,所有其他解决方案将保持同步*

* 一旦一个解决方案将包更新为新路径或文件名,它们将显示为缺少对其他解决方案的引用,您必须手动清理它。但至少您知道包在源代码管理中的位置“(与 RandomSolution\packages 位置相对)。”

关于c# - 多个解决方案引用的项目的 Nu-Get 和项目级别依赖性问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6277925/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com