在.NET Framework中使用.NET标准库时获取正确的依赖版本

问题描述 投票:0回答:1

请考虑以下情形:

  1. 您的解决方案中有一个针对Netstandard20的项目“ X”。
  2. Project X依赖于外部nuget程序包“ ENP”,该程序对于netstandard和netframework具有不同的版本。当您将ENP添加到项目X时,您将获得netstandard版本。
  3. 您在针对.NET Framework 4.7的解决方案中有一个项目“ Y”。该项目引用项目X,因此也需要引用ENP。但是,如果将ENP作为nuget包添加到该项目中,则将获得.NET Framework版本而不是.NET Standard版本,并且您的应用程序将崩溃。

据我所知,没有办法强迫nuget获得正确的版本。是手动添加正确参考的唯一解决方案吗?

现在,第二种情况:您想通过nuget包分发项目X。当人们安装它时,他们还将自动安装依赖项ENP。您如何确保nuget获取正确的版本?您真的不能要求其他人手动添加正确的依赖项...

这里是为项目X具有多个构建目标的正确解决方案吗?

c# .net visual-studio nuget .net-standard
1个回答
0
投票

该项目引用项目X,因此也需要参考ENP。

如果您的项目不直接依赖于ENP,则您的项目实际上不需要引用ENP。就像上面MickyDZivkan所评论的一样,nuget可以按照您的方案设计工作。

对于您遇到的Y does not have an immediate dependency, but "letting X do it" does nothing. The files aren't copied over on compile行为,我认为这可能是因为您当前的项目未使用PackageReference格式。

存在两种管理nuget软件包的格式,即Package.configPackageReference。所有.net standard and .net core项目都使用PackageReference格式,而目标.net framework的项目可以使用packages.configPackageReference格式。如果您的.net Framework项目选择packages.config来管理nuget程序包,则在生成后,我们无法从ENP程序包中找到导致当前项目的文件,并且引用的X项目没有使用相同的管理格式。为此,创建一个使用packageReference的新项目,或将其添加到当前项目的(packages-config)项目文件中:

  <PropertyGroup>
    <RestoreProjectStyle>PackageReference</RestoreProjectStyle>
  </PropertyGroup>

确保此项目和引用的X项目使用相同的PackageReference格式,然后您会发现“让X执行此操作”可以满足您的需要。

我认为以上脚本可以解决您的第一个问题,然后我们无需继续基于第一个问题的第二个方案。希望对您有所帮助:)

© www.soinside.com 2019 - 2024. All rights reserved.