这让我们感到疯狂:
现在,构建你的整个sln并在"消费"的bin目录中调查Castle.Core的版本。 - 确实如预期的那样是3.3.3。
但是,现在只执行项目构建"依赖"。奇怪的是,Castle #Core DLL位于"消费"的bin目录中。是更新到2.5.2 - 即使建立"依赖"不应该触发"消费"
的构建现在重复相同的过程,但要做到"消费"是一个控制台应用程序 - 它不会发生!
这到底是怎么回事?
(我很确定它与nuget无关:我认为它会在常规程序集引用中出现)
更新 @ Schwarzie2478让我在命令行上使用MSBuild尝试相同的序列。正如我所料,上面观察到的行为没有发生,所以这只是一个VS问题:
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文件夹 - 即使它们未被单元测试或库项目引用。