无法识别已安装的特定于项目的 nuget 包
Installed project-specific nuget packages not being recognized
我有一个 Web 项目由于 nuget 错误而无法构建。
我们有很多网站都使用名为 Sitecore 的网络 CMS。我们不同的网站在不同的版本下工作。因此,我们有一个针对许多版本的通用库 as described here.
所以,我有一个如下所示的项目结构。请记住这是一个 逻辑 表示。将所有这些文件视为解决方案的根。
- Common.sln
- 常见。SC65.csproj
- MyClass.cs [共享]
- MyClass.SC65.cs
- packages.Common.SC65.config
- 普通。SC70.csproj
- MyClass.cs [共享]
- MyClass.SC70.cs
- packages.Common.SC70.config
- 普通。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'。
更奇怪的是,我现在在 Internet 上找不到任何内容 引用上述技术来引用项目级依赖项。我知道我曾经发现过这一点,但我不知道是否应该这样做。
所以,我需要知道的主要事情:
- 在我的项目构建中可能导致上述错误的原因是什么,以及如何
我会修理它吗?
- 设置 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 中重新加载了项目,一切又恢复了。
我有一个 Web 项目由于 nuget 错误而无法构建。
我们有很多网站都使用名为 Sitecore 的网络 CMS。我们不同的网站在不同的版本下工作。因此,我们有一个针对许多版本的通用库 as described here.
所以,我有一个如下所示的项目结构。请记住这是一个 逻辑 表示。将所有这些文件视为解决方案的根。
- Common.sln
- 常见。SC65.csproj
- MyClass.cs [共享]
- MyClass.SC65.cs
- packages.Common.SC65.config
- 普通。SC70.csproj
- MyClass.cs [共享]
- MyClass.SC70.cs
- packages.Common.SC70.config
- 普通。SC72.csproj
- MyClass.cs [共享]
- MyClass.SC72.cs
- packages.Common.SC72.config
- 常见。SC65.csproj
这是我现在遇到的错误:
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 上找不到任何内容 引用上述技术来引用项目级依赖项。我知道我曾经发现过这一点,但我不知道是否应该这样做。
所以,我需要知道的主要事情:
- 在我的项目构建中可能导致上述错误的原因是什么,以及如何 我会修理它吗?
- 设置 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 中重新加载了项目,一切又恢复了。