AssemblyInfo.cs должен быть помещен в управление версиями?

  1. Для каждого ребра в обоих многоугольниках проверьте, можно ли его использовать в качестве разделительной линии. Если да, то все готово: пересечения нет.
  2. Если не было обнаружено разделительной линии, у вас есть пересечение.
  3. /// Checks if the two polygons are intersecting.
    bool IsPolygonsIntersecting(Polygon a, Polygon b)
    {
        foreach (var polygon in new[] { a, b })
        {
            for (int i1 = 0; i1 < polygon.Points.Count; i1++)
            {
                int i2 = (i1 + 1) % polygon.Points.Count;
                var p1 = polygon.Points[i1];
                var p2 = polygon.Points[i2];
    
                var normal = new Point(p2.Y - p1.Y, p1.X - p2.X);
    
                double? minA = null, maxA = null;
                foreach (var p in a.Points)
                {
                    var projected = normal.X * p.X + normal.Y * p.Y;
                    if (minA == null || projected < minA)
                        minA = projected;
                    if (maxA == null || projected > maxA)
                        maxA = projected;
                }
    
                double? minB = null, maxB = null;
                foreach (var p in b.Points)
                {
                    var projected = normal.X * p.X + normal.Y * p.Y;
                    if (minB == null || projected < minB)
                        minB = projected;
                    if (maxB == null || projected > maxB)
                        maxB = projected;
                }
    
                if (maxA < minB || maxB < minA)
                    return false;
            }
        }
        return true;
    }
    

    Для получения дополнительной информации см. Эту статью: Обнаружение столкновения 2D-полигонов - проект кода

    Примечание: Алгоритм работает только для выпуклых многоугольники, заданные либо по часовой стрелке, либо против часовой стрелки.

20
задан Craig 21 September 2010 в 17:33
поделиться

4 ответа

Я всегда проверяю это. На самом деле я считаю, что это поведение по умолчанию для Team System Source Control.

2
ответ дан 30 November 2019 в 01:18
поделиться

Либо не используйте версию AssemblyInfo.cs вообще, либо поместите их «версию для разработчиков» в репозиторий и используйте CruiseControl.Net svn-revert их после сборки (я делаю это позже, чтобы сборки, созданные на рабочих станциях разработчиков, легко удаляются из «официальных», загруженных с CruiseControl.Net).

Что касается воспроизведения тех же меток сборки позже - вам уже нужно выполнить перестройку, вызвав MSBuild / NAnt вручную, просто пропустите установите для него CCNetLabel соответствующее значение, и вы получите те же версии сборки, что и при сборке, вызванной из CruiseControl.Net (MSBuild: /p:CCNetLabel=1.4.2.333 , NAnt: - D: CCNetLabel = 1.4.2.333 ).

7
ответ дан 30 November 2019 в 01:18
поделиться

Я использую файл CommonAssemblyInfo.cs, на который я добавляю ссылку в каждом проекте.

Единственный атрибут, который у меня есть в этом файле, - AssemblyFileVersion, и CC.Net / Msbuild обновляют версию каждую сборку.

Убедитесь, что любой проект, который включает CommonAssemblyInfo.cs, не имеет повторяющихся атрибутов в AssemblyInfo.cs.

Если вы посмотрите исходный код CC.Net, вы увидите, как они сконфигурированы. .

7
ответ дан 30 November 2019 в 01:18
поделиться

Мы иметь сценарий MSBuild, который генерирует все необходимые файлы AssemblyInfo.cs перед сборкой. Таким образом, я также могу использовать номер ревизии SVN в версиях сборки. Файлы AssemblyInfo.cs не регистрируются в SVN (они игнорируются, чтобы не беспокоить людей), а генерируются перед сборкой (неважно, сценарий автоматической сборки или из VS).

Я также предоставьте пакетный файл для создания файлов AssemblyInfo.cs, чтобы разработчикам не приходилось беспокоиться о деталях.

1
ответ дан 30 November 2019 в 01:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: