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

时间:2013-06-18 22:45:42

标签: visual-studio visual-studio-2012 nuget

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

当我右键单击解决方案或主项目并选择Manage NuGet Packages时,我看到一堆微软的更新在过去一个月左右显然已经可用。如果我单击Update All按钮,那么显然安装的更新没有任何明显的问题,但是当我构建解决方案时,我收到此错误信息TWICE:

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部署项目?

编辑:

感谢用户swell,我现在知道此问题的Microsoft Connect问题已经打开here

5 个答案:

答案 0 :(得分:61)

TheESJ提供的答案是正确的,但我的措辞并不清楚。由于我无法对答案发表评论,我将在此提供更多详情。具体来说,我遇到了 Azure 项目的这个问题,需要以下解决方法才能使警告消失:

双击VisualStudio中的警告时,您将进入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”,然后选择“重新加载项目”。

  6. 您现在应该能够重建并且错误应该消失。

答案 1 :(得分:52)

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

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

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

BclBuildValidateNugetPackageReferences

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

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

答案 2 :(得分:15)

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

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

@TheESJ的回答并不明显,所以决定发表单独的回答。感谢@TheESJ。

答案 3 :(得分:0)

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

/target/myfile.tar

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

  

未为项目设置OutputPath属性   “ MyInstallerProject.csproj”。请检查以确保您   为以下内容指定了配置和平台的有效组合:   这个项目。配置=“调试”平台=“ x86”。此错误可能   如果其他项目正在尝试遵循   此项目的项目间参考,该项目已   卸载或未包含在解决方案中,以及引用   项目未使用相同或等效配置进行构建   或平台。

答案 4 :(得分:0)

在无法通过以上任何一个答案解决问题后,我只是按照Microsoft.Bcl.Build.targets文件(在构建输出窗口中双击错误后显示)中的说明进行操作。 我卸载了项目(引用Azure软件包),遇到了错误。编辑了项目文件,并插入了以下内容...

<PropertyGroup>
      <SkipValidatePackageReferences>true</SkipValidatePackageReferences>
</PropertyGroup>

...在第一个PropertyGroup之前位于项目文件的顶部。