Msbuild 什么´;在VS解决方案文件中创建项目依赖项的目的是什么

Msbuild 什么´;在VS解决方案文件中创建项目依赖项的目的是什么,msbuild,visual-studio-2017,Msbuild,Visual Studio 2017,我读过,但仍然不知道解决方案文件中提供的依赖项的实际用途,而不是项目文件本身 根据项目1,似乎有两种方法可以使用项目2: 将项目引用从p2添加到p1。这将通过在p1.csproj中引入ProjectReference来改变p2的csproj文件,但据我所知,不会改变解决方案 将部件参照从p2添加到p1。Thill还将使用编译程序集(dll)的引用来更改csproj文件。但是,它还向解决方案文件中添加了一个ProectDependency,我不理解。在这种情况下,为什么解决方案中需要第二个条目?c

我读过,但仍然不知道解决方案文件中提供的依赖项的实际用途,而不是项目文件本身

根据项目1,似乎有两种方法可以使用项目2:

  • 将项目引用从p2添加到p1。这将通过在p1.csproj中引入
    ProjectReference
    来改变p2的csproj文件,但据我所知,不会改变解决方案
  • 将部件参照从p2添加到p1。Thill还将使用编译程序集(dll)的
    引用
    来更改csproj文件。但是,它还向解决方案文件中添加了一个
    ProectDependency
    ,我不理解。在这种情况下,为什么解决方案中需要第二个条目?csproj文件中提供的p2组件参考是否足够

  • 这纯粹是历史。新的项目文件实际上不再需要它,但是
    .sln
    文件格式早于msbuild,因此解决方案文件有一些重复

    它用于定义构建顺序,当您的解决方案中有古老的项目类型时,构建顺序变得更加重要,因为这些类型将无法声明构建顺序。它还用于声明和验证不相关项目(例如,互不引用的项目)之间的构建顺序,而无需IDE加载和解析所有项目


    第二种情况是解决方案文件跟踪构建顺序的情况之一。然后它知道需要在P2之前构建P1。如果没有解决方案级别的参考,信息将丢失。这是非常聪明的,它是自动检测和添加的,在过去,您需要手动定义这样的构建顺序依赖项

    在编译时,
    .sln
    被转换成一个msbuild文件,然后由该文件协调生成。(见)

    该解决方案文件很古老,并且有一些msbuild之前遗留下来的人工制品。有些东西只是因为“原因”才需要存在


    如果他们从头开始构建VS,解决方案文件将看起来非常不同。

    “自动检测并添加这一点非常聪明”你的意思是当我在VS中添加对程序集的引用时,不是吗?是的,这就是我的意思。