96

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

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

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 问题。

4

5 回答 5

66

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”,然后选择“重新加载项目”。

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

于 2013-09-19T19:34:43.490 回答
58

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

从尚不支持 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>
于 2013-06-21T18:54:15.173 回答
16

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

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

这在@TheESJ 的回答中并不明显,因此决定发布单独的答案。感谢@TheESJ。

于 2013-08-14T16:22:34.020 回答
2

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

<AdditionalProperties>SkipValidatePackageReferences=true</AdditionalProperties>

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

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

于 2019-02-07T13:48:41.670 回答
0

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

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

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

于 2020-11-04T07:27:58.897 回答