我们正在研究Visual Studio 2015和Team Foundation Server 2013中的几个ASP.NET MVC C#项目。有时NuGet升级过程是一团糟,一些被替换的文件(主要是* .png,* .gif,* .ttf )没有正确登记。 到目前为止我们已经发现:如果目录应该一步删除并创建,则签入过程会陷入困境。你必须登记两次。问题是,如果您不知道这一点,并且我们的开发人员检索最新的源代码,则会丢失文件。 Visual Studio通过解决方案资源管理器中的警告图标指示。TFS:如何验证每个文件是否签入?
我的问题是:是否有可能验证,如果每个文件都存在于gated-checkin期间或每晚在csproj文件中链接的TFS上构建?至少在构建过程中应该有警告。
提示:这只是一个文件的问题,它没有被编译(* .cs文件),或者没有设置“在构建到输出目录期间复制”。这发生在例如与JS文件捆绑在一起。
最终的解决方案:
Write-Host "Check availability for all referenced files in all projects ..."
function Check-Files($directory, $files){
if (!$directory.EndsWith("/")) { $directory = "$($directory)/" }
ForEach($file in $files){
if($file){
Write-Host " Referenced file $($directory)$file"
if(-not (Test-Path "$($directory)$($file)")){
throw [System.IO.FileNotFoundException] "$($directory)$($file) not found."
}
}
}
}
function CheckProjectFile($csprojFile){
[xml]$projectContent = Get-Content $csprojFile
Write-Host "Checking project: $($csprojFile) ..."
$directory = Split-Path $csprojFile
ForEach($itemGroup in $projectContent.Project.ItemGroup){
Check-Files -files $itemGroup.Reference.HintPath -dir $directory
Check-Files -files $itemGroup.Compile.Include -dir $directory
Check-Files -files $itemGroup.None.Include -dir $directory
Check-Files -files $itemGroup.Content.Include -dir $directory
Check-Files -files $itemGroup.TypeScriptCompile.Include -dir $directory
Check-Files -files $itemGroup.ProjectReference.Include -dir $directory
}
}
$csprojFiles = Get-ChildItem -Path ./ -Recurse *.csproj | Select-Object -Property FullName
ForEach($file in $csprojFiles){
CheckProjectFile($file.FullName)
}
我加入了脚本文件到我的团队项目上TFS,改变了我的生成定义,添加脚本目录以我的“源设置”,包括剧本到“预“生成脚本路径”。完成!
你的意思是Nuget升级会替换你的图片文件吗?这些图像文件是否由Nuget恢复?你是否检查整个解决方案或单个文件? –
NuGet的东西只是这个问题的一个例子。问题在于“我的问题是......”;-) – SiMiDev