我们有一个由多个子项目(大约 20 个)组成的 .NET 项目。有几个解决方案,每个解决方案只包含与特定解决方案相关的子项目。
为了允许任意解决方案,我们的子项目从不通过项目引用相互引用,而是通过直接 dll 引用。csproj 文件几乎没有调整,以使 HintPath 包含 $(Configuration),因此 Debug 构建参考 Debug dll,Release 构建参考 Release dll。
一切都很好,但有两个主要问题 - 一个很烦人,另一个非常严重:
- VS 不识别用于依赖计算的 dll 引用。每次添加新项目或引用时,我们都必须使用“项目依赖项”对话框手动指定依赖项。这很烦人。
- 我们既不使用 Resharper 也不使用 Visual Assist(很棒的工具,但我们不使用它们,这是给定的)。我们喜欢使用标准的“浏览至定义”命令(例如,可从源代码的上下文菜单中获得)。严重的问题是,如果一个项目使用项目引用引用另一个项目,则它仅适用于跨项目,并且当引用是直接 dll 引用时它不起作用,即使引用的项目包含在解决方案中!这真是太糟糕了,因为它不是导航到源,而是导航到元数据。
我正在寻求那些像我们一样使用 dll 引用并以某种方式克服这两个问题的人的建议。谢谢。
编辑:
请注意,除了“浏览到定义”问题之外,使用 Dll 引用而不是项目引用只会对项目经理产生一次成本 - 这是在添加新项目或新依赖项时更新每个受影响解决方案的项目依赖项必须介绍。这些项目依赖项保存在 .sln 文件中,并且在新项目到达或创建新依赖项之前不需要任何维护,这种情况并不经常发生。
我们使用 msbuild 在 CI 服务器上构建我们的项目,它使用与 VS 相同的 .sln 文件。有一个主 .sln 文件,其中包括所有子项目。
我想强调一个更严重的问题 - 无法浏览到另一个项目中的定义,尽管两个项目都在同一个解决方案中,只是因为引用是 dll 引用。这很烦人,也很烦人,VS 没有理由坚持使用项目引用来启用该功能。其他工具,如 Resharper 或 Visual Assist 没有此限制。唉,我们没有这些工具,而且在可观察的未来也不太可能拥有。