使用csproj覆盖构建输出中的dll

时间:2018-10-26 18:31:41

标签: c# .net msbuild visual-studio-2017 csproj

System.Net.Http有一个known issue

Visual Studio 2017将从System.Net.Http.dll中提取C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib并将其放入构建输出中。在我的计算机上,这是版本4.3.4(文件版本4.6.26011.1)

如果您使用<PackageReference>或什至直接<Reference>System.Net.Http.dll的其他版本,则Visual Studio 2017在创建生成输出时将忽略您的版本,而使用其版本(在/ bin文件夹中)。

当您尝试从外部调用dll时,这将导致错误。

主要问题:

有什么方法可以强制msbuild / csproj使用我从NuGet引用的版本? 也许可以在构建后的操作中复制并覆盖现有的System.Net.Http.dll吗?

我尝试过的事情:

我尝试使用绑定重定向,但这似乎根本不影响构建输出(see this comment)。

1 个答案:

答案 0 :(得分:0)

也许有更好的方法,但这对我有用:

  1. 找到正确版本的System.Net.Http.dll,然后将其放置 您的项目可访问的位置(例如,在/ libs文件夹下 您的根项目文件夹)
  2. 使用msbuild / csproj生成后操作,将正确的版本复制到生成输出中

.csproj片段,用于步骤2:

<Target Name="CopyFiles" AfterTargets="Build">
  <Copy SourceFiles="libs\System.Net.Http.dll" DestinationFolder="$(OutputPath)" />
</Target>

注意:

应该是net472中的this will be fixed