VS 2015引用了在Web应用的bin目录中更新的DLL,即使没有触发构建

时间:2016-07-26 12:03:24

标签: visual-studio-2015

这让我们感到疯狂:

  • 在VS 2015中创建新解决方案。
  • 添加一个名为" Dependency"
  • 的课程项目
  • 添加一个名为" Consuming"
  • 的空Web应用程序
  • 在"依赖"中,添加一个nuget引用到Castle.Core,版本2.5.2
  • 在"消费"中,添加一个nuget引用到Castle.Core,版本3.3.3 (你可以使用pacakges.config或project.json - 没有区别)
  • 从"消费"添加项目参考。到"依赖"

现在,构建你的整个sln并在"消费"的bin目录中调查Castle.Core的版本。 - 确实如预期的那样是3.3.3。

但是,现在只执行项目构建"依赖"。奇怪的是,Castle #Core DLL位于"消费"的bin目录中。是更新到2.5.2 - 即使建立"依赖"不应该触发"消费"

的构建

现在重复相同的过程,但要做到"消费"是一个控制台应用程序 - 它不会发生!

这到底是怎么回事?

(我很确定它与nuget无关:我认为它会在常规程序集引用中出现)

更新 @ Schwarzie2478让我在命令行上使用MSBuild尝试相同的序列。正如我所料,上面观察到的行为没有发生,所以这只是一个VS问题:

  • 从干净的bin文件夹开始,MSBuild sln:
PS v5 (0.0140067) D:\Temp\DependencyTest\DependencyTest> msbuild /t:Build .\DependencyTest.sln
....
Project "D:\Temp\DependencyTest\DependencyTest\DependencyTest.sln" (1) is building "D:\Temp\DependencyTest\DependencyTest\WebApp\WebApp.csproj" (4) on node 1 (default targets).
....
_CopyFilesMarkedCopyLocal:
  Copying file from "D:\Temp\DependencyTest\DependencyTest\packages\Castle.Core.3.3.3\lib\net45\Castle.Core.dll" to "bin\Castle.Core.dll".
    ...

此时,WebApp \ bin \ debug中的DLL版本为3.3.3

现在,在它自己的基础上构建依赖项目 - 没有构建"消费"被触发:

PS v5 (2.8423647) D:\Temp\DependencyTest\DependencyTest> msbuild /t:build .\Dependency\Dependency.csproj
...
Project "D:\Temp\DependencyTest\DependencyTest\Dependency\Dependency.csproj" on node 1 (build target(s)).
...
CoreCompile:
Skipping target "CoreCompile" because all output files are up-to-date with respect to the input files.
CopyFilesToOutputDirectory:
  Dependency -> D:\Temp\DependencyTest\DependencyTest\Dependency\bin\Debug\Dependency.dll
Done Building Project "D:\Temp\DependencyTest\DependencyTest\Dependency\Dependency.csproj" (build target(s)).

正如预期的那样,"消费" WebApp的bin目录。

如果有人认为这只是一个有趣的转移,在有许多具有匹配单元测试项目的库项目的SLN中,这会给像R#这样的测试运行器带来问题,这会对单元测试项目的依赖性进行增量构建。这种令人讨厌的副作用导致sln中的所有Web应用程序更新其bin文件夹 - 即使它们未被单元测试或库项目引用。

0 个答案:

没有答案