如何解析.net6中的共享包和项目引用?

j5fpnvbx  于 2023-04-22  发布在  .NET
关注(0)|答案(1)|浏览(161)

我有一个.net471项目,我目前正在尝试升级到.net6,我们称之为项目A。
项目A有一个ProjectReference到项目B。项目A也有许多PackageReferences。其中一个PackageReferences,包C,有一个PackageReference到包B,这是项目B的一个nuget包。
因此,A引用B和C,C也引用B的 * 版本 *。
在.net471下,一切都很好。一些巫毒魔法正在发生,似乎允许所有的引用都被解析,唯一存在的来自项目B的dll是项目B构建dll。(nuget版本似乎不存在)。
在.net6下,一切都构建好了,看起来和以前一样,项目B dll存在(不是nuget Package B),但是当代码运行时,Package C现在尝试调用Package B,但是失败了,因为版本化的dll不存在。
目前,我能想到的唯一允许.net471工作的方法是在csproj中添加一个AutoGenerateBindingRedirects标记,但是,该标记似乎没有在我的.net6项目中产生任何更改。
去掉项目引用以支持nuget引用并不是我们解决方案列表中的首要问题。有哪些选项可以保留项目引用,并满足包对版本化dll的需求?

7ajki6be

7ajki6be1#

根据article,在csproj中添加类似的东西应该在运行时统一同一程序集的不同版本。

<PropertyGroup>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
  <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup>

如果您想了解更多有关程序集统一的工作原理,请访问MSDOC的链接。

相关问题