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

Installed project-specific nuget packages not being recognized

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

我们有很多网站都使用名为 Sitecore 的网络 CMS。我们不同的网站在不同的版本下工作。因此,我们有一个针对许多版本的通用库 as described here.

所以,我有一个如下所示的项目结构。请记住这是一个 逻辑 表示。将所有这些文件视为解决方案的根。

这是我现在遇到的错误:

C:\Path\Website.ProjectSC65\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets(225,5): error : Could not locate C:\Path\Common\packages.config. Ensure that this project has Microsoft.Bcl.Build installed and packages.config is located next to the project file.

这让我相信问题出在那个 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'。

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

所以,我需要知道的主要事情:

  1. 在我的项目构建中可能导致上述错误的原因是什么,以及如何 我会修理它吗?
  2. 设置 nuget 包的正确方法是什么 在项目级别? (不是解决方案级别)

好吧,看来 everything.

不支持包含项目级配置的技术

在我的网络项目中,我使用了 /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 包,我从链上游的其他库引用的其他 nuget 包,这可能会在以后引起问题,这些包只是 "packages.config"。不过就目前而言,这是一个不错的解决方案。

虽然这感觉真的很老套。 我很想听到其他答案,尤其是那些不涉及修改包内部结构的答案。

我在 UWP 项目上遇到了同样的错误。以下内容对我有用。

我检查并在正确的目录中看到了 package.config,我确实有 Microsoft.BCL.Build。让它工作的唯一方法是关闭 visual studio 删除解决方案目录中的 obj 文件夹。删除 obj 文件夹后,我在 visual studio 中重新加载了项目,一切又恢复了。

来源: http://onteorablog.azurewebsites.net/ensure-that-this-project-has-microsoft-bcl-build-installed-and-packages-config-is-located-next-to-the-project-file/