我一直在尝试使用PowerShell脚本将我的ASP.NET 5应用程序构建到UAT。
我的解决方案如下:
+---build
+---lib
| +---MySubModule
+---src
| +---Console
| +---Data
| +---Domain
| +---Services
| +---Web.UI
+---test
+---Tests.Common
+---Tests.Data
build-all.ps1
脚本位于$/Build
,看起来像
# Build all executable projects in this solution
$thisFolder = (Get-Item -Path ".\" -Verbose).FullName
$projectsToBuild = @(
[System.IO.Path]::GetFullPath((Join-Path $thisFolder "..\test\Tests.Data"));
[System.IO.Path]::GetFullPath((Join-Path $thisFolder "..\src\Console"));
[System.IO.Path]::GetFullPath((Join-Path $thisFolder "..\src\Web.UI"));
)
foreach($project in $projectsToBuild) {
dnu restore $project
dnu build $project
}
该脚本适用于我的机器 TM ,但在TeamCity上失败,错误如
d:\数据\ TeamCity的\ Agent2 \工作\ 43f47b78be47a304 \测试\ Tests.Data \ MyAwesomeClass.cs(21,26): DNX,版本= v4.5.1错误CS0246:类型或命名空间名称 ' IConfiguration'找不到(你错过了使用指令吗? 或汇编参考?)
dnu restore
有效,我可以看到它解决路径与我的机器上的路径相同但TeamCity错误?
为什么建造神灵,你有没有想过我?
答案 0 :(得分:1)
偶然地,我发现dnu restore
对引用的项目没有递归工作。
我一直在假设我只能dnu restore
三个可执行项目和Domain
项目以及其他未指定的项目会自动恢复。它适用于dnu build
,但结果证明这是一个不好的假设。
通过使用根文件夹修复每个项目的dnu restore
,并允许dnu restore
递归扫描project.json
个文件。
在TeamCity中有效的修订build-all.ps1
:
dnu restore ../src
dnu restore ../test
dnu restore ../lib
$projectsToBuild = @(
[System.IO.Path]::GetFullPath((Join-Path $thisFolder "..\test\Tests.Data"));
[System.IO.Path]::GetFullPath((Join-Path $thisFolder "..\src\Console"));
[System.IO.Path]::GetFullPath((Join-Path $thisFolder "..\src\Web.UI"));
)
foreach($project in $projectsToBuild) {
dnu build $project
}
实际问题出现在dnu restore
而非dnu build
,正如我原先想的那样。
我认为脚本在我的本地工作的原因是Visual Studio自动恢复解决方案中项目的包。