【问题标题】:overwrite dll in build output using csproj使用 csproj 覆盖构建输出中的 dll
【发布时间】:2018-10-26 18:31:40
【问题描述】:

System.Net.Http 中有一个known issue

Visual Studio 2017 将从 C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib 获取 System.Net.Http.dll 并将其放入构建输出中。在我的机器上,这是版本 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)。

【问题讨论】:

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

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


【解决方案1】:

可能有更好的方法来做到这一点,但这对我有用:

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

.csproj sn-p 用于第 2 步:

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

注意:

据说,this will be fixed 在 net472 中

【讨论】:

    猜你喜欢
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 2015-09-25
    • 1970-01-01
    • 2021-05-02
    • 2014-01-13
    • 1970-01-01
    相关资源
    最近更新 更多