.net - 无法识别已安装的项目特定的 nuget 包

标签 .net nuget visual-studio-2015

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

我们有许多网站都使用名为 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): 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”。

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

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

  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"

将项目名称注入(inject)属性确实效果很好。如果我有其他 nuget 包,我从链上更高的其他库(只是“packages.config”)引用,这可能会在以后引起问题。但就目前而言,这是一个不错的解决方案。

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

关于.net - 无法识别已安装的项目特定的 nuget 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32254228/

相关文章:

nuget - 使用 .NET CLI 将 NuGet 包推送到 VSTS

.net - 具有依赖于其他 NuGet 包的 NuGet 依赖项的 Visual Studio 模板

nuget - 如何在 Visual Studio 2019 上使用 github nuget 包

c# - 我如何强制对 Team Foundation 进行有意义的 checkin 评论?

c# - NuGet 恢复在 Docker 容器内停止工作

c# - WCF 高实例计数 : anyone knows negative sideffects?

c++ - 与 PVOID 的参数类型不兼容

nuget - 如何让 Visual Studio 2015 RC 从我的 nuget.config 中获取 repositoryPath 设置?

.net - 为什么我不能使用 IntelliTrace for VS 2010 检查局部变量?

c# - 在 Foreach 关键字中等待