簡體   English   中英

MSBuild:刪除對通過 NuGet 添加的程序集的引用

[英]MSBuild: Remove Reference to Assembly added via NuGet

在將一些遺留代碼從 packages.config 移動到 PackageReference 的過程中。

我有一個 NuGet 包(比如說 A.nupkg),它引用了不同的 NuPkg (B.nupkg)。 B.nupkg 包含對 Foo.dll 的引用。

一個項目在 packages.config 中引用了 A.nupkg,但 B.nupkg 沒有(盡管是傳遞依賴項)。 問題是該項目以 Foov2.dll 的形式引用了 Foo API 的替換(相同的命名空間和類,但包括錯誤修復)

現在隨着對 PackageReference 的更改,傳遞依賴被拾取,Foo.dll 被項目引用,我們最終在 Foo.dll 和 Foov2.dll 之間得到了模糊的引用。 我無法更改 NuGet 包(希望可以),所以我需要一個解決方法。

我嘗試在構建它之前添加一個刪除不需要的引用的目標,但我找不到放置它的正確位置 - 或者來自 NuGets 的引用的處理方式可能與普通引用不同:

  <Target Name="RemoveOutdatedReferences" BeforeTargets="BeforeBuild">
    <Message Importance="High" Text="All references: @(Reference->'%(FileName)'). 
           Sadly no Foo.dll so no wonder I can't remove it."/>
    <ItemGroup>
      <Reference Remove="Foo, Version=1.2.3.4, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
    </ItemGroup>
  </Target>

或者,我也嘗試刪除整個傳遞 NuGet 包,但使用<PackageReference Remove="Foo"/>也不起作用。

看起來 PackageReference Alias 功能是專門為命名空間沖突場景設計的。

https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files#packagereference-aliases

在極少數情況下,不同的包將包含同一命名空間中的類。 從 NuGet 5.7 和 Visual Studio 2019 Update 7 開始,相當於 ProjectReference,PackageReference 支持別名。 默認情況下不提供別名。 指定別名時,來自帶注釋的包的所有程序集都需要使用別名引用。

根據我們的小討論,到目前為止,我看到的唯一選擇是創建一個自定義 NuGet 包,它封裝A.nupkg而沒有其依賴項:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <PackageId>My.Wrapper.Around.A<PackageId>
    <PackageVersion>1.0.0<PackageVersion>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="A" Version="x.y.z">
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
  </ItemGroup>
</Project>

根據Microsoft docs<PrivateAssets>all</PrivateAssets>應防止A.nupkg的所有傳遞依賴項流向消費者。

在您的目標項目中:

<Project Sdk="Microsoft.NET.Sdk">
  <ItemGroup>
    <PackageReference Include="My.Wrapper.Around.A" Version="1.0.0" />
    <PackageReference Include="Foov2" Version="1.0.0" />
  </ItemGroup>
</Project>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM