5

本周早些时候,我发布了一个关于如何在解决方案中的多个 Web 应用程序之间有效共享文件的问题。NuGet 是作为解决方案提供的,一段时间后我能够实施解决方案,但我有一个问题目前阻止我完成它。

此时我有两个 Web 应用程序项目:

  1. Project.Common.Presentations
  2. Project.Website.Presentations

每次Project.Common.Presentations构建项目时,都会创建一个更高版本的新 NuGet 包。这个包用于我的主要网络项目Project.Website.Presentations。最初,我通过 GUI 将 project.common.presentations NuGet 包添加到该项目。在那之后,我设置了一个预构建,我从命令行进行 NuGet 更新以获取最新版本的Project.Common.Presentations包。

但是以某种方式在命令行中使用 NuGet update 会使用实际上不在磁盘上的位置添加对我的项目的引用,从而导致此问题:

无法解析此引用。找不到程序集“Project.Common.Presentations”。检查以确保该程序集存在于磁盘上。如果您的代码需要此引用,您可能会遇到编译错误。

这就是我设置结构的方式:

  • 我使用该文件为我的Project.Common.Presentations项目生成了一个 NuSpec.csproj文件。
  • 作为我的构建后事件Project.Common.Presentations,我使用:$(ProjectDir)nuget.exe pack -sym $(ProjectPath). 每次构建项目时,这都会构建一个新的 NuGet 包。在执行此构建事件之前,我使用脚本删除旧的 NuGet 包。
  • 作为我的预构建事件,我Project.Website.Presentations使用:$(ProjectDir)NuGet.exe update $(ProjectDir)packages.config

第一次重建全部运行,我的.csproj文件更新为对我的包的 dll 引用,一切都很好。我第二次运行全部重建时,该.csproj文件再次更新,但它引用了具有较新版本软件包的不同文件夹,但该文件夹不知何故不在驱动器上。当我使用 GUI“管理 NuGet 包”更新 NuGet 包时,不会出现此问题,一切正常。

删除预构建事件并手动更新包可以正常工作。但是每次构建时都必须手动执行某些操作并不是我喜欢的。使用包管理器控制台卸载和安装包也可以正常工作。有没有办法将包管理器控制台操作合并到预构建事件中?提前感谢您提供的信息。

4

1 回答 1

2

将 NuGet 用于此类事情的基本思想是在解决方案中的所有项目之间共享相对静态(很少更改)的工件。我个人使用 NuGet 还包含一个通用母版页 - 我的所有文件都放在 NuGet Content 文件夹中。

我所有的常用功能都在库项目中,这消除了对任何类型的构建脚本的需要。

参考:Visual Studio 解决方案中的多个 Web 应用程序项目

于 2012-06-02T14:44:50.723 回答