Проблемы с длинным путем в TFS Team Build, когда CreatePackageOnPublish имеет значение true.

У нас есть проблема при сборке из-за длинного пути, созданного TFS Team Build, когда параметр CreatePackageOnPublish установлен на true .

В каталоге PackageTmp (см. рисунок ниже) пакет хранится, но я не понимаю, зачем нужна эта структура каталогов и как ее можно настроить. {printf ("% u% u% u \ n", sizeof "", sizeof ("" + 0), sizeof (char *)); возврат 0; } выводит 1 4 4 при компиляции с GCC в Linux, но ...

Следующая программа на C:

#include <stdio.h>

int main(void)
{
    printf("%u %u %u\n",sizeof "",sizeof(""+0),sizeof(char *));
    return 0;
}

выводит 1 4 4 при компиляции с GCC в Linux, но выводит 1 1 4 при компиляции с Microsoft Visual C ++ на Windows. Результат GCC - это то, что я ожидал. Отличаются ли они из-за ошибки MSVC или из-за того, что sizeof ("" + 0) не определен? Для обоих компиляторов поведение (то есть, равно ли напечатанное среднее значение первому или последнему значению) одинаково независимо от того, какой строковый литерал или целочисленная константа вы используете.

Соответствующая ссылка в Стандарте ANSI C кажется быть 6.2.2.1 - Lvalues ​​и указатели функций:

"За исключением случаев, когда это операнд оператора sizeof ... lvalue, имеющий тип 'array of type', преобразуется в выражение, которое имеет тип 'указатель на тип'

Вот мой домен:

public class Parent
{

    public Parent()
    {
        _children = new List<Child>();
    }

    public int Id { get; set; }
    public string SimpleString { get; set; }
    public DateTime? SimpleDateTime { get; set; }

    private IList<Child> _children;
    public IEnumerable<Child> Children
    {
        get { return _children; }
    }
    public void AddChild(Child child)
    {
        child.Parent = this;
        _children.Add(child);
    }
}


public class Child
{
    public int Id { get; set; }
    public string SimpleString { get; set; }
    public DateTime? SimpleDateTime { get; set; }
    [JsonIgnore]
    public Parent Parent { get; set; }
}

Я настроил сопоставления Fluent NHibernate следующим образом:

public class ParentMap : ClassMap<Parent>
{
    public ParentMap()
    {
        Not.LazyLoad();
        Id(x => x.Id);
        Map(x => x.SimpleString);
        Map(x => x.SimpleDateTime);

        HasMany(x => x.Children)
            .Not.LazyLoad()
            .KeyColumn("ParentId").Cascade.AllDeleteOrphan()
            .Access.ReadOnlyPropertyThroughCamelCaseField(Prefix.Underscore);

    }
}

public class ChildMap : ClassMap<Child>
{
    public ChildMap()
    {
        Not.LazyLoad();
        Id(x => x.Id);
        Map(x => x.SimpleString);
        Map(x => x.SimpleDateTime);
        References(x => x.Parent).Not.Nullable().Column("ParentId").Cascade.All().Fetch.Join();
    }
}

Я сказал NHibernate Cascade.AllDeleteOrphan () , но он все еще пытается установить ParentId foriegn key to null вот тест, который я установил:

public void Delete_GivenTableWithChildren_WillBeDeletedFromDB()
{
    int id;
    using (var createSession = MsSqlSessionProvider.SessionFactory.OpenSession())
    {
        var parent = new Parent();
        parent.AddChild(new Child { SimpleString = "new child from UI" });

        using (var trx = createSession.BeginTransaction())
        {
            createSession.Save(parent);
            trx.Commit();
            id = parent.Id;
        }
    }

    using (var firstGetSession = MsSqlSessionProvider.SessionFactory.OpenSession())
    {
        var result = firstGetSession.Get<Parent>(id);
        Assert.IsNotNull(result);
    }

    using (var deleteSession = MsSqlSessionProvider.SessionFactory.OpenSession())
    {
        using (var trx = deleteSession.BeginTransaction())
        {
            deleteSession.Delete("from " + typeof(Parent).Name + " o where o.Id = :Id", id, NHibernateUtil.Int32);
            trx.Commit();
        }
    }

    using (var session = MsSqlSessionProvider.SessionFactory.OpenSession())
    {
        var result = session.Get<Parent>(id);
        Assert.IsNull(result);
    }
}

, который не работает в строке deleteSession.Delete после попытки выполнить следующий SQL:

exec sp_executesql N'UPDATE [Child] SET ParentId = null WHERE ParentId = @p0',N'@p0 int',@p0=5

с:

NHibernate.Exceptions.GenericADOException : could not delete collection: [SaveUpdateOrCopyTesting.Parent.Children#5][SQL: UPDATE [Child] SET ParentId = null WHERE ParentId = @p0]
  ----> System.Data.SqlClient.SqlException : Cannot insert the value NULL into column 'ParentId', table 'SaveUpdateCopyTestingDB.dbo.Child'; column does not allow nulls. UPDATE fails.
The statement has been terminated.

Кто-нибудь знает, что я ' Вы ошиблись в моих сопоставлениях или знаете, как остановить попытки NHibernate обнулить идентификатор внешнего ключа?

Спасибо

Дэйв

5
задан CraftyFella 1 February 2011 в 15:01
поделиться