请考虑以下情形:
据我所知,没有办法强迫nuget获得正确的版本。是手动添加正确参考的唯一解决方案吗?
现在,第二种情况:您想通过nuget包分发项目X。当人们安装它时,他们还将自动安装依赖项ENP。您如何确保nuget获取正确的版本?您真的不能要求其他人手动添加正确的依赖项...
这里是为项目X具有多个构建目标的正确解决方案吗?
该项目引用项目X,因此也需要参考ENP。
如果您的项目不直接依赖于ENP,则您的项目实际上不需要引用ENP。就像上面MickyD和Zivkan所评论的一样,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.config
和PackageReference
。所有.net standard and .net core
项目都使用PackageReference格式,而目标.net framework
的项目可以使用packages.config或PackageReference格式。如果您的.net Framework项目选择packages.config
来管理nuget程序包,则在生成后,我们无法从ENP
程序包中找到导致当前项目的文件,并且引用的X
项目没有使用相同的管理格式。为此,创建一个使用packageReference的新项目,或将其添加到当前项目的(packages-config)项目文件中:
<PropertyGroup>
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
</PropertyGroup>
确保此项目和引用的X项目使用相同的PackageReference
格式,然后您会发现“让X执行此操作”可以满足您的需要。
我认为以上脚本可以解决您的第一个问题,然后我们无需继续基于第一个问题的第二个方案。希望对您有所帮助:)