我有一个Java的背景,所以我要用于家具有处理所有问题围绕下载和保持的依赖。但是在的.净的环境,我们尚未找到良好方式管理所有这些外部的依赖关系。

这里的主要问题是,我大规模生产的解决方案,他们都倾向于依赖相同的第三方dll。但我不想分别维持单独的副本的每个部件下每一个的解决方案。所以我需要一种联系的所有不同的解决方案的同一组dll。

我意识到,一种解决方案可能包括外部图书馆的一个"图书馆"项目,包括在所有解决方案和让其他项目引用他们通过它。(或者只是一定要参考的外部dll是从同一个地方的所有项目。)

但是否有任何更好的方式做到这一点?(最好使用某种形式的插头-Visual Studio.)

我看了看 Visual Studio依赖关系经理 并且它似乎是一个完美的比赛,但是有人试过了真的?我也看到的.净港口之家,但不幸的是我是不是太印象深刻的状态的那些。(但请继续和推荐他们的任何人如果你认为我应该给他们另一个尝试。)

那么,什么会是最聪明的办法来解决这个问题?

更新:

我意识到我需要解释什么我是说 联系到同一集dll的.

有一件事我想现在这里是为了避免不同的解决方案都引用不同版本的各组成部分。如果我更新的一个组成部分的新版本,它应该是更新的对所有方案后,下一步建立。这将迫使我要确保所有方案都是最新最新的部件。

更新2: 注意,这是一个古老的问题之前一样的工具 NuGetOpenWrap 存在。如果任何人愿意提供更多最新的,请继续和我将改变接受的答案。

有帮助吗?

解决方案

  1. 找一些地方储存的集会。例如,我的商店。净核心集会,像这样:

    • <branch> etFX\2.0527\*
    • <branch> etFX\3.0\*
    • <branch> etFX\3.5\*
    • <branch> etFX\Silverlight2\*
    • <branch> etFX\Silverlight3\*
  2. 使用ReferencePath财产MSBuild(或AdditionalReferencePath在团队建设)要点项目在适当的路径。为简单起见和便于维护,我有1*.目标文件,该文件知道关于每一个这样的目录;我所有的项目进口该文件。

  3. 确保你的版本控制策略(分支、合并、地方<->映射服务器)保持相对路径之间的项目和参考路径定。

编辑

响应对更新的问题,让我增加一个步骤:

4)确保每一个会参照在每一个项目文件使用的完整的。净强烈的名字 并没有什么别的.

坏:

<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地狱。" 一旦你使用了强烈的名称随后它的安全有多种版本的同一个组件在你参照的路径,因为连接会唯一负荷的比赛每一个标准。此外,如果决定的更新一些集会,在地方(而不是增加副本),然后你就会被通知的任何断裂变化,在编制时间,而不是的 每当的错误开始进来。

其他提示

除了其他人所说的,它基本上归结为两件事:

  1. 确保所有开发人员都拥有相同版本的外部库
  2. 确保所有开发人员都将外部库放在同一位置(至少相对于源代码)
  3. 正如Richard Berg所指出的,您可以使用ReferencePath和/或AdditionalReferencePath来帮助解决#2问题。如果你在构建过程中使用msbuild(在我们的例子中,我们使用的是CruiseControl而不是MS Team Build),你也可以在命令行上将ReferencePath传递给它。为了解决#1,我发现 svn:externals 是有用(如果您使用的是SVN)。

    我对Maven的经验是,对于大多数用途来说,这样做太过分了。

我通常在源控件上有一个单独的文件夹结构,用于extrenal或Internal依赖项,这些filders具有根据build或version number的程序集,例如

公共\外部\库\ NUnit的\ 2.6 \

公共\内部\库\记录器\ 5.4.312 \

并且在解决方案内部,所有需要使用任何依赖项的项目都会在公共内部或extrenal文件夹中添加对该程序集的引用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top