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

97

我有一个在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,选择Manage NuGet Packages,并添加Microsoft.Bcl.Build。这样就消除了其中的一个警告。但是VS不给我在MyProject.Azure项目中管理NuGet包的选项。

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

编辑:

感谢用户swell,我现在知道针对此问题已经开放了一个Microsoft Connect问题here


2
感谢提供连接问题的参考,这是一个令人烦恼的问题。 - Paul Keister
1
与构建部署项目时出现的警告相关,还存在一个错误,导致在发布项目时出现虚假警告。与发布相关的错误也在 Connect 上报告了。我不知道有没有解决方法。 - Edward Brey
3
对于具有对其他项目的引用(用于收集项目输出,即“热量”)的WiX项目,我也遇到了同样的问题。对于一个WiX安装程序项目来安装NuGet包毫无意义!真让人恼火!! - Jaans
2
连接到连接问题的链接现在返回404 http://connect.microsoft.com/VisualStudio/feedback/details/789839/unexpected-warning-when-building-solution-that-has-azure-cloud-services-and-a-reference-to-the-microsoft-bcl-build-nuget-package - Ryan Gates
5个回答

67
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 元素内添加以下元素:

  4.   <Properties>SkipValidatePackageReferences=true</Properties>
    
  5. 你的项目引用现在应该是这样的:

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

现在您应该能够重新构建,并且错误应该已经消失了。


18
在我的 VS 版本中,我必须先右键单击并选择“卸载项目”,然后才能右键编辑项目文件。 - pius
2
您是不是想使用 MyAzureProject.ccproj 而不是 MyAzureProject.csproj - Edward Brey
只有在被引用的项目 *.csproj 文件中添加 '<Properties>SkipValidatePackageReferences=true</Properties>' 才能使其正常工作。仅编辑 *.ccproj 是不起作用的。 - alexey
1
@pius 这是一个小功能,但在Productivity Power Tools的“Power Commands”下有一个“编辑项目文件”的上下文菜单选项,适用于多个版本的VS。它可以在一次点击中卸载项目并为您打开项目文件。 - Jeff
@EdwardBrey 很好的问题。.ccproj 用于 Azure 云项目,因此这不是笔误。 - Mr.Hunt

59

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

对于目前不支持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>

4
Arthur,你可以尝试设置 AdditionalProperties 元数据值,而不是 Properties 吗? - TheESJ
5
@TheESJ,我在一个WiX项目中遇到了问题,看起来设置AdditionalProperties而不是Properties可以解决。不过我想知道为什么。 - lc.
3
这适用于仅构建解决方案,但当你实际使用“运行”并将Azure项目设置为启动项目时,你会再次看到警告。 翻译:这只适用于构建解决方案,但当你实际使用“运行”,将Azure项目设置为启动项目时,会再次看到警告。 - eoleary
2
即使在构建时也无法工作。VS 2015社区版。 - Artyom
2
在VS2015专业版中无法工作。我添加了这行代码后出现了相同的问题。 - aclalex
显示剩余2条评论

16

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

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

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


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

在第一个PropertyGroup之前,将其放置在项目文件的顶部。


2

我遇到过这个问题很多次,而且Properties方法确实可行,但在处理Wix项目时,我必须改为执行以下操作:

最初的回答:

<AdditionalProperties>SkipValidatePackageReferences=true</AdditionalProperties>

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

项目‘MyInstallerProject.csproj’没有设置OutputPath属性。请确保您已为此项目指定了有效的Configuration和Platform组合。 Configuration='Debug' Platform='x86'。如果某个其他项目正在尝试跟踪此项目的项目间引用,此项目未加载或未包含在解决方案中,并且引用项目不使用相同或等效的Configuration或Platform,那么也可能会出现此错误。

“最初的回答”

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接