在Visual Studio中卸载项目时,如何处理引用



在Visual Studio中卸载项目时,任何引用项目对卸载项目的引用都会得到警告三角形。我给自己写了一个宏来做一些聪明的事情(检测项目的添加/删除,并将任何引用从转换为文件/项目依赖项),但我不敢相信我没有错过更简单的东西。如果我不得不手动更改引用(它打破了"个人解决方案/共享项目"团队开发模式),那么卸载功能怎么会有用呢。

(此问题与关于在Visual Studio中构建大型解决方案的问题的答案有关-有些答案提到拥有包含大量项目的解决方案,但"卸载"未使用的项目以提高性能。)

对于我的项目,我创建了一个assemblies文件夹,项目会自动从其他项目复制构建的设置位置复制到该文件夹中。

引用程序集项目的后期构建:

if not exist "C:buildsProject1" md "C:buildsProject1"
copy "$(TargetDir)$(TargetName).*" "C:buildsProject1"

参考项目的预构建:

if exist"c:\builds\Project1\"copy"c:\buildes\Project1*.*"$(ProjectDir)assemblys"

项目文件指向其assemblies子文件夹以获取引用,因此即使从解决方案中卸载了源项目,也将使用最后生成的程序集,而不会出现在开发时将整个项目存储在内存中的性能问题。

如果使用文件引用,将项目放在同一解决方案中有什么好处?

如果您的app.exe使用utils.dll,并且您更改了utils.dll的代码,那么如果它在同一个解决方案中,VS将注意到依赖关系并重新编译两者。如果它不在解决方案中,您将不得不跳出,单独重新编译utils.dll,然后跳回并重新编译app.exe

这或多或少会变得重要,这取决于你的exe引用了多少其他dll,以及它们更改的频率(根据我的经验,在团队环境中共享dll的更改经常发生)
还有一个副作用是,如果VS中有100个项目,那么处理它们将需要很长时间,只是为了弄清楚它们是否需要重新编译。

卸载项目是一个临时操作,因此您可以将实际的项目文件编辑为XML(文本)。如果你想从解决方案中完全删除一个项目,你应该使用"删除"菜单选项,它将负责删除对该项目的任何引用。

使用项目引用的一个优点是,它允许您轻松地通过代码进行调试。它还自动确保您使用正确的配置构建(即,如果您在"调试"模式下构建,它将使用程序集的调试版本)。话虽如此,你对你将选择依赖项目的哪个版本/构建缺乏确定性——项目引用意味着你总是使用最新的。

是的,Visual Studio要确定生成依赖项,必须能够查看和生成所有项目,这意味着项目引用。

我刚刚从MSDN文档中读到了构建解决方案和项目的灵感。

我没有注意到的是,在多项目解决方案中,解决方案资源管理器中的上下文菜单提出了一个项目依赖项弹出窗口。在这里,如果您还没有通过项目之间的项目引用来定义项目依赖关系,那么您可以手动定义它们。

请参阅此处(MSDN链接,因此将在几周后自毁)

最新更新