警告:所有引用MyProject.csproj的项目都必须安装nuget包Microsoft.Bcl.Build


90

我有一个在VS 2012中开发的ASP.NET MVC 4应用程序。该应用程序包含一个主项目(MyProject),一个单元测试项目(MyProject.Tests),一个Azure部署项目(MyProject.Azure)和几个通用图书馆项目。

当我右键单击解决方案或主项目并选择“管理NuGet程序包”时,我会看到许多Microsoft更新,这些更新显然在上个月左右可用。如果单击“全部更新”按钮,则显然安装了更新,而没有任何明显的问题,但是当我构建解决方案时,出现此错误消息两次:

warning : All projects referencing MyProject.csproj must install nuget package Microsoft.Bcl.Build

好的,所以我有两个引用MyProject的项目:MyProject.Tests和MyProject.Azure。我可以右键单击MyProject.Tests,选择ManageNuGet Packages,然后添加Microsoft.Bcl.Build。这摆脱了两个警告之一。但是VS没有给我提供管理MyProject.Azure项目的NuGet包的选项

如何将Microsoft.Bcl.Build包添加到Azure部署项目中?

编辑:

由于用户激增,我现在知道这里已经打开针对此问题的Microsoft Connect问题。


2
感谢您对连接问题的参考,这是一个令人讨厌的问题。
Paul Keister 2013年

1
构建部署项目时的警告相关,还有一个错误会在发布项目时导致虚假警告。Connect上报告了与发布相关的错误。我不知道解决方法。
Edward Brey 2014年

3
对于引用其他项目的WiX项目,我也遇到同样的问题(目的是收获项目输出,也就是“热量”)。WiX安装程序项目安装NuGet软件包毫无意义!啊!
Jaans 2014年

Answers:


54

如果双击警告,它将为您提供有关禁用警告的说明。

从尚不支持Nuget的项目中禁用项目引用是安全的。

请参阅下面从Microsoft.Bcl.Build.targets复制的粗体部分。

BclBuildValidateNugetPackage参考

通过为参考设置SkipValidatePackageReferences = true,可以为项目参考禁用此目标:

<ProjectReference Include="..\pcl\pcl.csproj">
  <Project>{664a9e98-fac7-4567-a046-0dde95fddb48}</Project>
  <Name>pcl</Name>
  <Properties>SkipValidatePackageReferences=true</Properties>
</ProjectReference>

4
Arthur,您可以尝试设置AdditionalPropertes元数据值而不是Properties吗?
TheESJ 2013年

5
@TheESJ我在WiX项目中遇到了这个问题,看起来像设置AdditionalProperties而不是Properties是可以的。我感兴趣的是知道为什么,虽然
LC。

3
这仅用于构建解决方案,但是当您将“运行”与azure项目一起用作启动项目时,您将再次看到警告。
2015年

2
即使在构建中也不工作。VS 2015社区版。
Artyom 2015年

2
在VS2015 Professional中不起作用。我在添加此行时遇到相同的问题。
aclalex

63

TheESJ提供的答案是正确的,但是措词对我来说不清楚。由于我无法评论答案,因此我将在此处提供更多详细信息。具体来说,我在Azure项目中遇到了这个问题,需要采取以下解决方法才能消除警告:

在Visual Studio中双击警告时,您将被带到Microsoft.BclBuild.targets文件中的BclBuildValidateNugetPackageReferences目标。在实际目标元素上方,您应该找到一个较大的注释块,其中涉及禁用项目引用检查。由于Azure项目不能有任何库引用,因此这些Azure项目不可能满足此特定生成目标的要求。

解决方案?禁用Azure项目中的引用检查,因为实际上无法添加nuget包引用。

因此,假设我们有两个项目:MyAzureProject.ccproj,它引用MyProject.csproj。跟着这些步骤:

  1. 在解决方案资源管理器中右键单击“ MyAzureProject”,然后选择“编辑项目文件”。
  2. 找到对“ MyProject”的项目引用。它看起来应该像这样:

    <ProjectReference Include="..\MyProject\MyProject.csproj">
      <Name>MyProject</Name>
      <Project>{1d99490e-d140-4897-9890-238e673a5864}</Project>
      ...
    </ProjectReference>
    
  3. 在ProjectReference元素内添加以下元素:

      <Properties>SkipValidatePackageReferences=true</Properties>
    
  4. 您的项目参考现在应如下所示:

    <ProjectReference Include="..\MyProject\MyProject.csproj">
      <Name>MyProject</Name>
      <Project>{1d99490e-d140-4897-9890-238e673a5864}</Project>
      ...
      <Properties>SkipValidatePackageReferences=true</Properties>
    </ProjectReference>
    
  5. 在解决方案资源管理器中右键单击“ MyAzureProject”,然后选择“重新加载项目”。

您现在应该可以重建并且错误应该消失了。


17
在我的VS版本中,我必须先右键单击并“卸载项目”,然后才能右键单击以编辑项目文件
pius

2
你的意思MyAzureProject.ccproj不是MyAzureProject.csproj吗?
Edward Brey 2014年

仅当我将'<Properties> SkipValidatePackageReferences = true </ Properties>'添加到引用的项目* .csproj文件时,该方法才有效。仅编辑* .ccproj不起作用。
alexey '16

1
@pius这是一个小功能,但是Productivity Power Tools中 “ Power Commands”下有一个“ Edit Project File”上下文菜单选项,可用于多个版本的VS。它将一键卸载项目并为您打开项目文件。
杰夫

16

我遇到了同样的问题,并试图更新Microsoft.Bcl.Build.targets;。这没有帮助。

经过调查发现,必须将Azure Service项目的.csproj文件修改为包括<Properties>SkipValidatePackageReferences=true</Properties>

从@TheESJ的答案中看不出来,因此决定单独发布答案。感谢@TheESJ。


2

我多次遇到此问题,并且Properties方法确实起作用,但是在处理Wix项目时,我不得不执行以下操作:

<AdditionalProperties>SkipValidatePackageReferences=true</AdditionalProperties>

当我使用Properties Xml节点时,出现了一个新错误:

未为项目“ MyInstallerProject.csproj”设置OutputPath属性。请检查以确保为该项目指定了配置和平台的有效组合。配置=“调试”平台=“ x86”。如果某个其他项目试图遵循该项目的项目间引用,此项目已被卸载或未包含在解决方案中,并且引用项目未使用相同或等效项构建,则也可能会出现此错误。配置或平台。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.