【问题标题】:Dll dependencies on a Visual Studio 2010 solution and TFSDLL 依赖于 Visual Studio 2010 解决方案和 TFS
【发布时间】:2012-09-06 18:44:07
【问题描述】:

如何在 Visual Studio 中制作解决方案,以便驻留在其他目录中的 .dll 依赖项与解决方案本身受“获取最新”影响的位置完全不同。

我尝试的是在解决方案本身内创建一个 Dependencies 解决方案文件夹并将 dll 添加到其中,这样即使它们不属于解决方案的目录结构,它们也属于该解决方案。

例如,.sln 文件位于:

D:\tfs\repository\main\SolutionA\solution.sln

并且 dll 位于:

d:\tfs\repository\main\SolutionX\Dependencies\Binaries

我真正想要实现的是有一个万无一失的方式来构建解决方案,包括以下场景:

1- 全新安装windows、visual studio等
2- 打开视觉工作室
3-在TFS上找到solution.sln,双击它,这样Visual Studio就可以得到解决方案中的每个项目和文件,并打开解决方案 4- 成功构建

当我尝试 Dependencies 解决方案文件夹方法并重复上述场景时会发生什么,它将获取解决方案中的所有项目,打开它,但不会从 TFS 中提取依赖项解决方案内容(尽管 Visual Studio 显示了它们在解决方案资源管理器上),我认为这是有缺陷的。

欢迎提出一些不涉及创建前/后构建脚本的建议。

【问题讨论】:

  • 你找到答案了吗?我有同样的问题。我在源代码控制中有一个第三方文件夹,其中有几个第三方 DLL 依赖项,我在运行 TFS 构建时试图复制这些依赖项。谢谢
  • 对不起,我做了一些研究,但没有提出任何建议。猜猜看,最后基本上是被组织起来并确保从物理依赖文件夹中获取最新的,但话又说回来,这听起来很脆弱。无论如何,我没有运气。

标签: visual-studio-2010 dependencies solution build-dependencies


【解决方案1】:

当您首次尝试使用 TFS Source Control Explorer 打开解决方案时,您可能会发现并非所有依赖项都会被检索 - 波浪线可能会突出显示您缺少的一些 References

一种解决方法是...

解决方案设置

  1. 从 TFS 签出所有源代码(即Main 和所有子目录)
  2. 在 Visual Studio 中打开您的解决方案(即MyApplication.sln
  3. 在解决方案资源管理器中,创建一个名为ThirdPartyDllNew Solution Folder,然后添加适当的程序集引用(即Assembly1.dllAssembly2.dll、...)
  4. 将您的解决方案签入到 TFS

示例文件结构

  • 主要
    • MyApplication.sln
    • 来源
      • 我的项目A
        • MyProjectA.csproj
      • 我的项目B
        • MyProjectB.csproj
    • 依赖关系
      • Assembly1.dll
      • Assembly2.dll

【讨论】:

  • 确保一切正常: 1. 关闭 Visual Studio 2. 删除根文件夹 Main 3. 打开 Visual Studio 4. 在 TFS 中浏览到您的应用程序并双击您的解决方案(即 @ 987654330@) 5. 执行构建
  • 替代方法:如果您发现维护“Dependencies”解决方案文件夹令人头疼,那么请考虑将“Dependencies”项目(例如类库)添加到您的解决方案中。这样做的好处是您可以使用 Visual Studio 解决方案资源管理器中的“显示所有文件”按钮来快速添加新的 DLL。您当然必须修改构建以排除您的“依赖项”项目。
  • 我列出的选项工作,但都是黑客。有谁知道微软推荐什么?
【解决方案2】:

您遇到了“从源代码管理打开”功能的限制。如果您从 Visual Studio 将解决方案添加到源代码管理,您应该会看到以下消息:

“您尝试添加到源代码管理的项目可能会导致其他源代码管理用户难以打开此解决方案或获取它的更新版本。为避免此问题,请从以下位置添加项目解决方案中的其他源代码控制项目。”

从源代码管理中打开将为解决方案根目录 (D:\tfs\repository\main\SolutionA) 创建一个工作区映射,但不会为与 SolutionA 对等的 SolutionX 文件夹创建一个单独的工作区映射。在“新”机器上,您需要手动创建到 d:\tfs\repository\main 的工作区映射,以获取 SolutionA 和 SolutionX 文件夹。

【讨论】:

  • 我很欣赏这个答案,但我在获取项目时没有问题。问题在于“无项目”依赖项,即解决方案中不属于任何项目的任何文件,但从解决方案的角度来看,它是一个松散的文件。要实现该状态,只需将解决方案文件夹添加到您已在 TFS 中的解决方案,然后在解决方案文件夹中右键单击 -> 添加现有项目,然后添加任何受 TFS 控制的文件(在同一工作区下)但不'不属于解决方案中的任何项目。
【解决方案3】:

创建一个解决方案文件夹并将依赖项添加到其中,这样当 VS 获得最新的解决方案时,它将下载这些文件。有点脆弱,因为人们需要维护该文件夹,但它可以工作。

或者创建一个 nuget 包并在构建时使用恢复包。当您创建一个新的开发人员框(需要添加您的 nuget 包 repo)时,它将需要几个额外的步骤,但它适用于所有未来的项目,并且比解决方案文件夹方法更脆弱。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多