2016-08-24 2 views
0

Мы работаем над несколькими проектами ASP.NET MVC C# в Visual Studio 2015 и Team Foundation Server 2013. Иногда процесс обновления NuGet является беспорядком и некоторыми замененными файлами (в основном * .png, * .gif, * .ttf) не были проверены правильно. Что мы догадались до сих пор: процесс регистрации попадает в проблему, если каталоги должны быть удалены и созданы за один шаг. Вы должны зарегистрироваться дважды. Проблема в том, что если вы не знаете об этом, и один из наших разработчиков получает последний источник, есть недостающие файлы. Visual Studio указывает, что с предупреждающим знаком в обозревателе решений.TFS: Как проверить, зарегистрирован ли каждый файл?

Мой вопрос: Можно ли проверить, есть ли каждый файл во время gated-checkin или night-build на TFS, который связан в файле csproj? По крайней мере, во время сборки должно быть предупреждение.

Подсказка: это только проблема с файлами, которые не скомпилированы (файлы * .cs) или не имеют настройки «copy во время сборки в выходной каталог». Это происходит, например, с 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, изменил мое определение сборки, добавлен каталог сценария к моей «Настройке Source» и включить скрипт в «Pre -build script path ". Готово!

+0

Вы хотите отметить, что обновление Nuget заменит ваши файлы изображений? Восстановлены ли эти файлы изображений Nuget? Вы проверяете все решение или отдельный файл? –

+0

Материал NuGet был просто примером из-за этой проблемы. Вопросы находятся в точке «Мой вопрос ...» ;-) – SiMiDev

ответ

1

Я создал небольшой кусочек 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 
} 

Надеюсь, это вам поможет. С уважением Jan

+0

Привет @Jan. Это был правильный путь.Я немного адаптировал ваш шаблон сценария. Теперь он автоматически сканирует файлы * .csproj. Затем каждый файл проверяется на отсутствие файлов. Он отлично работает. Большое спасибо! Я обновляю свой вопрос с помощью нового файла сценария. – SiMiDev

0

Прежде всего, обязательно проверяйте все решение/проект каждый раз. Таким образом, все редактируемые файлы в этом решении/проекте будут перечислены в Включенных ожидающих изменениях. Если вы проверяете только один файл, другие изменения будут перечислены в Исключенных изменениях и не будут проверены.

Также вы можете использовать политику регистрации, чтобы предотвратить регистрацию без проверки. Вот существующий регистрация политики, которая требует проверки кода до регистрации:

https://visualstudiogallery.msdn.microsoft.com/c476b708-77a8-4065-b9d0-919ab688f078

+0

Это не мой вопрос ?! Я знаю, как зарегистрироваться. Я знаю правила регистрации. Я просто хочу знать, если контроллер сборки может проверить, если каждый файл, упомянутый в файлах csproj, находится на борту ... – SiMiDev

+0

Контроллер сборки выполняет некоторые легкие задачи, такие как определение имени сборки, создание метки в управление версиями, протоколирование заметок и статус отчетов из сборки. Он не может проверить, проверяются ли все ваши файлы. Вам нужно либо проверить все решение/проект, либо использовать политику регистрации, чтобы убедиться, что все файлы отмечены. –

+0

Правильно. Контроллер сборки или его агент выполняют только основные задачи. MSBuild выполняет задание, а MSBuild обнаруживает недостающие файлы (файлы или файлы C# с настроенным адресатом в выходной папке). К сожалению, MSBuild не проверяет другие файлы, которые не нужно компилировать или копировать. Мы считаем, что невозможно использовать «политику регистрации» для решения нашей проблемы ... Извините, но, может быть, мой английский недостаточно хорош, чтобы указать на нашу первоначальную проблему. – SiMiDev

Смежные вопросы