C# 使用csproj覆盖生成输出中的dll

C# 使用csproj覆盖生成输出中的dll,c#,.net,msbuild,visual-studio-2017,csproj,C#,.net,Msbuild,Visual Studio 2017,Csproj,System.Net.Http中存在一个错误 Visual Studio 2017将从C:\Program Files(x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\Microsoft.Net.Build.Extensions\net461\lib获取系统.Net.Http.dll,并将其放入生成输出中。在我的机器上,这是版本4.3.4(文件版本4.6.26011.1) 如果您使用或甚至直接到不同版本的Syste

System.Net.Http中存在一个错误

Visual Studio 2017将从
C:\Program Files(x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\Microsoft.Net.Build.Extensions\net461\lib
获取
系统.Net.Http.dll
,并将其放入生成输出中。在我的机器上,这是版本4.3.4(文件版本4.6.26011.1)

如果您使用
或甚至直接
到不同版本的
System.Net.Http.dll
,Visual Studio 2017将在创建生成输出(在/bin文件夹中)时忽略您的版本而代之以其版本

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

主要问题:

有没有办法强制msbuild/csproj使用来自NuGet的版本I引用? 也许,我可以在生成后操作中复制并覆盖现有的System.Net.Http.dll吗

我尝试过的:


我尝试使用绑定重定向,但这似乎根本不会影响生成输出()。

可能有更好的方法来实现这一点,但这对我来说很有效:

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

  • .csproj步骤2的代码段:

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

    注意:


    据推测,在net472中,“存在已知问题”对于您的问题上下文来说是一个很大的错误。事实上,它们有很多,每一个都是由不同的因素和不同的解决方案造成的。因此,在您的情况下,您需要按照@joperezr在该线程中的建议,在GitHub上打开一个新问题,并使用一个示例项目来重现该问题。这也适用于堆栈溢出,因为我们都看不到您的代码。顺便说一句,我不明白为什么构建后的操作不会有帮助。@LexLi当然,但不管具体情况如何,我的主要问题仍然存在。无论如何,我知道了如何使用编译后操作来复制和覆盖dll的正确版本。