gpt4 book ai didi

visual-studio - 您如何在 Visual Studio 解决方案之间共享外部依赖项?

转载 作者:行者123 更新时间:2023-12-04 15:38:01 25 4
gpt4 key购买 nike

我有 Java 背景,所以我习惯于让 Maven 处理有关下载和保持依赖项最新的所有问题。但是在 .NET 环境中,我还没有找到管理所有这些外部依赖项的好方法。

这里的主要问题是我大量生产解决方案,而且它们都倾向于依赖相同的第三方 dll。但我不想在每个解决方案下维护每个组件的单独副本。所以我需要一种将所有不同解决方案链接到同一组 dll 的方法。

我意识到一种解决方案可能是将外部库包含在所有解决方案中都包含的“库项目”中,并让其他项目通过它来引用它们。 (或者只是确保从所有项目的同一位置引用外部 dll。)

但是有没有更好的方法来做到这一点?
(最好为 Visual Studio 使用某种插件。)

我看过 Visual Studio Dependency Manager这似乎是一个完美的匹配,但有人真的尝试过吗?我还看到了 Maven 的 .NET 端口,但不幸的是,我对它们的状态并没有太大的印象。 (但是,如果您认为我应该再试一次,请继续向他们推荐他们。)

那么解决这个问题的最聪明的方法是什么?

更新:

我意识到我需要解释链接到同一组 dll 的含义。

我在这里尝试实现的一件事是避免不同的解决方案引用每个组件的不同版本。如果我将组件更新为新版本,则应在下次构建时为所有解决方案更新它。这将迫使我确保所有解决方案都与最新组件保持同步。

更新 2:
请注意,这是在 NuGet 之类的工具之前问过的一个老问题。或 OpenWrap存在。如果有人愿意提供更多最新信息,请继续,我将更改已接受的答案。

最佳答案

  • 找一些地方来存放程序集。例如,我像这样存储 .Net 核心程序集:
  • <branch >\NetFX\2.0527 \ *
  • <branch >\NetFX\3.0 \ *
  • <branch >\NetFX\3.5 \ *
  • <branch >\NetFX\银光 2 \ *
  • <branch >\NetFX\Silverlight 3 \ *
  • 使用 MSBuild 中的 ReferencePath 属性(或 Team Build 中的 AdditionalReferencePath)将您的项目指向适当的路径。为了简单和易于维护,我有 1 个 *.targets 文件,它知道每个这样的目录;我所有的项目 导入该文件。
  • 确保您的版本控制策略(分支、合并、本地<->服务器映射)保持项目和引用路径之间的相对路径不变。

  • 编辑

    针对问题中的更新,让我再添加一个步骤:

    4) 确保每个项目文件中的每个程序集引用都使用完整的 .Net 强名称,而没有其他任何内容。

    坏的:
    <Reference Include="Microsoft.SqlServer.Smo">
    <SpecificVersion`>False</SpecificVersion>
    <HintPath>..\..\..\..\..\..\..\Program Files (x86)\Microsoft SQL Server\100\Shared\Microsoft.SqlServer.Smo.dll</HintPath>
    </Reference>

    好的:
    <Reference Include="Microsoft.SqlServer.Smo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL" />

    后一种格式的优点:
  • 在协作开发环境中使用 HintPath 将不可避免地导致“它对我有用”而不是其他人的情况。尤其是您的构建服务器。省略它会强制您使引用路径正确,否则将无法编译。
  • 使用弱名称会带来“DLL hell ”的可能性。一旦您使用了强名称,那么在您的引用路径中有同一个程序集的多个版本是安全的,因为链接器将只加载与每个条件匹配的程序集。此外,如果您决定就地更新某些程序集(而不是添加副本),那么您将在编译时收到任何破坏性更改的通知,而不是在错误开始出现时通知您。
  • 关于visual-studio - 您如何在 Visual Studio 解决方案之间共享外部依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1217005/

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