我有一个在 VS 2012 中开发的 ASP.NET MVC 4 应用程序。该应用程序由一个主项目 (MyProject)、一个单元测试项目 (MyProject.Tests)、一个 Azure 部署项目 (MyProject.Azure) 和几个通用库项目。
当我右键单击解决方案或主项目并选择管理 NuGet 包时,我会看到一堆微软更新,这些更新显然在上个月左右可用。如果我单击“全部更新”按钮,则显然安装了更新,没有任何明显的问题,但是当我构建解决方案时,我收到此错误消息 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。
TheESJ 提供的答案是正确的,但是我并不清楚措辞。由于我无法对答案发表评论,因此我将在此处提供更多详细信息。具体来说,我在 Azure 项目中遇到了这个问题,需要以下解决方法才能使警告消失:
当您在 VisualStudio 中双击警告时,您将被带到 Microsoft.BclBuild.targets 文件中的 BclBuildValidateNugetPackageReferences 目标。在实际目标元素上方,您应该找到一个大注释块,其中讨论了禁用项目引用检查。由于 Azure 项目不能有任何库引用,因此这些 Azure 项目不可能满足此特定构建目标的要求。
解决方案?禁用 Azure 项目的引用检查,因为实际上无法添加 nuget 包引用。
例子
因此,假设我们有两个项目:MyAzureProject.ccproj,它引用了 MyProject.csproj。按着这些次序:
在解决方案资源管理器中右键单击“MyAzureProject”,然后选择“编辑项目文件”。找到对“MyProject”的项目引用。它应该类似于:
您现在应该能够重建并且错误应该消失了。
如果您双击警告,它会为您提供禁用警告的说明。
从尚不支持 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>
我遇到了同样的问题,并试图更新 Microsoft.Bcl.Build.targets;这没有帮助。
经过一番调查,发现 Azure 服务项目的 .csproj 文件 必须修改为包含 <Properties>SkipValidatePackageReferences=true</Properties>
。
这在@TheESJ 的回答中并不明显,因此决定发布单独的答案。感谢@TheESJ。
我多次遇到这个问题,并且 Properties 方法确实有效,但是在处理 Wix 项目时,我不得不执行以下操作:
<AdditionalProperties>SkipValidatePackageReferences=true</AdditionalProperties>
当我使用 Properties Xml 节点时,我收到了一个新错误:
未为项目“MyInstallerProject.csproj”设置 OutputPath 属性。请检查以确保您为此项目指定了有效的配置和平台组合。配置='调试'平台='x86'。如果其他项目试图遵循对此项目的项目到项目引用,此项目已卸载或未包含在解决方案中,并且引用项目未使用相同或等效项构建,则也可能出现此错误配置或平台。
在未能解决上述任何答案的问题后,我只是按照 Microsoft.Bcl.Build.targets 文件中包含的说明进行操作(在构建输出窗口中双击错误后显示)。我卸载了我的项目(引用 Azure 包),遇到了错误。编辑项目文件并插入以下内容...
<PropertyGroup>
<SkipValidatePackageReferences>true</SkipValidatePackageReferences>
</PropertyGroup>
...在第一个 PropertyGroup 之前的项目文件顶部。
MyAzureProject.ccproj
而不是MyAzureProject.csproj
?.ccproj
用于 azure 云项目,所以不是错字。