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

时间:2015-08-27 15:55:41

标签: .net nuget visual-studio-2015

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

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

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

  • Common.sln
    • Common.SC65.csproj
      • MyClass.cs [shared]
      • MyClass.SC65.cs
      • packages.Common.SC65.config
    • Common.SC70.csproj
      • MyClass.cs [shared]
      • MyClass.SC70.cs
      • packages.Common.SC70.config
    • Common.SC72.csproj
      • MyClass.cs [shared]
      • 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)" />

&#34; Website.ProjectSC65&#34;引用Common.SC65。

我偶尔会遇到奇怪的问题,nuget包表现得很有趣,但无论我做什么,我都无法摆脱这个问题。大多数Update-Package -reinstall组合解决了我的问题。我需要每个项目使用不同的包,因为它们支持不同版本的框架。

我完全清楚它正在寻找一个技术上不存在的包文件,因为它应该引用&quot; packages.Common.SC65.config&#39;。

我们还有什么奇迹,我现在无法在互联网上找到任何东西引用上述技术来引用项目级别的依赖关系。我知道我一度发现了这一点,但我不知道这是不是应该怎么做。

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

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

2 个答案:

答案 0 :(得分: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软件包,我可能会引起问题,这些软件包是从链接上方的其他库引用的,这些软件包只是&#34; packages.config&#34;。但就目前而言,这是一个不错的解决方案。

但这感觉真的太烂了。 我很乐意听到其他答案,特别是那些不需要修改包装内部的答案。

答案 1 :(得分:1)

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