本周早些时候,我发布了一个关于如何在解决方案中的多个 Web 应用程序之间有效共享文件的问题。NuGet 是作为解决方案提供的,一段时间后我能够实施解决方案,但我有一个问题目前阻止我完成它。
此时我有两个 Web 应用程序项目:
Project.Common.Presentations
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 包时,不会出现此问题,一切正常。
删除预构建事件并手动更新包可以正常工作。但是每次构建时都必须手动执行某些操作并不是我喜欢的。使用包管理器控制台卸载和安装包也可以正常工作。有没有办法将包管理器控制台操作合并到预构建事件中?提前感谢您提供的信息。