【发布时间】:2010-12-14 14:35:05
【问题描述】:
我们有一个由多个子项目(大约 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 没有此限制。唉,我们没有这些工具,而且在可观察的未来也不太可能拥有。
【问题讨论】:
-
只是为了确保我理解,您有一个包含一个或多个项目的解决方案。其中一些项目引用了解决方案中其他项目的 dll 输出,即使引用的项目在解决方案中?
-
确实如此。但也有其他解决方案,其中不包括一些引用的项目。为了具有这种灵活性,可以随意组合解决方案,我们仅引用 dll。但是,即使涉及的项目都在解决方案中找到,我们也会失去跨项目“浏览到导航”的能力。
-
是的,我也讨厌这样。一个解决方案真的很棒。
标签: .net visual-studio-2008 project-reference