【发布时间】:2012-06-02 09:15:29
【问题描述】:
本周早些时候,我发布了一个关于如何有效地share files amongst multiple web applications within a solution 的问题。 NuGet 是作为解决方案提供的,一段时间后我能够实施解决方案,但我有一个问题目前阻止我完成它。
此时我有两个 Web 应用程序项目:
Project.Common.PresentationsProject.Website.Presentations
每次构建Project.Common.Presentations 项目时,都会创建一个具有更高版本的新 NuGet 包。这个包用于我的主要网络项目Project.Website.Presentations。最初,我通过 GUI 将 project.common.presentations NuGet 包添加到该项目。在那之后,我设置了一个预构建,从命令行进行 NuGet 更新,以获取最新版本的 Project.Common.Presentations 包。
但不知何故,在命令行中使用 NuGet 更新会使用实际上不在磁盘上的位置添加对我的项目的引用,从而导致此问题:
无法解析此引用。找不到程序集“Project.Common.Presentations”。检查以确保该程序集存在于磁盘上。如果您的代码需要此引用,则可能会出现编译错误。
这是我设置结构的方式:
- 我使用
.csproj文件为我的Project.Common.Presentations项目生成了一个NuSpec 文件。 - 在我的
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 包时,不会出现此问题,一切正常。
删除预构建事件并手动更新包可以正常工作。但是每次构建时都必须手动执行某些操作并不是我喜欢的。使用包管理器控制台卸载和安装包也可以正常工作。有没有办法将包管理器控制台操作合并到预构建事件中?提前感谢您提供的信息。
【问题讨论】:
-
如果您发布了对您不起作用的预构建命令,将会很有帮助。
-
有哪些常见的功能需要共享却不能放到库项目中?
-
@IrischChieftain:从长远来看,我想在不同的 Web 项目中创建功能应用程序组件,所以我想打包整个 Web 项目(母版页、aspx 页面、脚本等)并带来一切一起在主 Web 应用程序中。
-
我认为这可以使用 NuGet 和库项目的组合来完成,而无需依赖构建脚本;看我的回答。
-
@JimCounts 我更新了我的帖子,提供了有关设置的更多详细信息。
标签: nuget nuget-package