预构建事件中的程序包管理器控制台命令

时间:2012-06-02 09:15:29

标签: nuget nuget-package

本周早些时候,我发布了一个关于如何有效share files amongst multiple web applications within a solution的问题。 NuGet作为一种解决方案提供,经过一段时间我能够实现一个解决方案,但我有一个问题,目前阻止我完成它。

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

  1. Project.Common.Presentations
  2. Project.Website.Presentations
  3. 每次构建Project.Common.Presentations项目时,都会创建一个具有更高版本的新NuGet包。此包用于我的主要Web项目Project.Website.Presentations。最初,我通过GUI将project.common.presentations NuGet包添加到该项目中。之后我设置了一个pre-build eveny,我从命令行进行NuGet更新,以获取最新版本的Project.Common.Presentations包。

    但不知何故在命令行中使用NuGet更新使用实际上不在磁盘上的位置添加了对我的项目的引用,导致此问题:

      

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

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

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

    第一次重建全部运行,我的.csproj文件更新了我的包的dll引用,一切都很好。第二次运行rebuild all时,.csproj文件再次更新,但是它引用了一个包含较新版本软件包的不同文件夹,但该文件夹不知道在驱动器上。当我使用GUI“管理NuGet包”来更新NuGet包时,这个问题不会发生,一切正常。

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

1 个答案:

答案 0 :(得分:2)

使用NuGet这样的基本思想是在解决方案中的所有项目之间共享相对静态(很少变化)的工件。我个人使用NuGet还包括一个公共母版页 - 我的所有文件都在NuGet Content文件夹中。

我的所有常用功能都出现在库项目中,这样就无需构建任何类型的脚本。

参考:Multiple web applications projects within a visual studio solution