无法识别已安装的项目特定的nuget软件包

扎卡里·道

我有一个由于nuget错误而无法构建的Web项目。

我们有许多网站都使用称为Sitecore的Web CMS。我们不同的网站使用不同的版本。因此,我们有一个针对许多版本的通用库,如此处所述

因此,我有一个如下所示的项目结构。请记住,这是一个逻辑表示。考虑所有这些文件都是解决方案的根源。

  • 普通
    • Common.SC65.csproj
      • MyClass.cs [共享的]
      • MyClass.SC65.cs
      • packages.Common.SC65.config
    • Common.SC70.csproj
      • MyClass.cs [共享的]
      • MyClass.SC70.cs
      • packages.Common.SC70.config
    • Common.SC72.csproj
      • MyClass.cs [共享的]
      • MyClass.SC72.cs
      • packages.Common.SC72.config

这是我现在遇到的错误:

C:\ Path \ Website.ProjectSC65 \ packages \ Microsoft.Bcl.Build.1.0.14 \ tools \ Microsoft.Bcl.Build.targets(225,5):错误:找不到C:\ Path \ Common \ packages。配置。确保此项目已安装Microsoft.Bcl.Build,并且packages.config位于项目文件旁边。

这使我相信问题出在Bcl目标文件中,并且似乎对此行大喊:

<ValidatePackageReferences Packages="@(ValidatePackages)"
                           ReferencingProject="$(BclBuildReferencingProject)"
                           ReferencingProjectPackagesConfig="$(BclBuildReferencingProjectConfig)"
                           ReferencedProject="$(MSBuildProjectFullPath)"
                           ReferencedProjectPackagesConfig="$(MSBuildProjectDirectory)\packages.config"
                           TreatWarningsAsErrors="$(TreatWarningsAsErrors)" />

“ Website.ProjectSC65”具有对Common.SC65的引用。

我偶尔会遇到一些奇怪的问题,例如nuget包表现得很滑稽,但是无论我做什么,我似乎都无法摆脱这个问题。通常,某些Update-Package -reinstall组合可以解决我的问题。每个项目我需要这些不同的程序包,因为它们支持框架的不同版本。

我完全知道它正在寻找技术上不存在的软件包文件,因为它应该引用“ packages.Common.SC65.config”。

仍然奇怪的是,现在我在互联网上找不到任何引用上述技术来引用项目级别依赖项的内容。我知道我曾经发现过这一点,但是我不知道是否应该这样做。

因此,我需要了解的主要事项:

  1. 是什么原因导致上述错误出现在我的项目构建中,我该如何解决?
  2. 项目级别设置nuget包正确方法是什么?(不是解决方案级别)
扎卡里·道

好的,因此似乎似乎并非所有组件都支持包含项目级别配置的技术

在我的Web项目中,我获取了/packages/Microsoft.Bcl.Build.1.0.14/tools/Microsoft.Bcl.Build.targets文件并修改了它抱怨的行。

<ValidatePackageReferences Packages="@(ValidatePackages)"
                           ReferencingProject="$(BclBuildReferencingProject)"
                           ReferencingProjectPackagesConfig="$(BclBuildReferencingProjectConfig)"
                           ReferencedProject="$(MSBuildProjectFullPath)"
                           ReferencedProjectPackagesConfig="$(MSBuildProjectDirectory)\packages.config"
                           TreatWarningsAsErrors="$(TreatWarningsAsErrors)" />

我通过替换这一行来做到这一点: ReferencedProjectPackagesConfig="$(MSBuildProjectDirectory)\packages.config"

用这行:

ReferencedProjectPackagesConfig="$(MSBuildProjectDirectory)\packages.$(MSBuildProjectName).config"

将项目名称注入到属性中效果很好。如果我还有其他的nuget包,这些包是我从链上的其他更高版本库中引用的,这些包就是“ packages.config”,那么这可能会在以后引起问题。目前,这是一个不错的解决方案。

不过,这感觉确实很hack。我很想听听其他答案,尤其是那些不涉及修改程序包内部的答案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章