Visual studio 2015 VS 2015引用了web应用程序的bin dir中更新的DLL,即使未触发构建
这让我们抓狂:Visual studio 2015 VS 2015引用了web应用程序的bin dir中更新的DLL,即使未触发构建,visual-studio-2015,Visual Studio 2015,这让我们抓狂: 在VS 2015中创建新的解决方案 添加一个名为“Dependency”的类项目 添加一个名为“消费”的空web应用程序 在“Dependency”中,添加对Castle.Core版本2.5.2的nuget引用 在“消费”中,添加对Castle.Core版本3.3.3的nuget引用 (您可以使用pacakges.config或project.json-没有区别) 将项目引用从“消费”添加到“依赖” 现在,构建您的整个sln,并调查“消费”的bin dir中Castle.Co
- 在VS 2015中创建新的解决方案
- 添加一个名为“Dependency”的类项目
- 添加一个名为“消费”的空web应用程序
- 在“Dependency”中,添加对Castle.Core版本2.5.2的nuget引用
- 在“消费”中,添加对Castle.Core版本3.3.3的nuget引用 (您可以使用pacakges.config或project.json-没有区别)
- 将项目引用从“消费”添加到“依赖”
- 从干净的bin文件夹开始,MSBuild sln:
如果有人认为这只是一个有趣的转移,那么在一个有许多库项目和匹配单元测试项目的SLN中,这会给像R#这样的测试运行者带来问题,R#将增量构建单元测试项目的依赖关系。这种恶劣的副作用会导致sln中的所有Web应用程序更新其bin文件夹,即使它们没有被单元测试或库项目引用 也许是一个愚蠢的问题,但为什么要保留两个不同的参考资料呢?好吧,这不是一个愚蠢的问题,但不管怎样,这仍然是令人惊讶的行为。。。“依赖关系”是由其他团队维护的常见项目,在许多解决方案中使用。“消费”将声明一个绑定重定向,该重定向将使Dependency.dll中的castle.core代码保持愉快。将msbuild详细信息更改为Detailed,它会对此非常喋喋不休。它将不得不选择一个受害者项目,该项目将获得错误版本的DLL。当然,只有当它知道您的解决方案使用的所有项目时,它才有机会。正如您所发现的,当您只构建一个项目时,没有任何问题。构建跟踪还应该告诉您为什么控制台项目是“特殊的”。主要参考和间接参考之间的区别很重要,第一个是赢家。我想你误解了:我正在VS内部构建一个项目,而sln是开放的。该项目(依赖项)没有引用sln中的另一个项目(正在使用),事实上,并未实际生成正在使用的项目,但DLL在其bin文件夹中被替换。您是否已从命令行生成?我们注意到,在项目解析中,从命令行使用VisualStudio本身(devenv.exe)和使用msbuild进行构建的行为不同。以msbuild为例构建解决方案(当前配置禁用了消费)时会发生什么情况? 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)).