我们开发了一个托管多个模块(dll)的应用服务器。服务器是一个可执行文件,它将所有程序集加载到同一文件夹中,并构建一个包含所有组件的内部容器(Castle.Windsor)。
我们的构建服务器(Jenkins)创建一个包含以下结构的ZIP文件:
+ ApplicationServer\
+ ApplicationServer\Config\
- ApplicationServer\Config\log4net.config
- ApplicationServer\Castle.Windsor.dll
- ApplicationServer\Newtonsoft.Json.dll
- ApplicationServer\Tools.dll
- ApplicationServer\Main.exe
在上层(其他存储库)上,此ZIP文件将添加到名为bundles
的文件夹中。几个批处理脚本会将此ZIP提取到以下文件夹结构:
+ Build\ApplicationServer\
+ Build\ApplicationServer\Config\
- Build\ApplicationServer\Config\log4net.config
- Build\ApplicationServer\Castle.Windsor.dll
- Build\ApplicationServer\Newtonsoft.Json.dll
- Build\ApplicationServer\Tools.dll
- Build\ApplicationServer\Main.exe
Main.exe
可以直接启动。它将加载同一文件夹中的所有程序集以构建容器。
上层可以向此文件夹添加库以扩展功能。上层的文件夹结构如下所示:
+ Build\... (ApplicationServer)
+ MyProjectLibrary\MyProjectLibrary.csproj
- MyProject.sln
MyProjectLibrary
的输出路径是Build\ApplicationServer\
文件夹,用于扩展应用程序服务器。 MyProjectLibrary
只需要Tools.dll
的引用即可实现IApplicationServerExtension
。
Newtonsoft.Json
等库包含在Tools.dll中的类中。因此MyProjectLibrary
不需要(也不应该)直接引用Newtonsoft.Json
。不应添加引用以使用新的库更改Newtonsoft.Json
库。
主要问题是:如何使用nuget创建类似的结构?
将ApplicationServer
- 包含所有内容的文件夹打包到nuget-Content文件夹,并添加一个powershell脚本,将所有内容复制到Build\
- 文件夹。
可以使用
安装软件包nuget install ApplicationServer -OutputDirectory .\packages
powershell .\packages\ApplicationServer.1.0.0\copyToBuild.ps1