使用 Powershell 中的 MSBuild 构建包含 Web 应用程序项目的解决方案,如下所示:
msbuild "/p:OutDir=$build_dir\" $solution_file
在 32 位上工作正常,但在 64 位机器上我遇到了这个错误:
错误 MSB4019:未找到导入的项目“C:\Program Files\MSBuild\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets”。确认声明中的路径正确,并且该文件存在于磁盘上。
我正在使用 Visual Studio 2008 和 powershell v2。该问题已在此处和此处记录。基本上在 VS 的 64 位安装上,MSBuild 所需的 Microsoft.WebApplication.targets 位于 Program Files(x86) 目录中,而不是 Program Files 目录中,但 MSBuild 无法识别这一点,因此看起来位置错误。
到目前为止,我的两个解决方案并不理想:
- 手动将 64 位文件从 Program Files(x86) 复制到 Program Files。这是一个糟糕的解决方案 - 每个开发人员都必须手动执行此操作。
- 手动编辑 csproj 文件,以便 MSBuild 位于正确的位置。同样不理想:我宁愿不必让每个人都使用 64 位来手动编辑每个新项目的 csproj 文件。
例如
<Import Project="$(MSBuildExtensionsPathx86)\$(WebAppTargetsSuffix)" Condition="Exists('$(MSBuildExtensionsPathx86)\$(WebAppTargetsSuffix)')" />
理想情况下,我想要一种方法来告诉 MSBuild 从命令行从正确的位置导入目标文件,但我不知道该怎么做。有什么解决办法吗?