我们正在开发几个ASP。. NET MVC c#项目在Visual Studio 2015和Team Foundation Server 2013。有时NuGet升级过程很混乱,一些被替换的文件(主要是*.png, *.gif, *.ttf)没有正确签入。到目前为止,我们发现:签入过程遇到了麻烦,如果目录应该在一个步骤中删除和创建。你必须办理两次登机手续。问题是,如果你不知道这一点,而我们的一个开发人员检索了最新的源代码,就会有丢失的文件。Visual Studio在解决方案资源管理器中使用警告图标指示。
我的问题是:是否有可能验证,如果每个文件在门签入期间存在或在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上的团队项目中,更改了我的构建定义,将脚本目录添加到我的"源设置"中,并将脚本包含到"预构建脚本路径"中。完成了!
我创建了一小段powershell,您可以在构建解决方案之前执行它。
function Check-Files($files){
ForEach($file in $files){
if($file){
Write-Host "looking for $file"
if(-not (Test-Path $file)){
throw [System.IO.FileNotFoundException] "$file not found."
}
}
}
}
[xml]$projectContent = Get-Content ./your.csproj
ForEach($itemGroup in $projectContent.Project.ItemGroup){
Check-Files -files $itemGroup.Reference.HintPath
Check-Files -files $itemGroup.Compile.Include
Check-Files -files $itemGroup.None.Include
Check-Files -files $itemGroup.Content.Include
Check-Files -files $itemGroup.TypeScriptCompile.Include
Check-Files -files $itemGroup.ProjectReference.Include
}
希望这对你有帮助。亲切的问候1月
首先,确保每次都签入整个解决方案/项目。这样,该解决方案/项目中的所有编辑文件都将列在包含的未决更改中。如果只签入单个文件,则其他编辑将列在排除更改中,而不会被签入。
还可以使用签入策略来防止未经审查的签入。这是一个现有的签入策略,要求在签入之前进行代码检查:
https://visualstudiogallery.msdn.microsoft.com/c476b708 - 77 - a8 - 4065 b9d0 - 919 ab688f078