【发布时间】: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
- Common.SC65.csproj
这是我现在遇到的错误:
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”。
更奇怪的是,我现在在互联网上找不到任何引用上述技术来引用项目级别依赖项的技术。我知道我曾经发现过这一点,但我不知道是否应该这样做。
所以,我需要知道的主要事情:
- 什么可能导致我的项目构建中出现上述错误,以及如何 我会修复它吗?
- 设置 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