【问题标题】:Installed project-specific nuget packages not being recognized无法识别已安装的特定于项目的 nuget 包
【发布时间】:2016-05-05 18:59:13
【问题描述】:

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

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

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

  • Common.sln
    • 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.config。确保此项目已安装 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 包的正确方法是什么 在项目级别? (不是解决方案级别)

【问题讨论】:

  • 我认为该消息告诉您它希望 csproj 和 config 处于同一目录级别;你的不是。我还认为,如果您在编辑器中编辑 csproj,您可以更改配置文件路径以指向您实际拥有它的位置。我假设您刚刚将物品从原来的位置搬来搬去。
  • 哦,顺便说一句,“规范”是 csproj 和 config 处于完全相同的级别。这就是 Visual Studio 最初创建它们的方式。但我不认为这是绝对必要的(我可能错了)。如果不需要,您可以更改 csproj 中的配置路径。
  • @jeffprince 对不起,这更像是一种逻辑表示。这一切都在同一级别。
  • 好的,所以我认为您应该转到解决方案的根目录,找到该级别的包目录,然后查看 repositories.config 文件。我怀疑您的每个项目都指定了错误的配置文件名。
  • @JeffPrince 这对我来说似乎是正确的。我的 Web 项目的 repositories.config 文件仅引用自身和 packages.Common.SC65.config。公共库只引用所有形式的packages.Common.SCXX.config,一个packages.config来自它所依赖的库。

标签: .net nuget visual-studio-2015


【解决方案1】:

好吧,看来所有东西都不支持包含项目级别配置的技术。

在我的网络项目中,我使用了/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”。不过就目前而言,这是一个不错的解决方案。

这感觉真的很hacky。 我很想听听其他答案,尤其是那些不涉及修改包内部的答案。

【讨论】:

    【解决方案2】:

    我在 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/

    【讨论】:

    • 我觉得这解决了很多包和版本的问题。我真的希望“清理项目”命令自动为我们完成这项工作。
    • @WiteCastle 不幸的是,今天许多其他问题都是如此。如果您遇到奇怪的错误,只需删除 XF 和 Droid 项目的 bin、obj 文件夹,清理 temp 文件夹。清洁解决方案 - 重建。重启VS等
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    • 2022-01-26
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多