У меня есть следующая установка проекта:
Solution A
Project 1
(легкий компонент)Project 2
(содержит много файлов и зависит от Project 1
)Solution A
единственный репозиторий мерзавца. Тогда я создал другое решение и нашел, что мог снова использовать и даже обновить функциональность Project 1
. Таким образом, мое второе решение было бы, вероятно, похоже на это:
Solution B
Project 1
(должен быть совместно использован!)Project 3
(зависит от Project 1
).Теперь я хочу Project 1
стать совместно используемым компонентом. Таким образом, каждый раз я изменяю исходный код Project 1
из любого решения (A
или B
), мне нужен другой для обновления соответственно.
Возможно, это имеет что-то, чтобы сделать функцию подмодуля мерзавца. Однако единственный способ, которым я смог использовать его, состоит в том, чтобы определить целое Solution A
как подмодуль для Solution B
. Это не действительно, из чего я хочу идеально из-за огромного размера Solution A
. Мне только нужна крошечная часть его, чтобы быть подмодулем.
Я знаю, что это возможно в svn и работает точно, как я описал: Вы определяете каталог во внешнем репозитории в svn:externals
свойство.
Какие-либо подсказки относительно этого? Или возможно, я пропускаю что-то?
Единственной характеристикой Сущности является то, что она имеет долгоживущую и (полупостоянную) постоянную идентичность. Это можно инкапсулировать и выразить, внедрив IEquatable < T >
. Вот один способ сделать это:
public abstract class Entity<TId> : IEquatable<Entity<TId>>
{
private readonly TId id;
protected Entity(TId id)
{
if (object.Equals(id, default(TId)))
{
throw new ArgumentException("The ID cannot be the default value.", "id");
}
this.id = id;
}
public TId Id
{
get { return this.id; }
}
public override bool Equals(object obj)
{
var entity = obj as Entity<TId>;
if (entity != null)
{
return this.Equals(entity);
}
return base.Equals(obj);
}
public override int GetHashCode()
{
return this.Id.GetHashCode();
}
#region IEquatable<Entity> Members
public bool Equals(Entity<TId> other)
{
if (other == null)
{
return false;
}
return this.Id.Equals(other.Id);
}
#endregion
}
-121--3565849- Хотя это не ответ на ваш главный вопрос, стоит отметить, что когда MVC генерирует имена, он превращает что-то вроде Тэги в Project_Tags, заменяя периоды подчеркиванием.
Причиной этого является то, что точка в идентификаторе элемента будет выглядеть как элемент Project с классом Тэгов к CSS. Ясно, что это плохо, поэтому перевод подчеркивает, чтобы держать поведение предсказуемым.
В первом примере
<%= Html.ListBoxFor(c => c.Project.Categories,
new MultiSelectList(Model.Categories, "Id", "Name", new List<int> { 1, 2 }))%>
в списке предпринимается попытка привязки к Model.Project.Categories для строго типизированной модели, которая была предоставлена странице (с помощью лямбда-нотации). Я не уверен, что делает второй параметр в ListAxFor.
Какова модель, которая передается на страницу?
-121--1362042-Это определенно связано с подмодулями (см. характер подмодулей )
В вашем случае идеальным решением было бы извлечение Project1
из SolityA
Git repo:
См. Как извлечь подкаталоги git и сделать из них подмодуль? .
Но это включает в себя переписывание истории SolityA, что является проблемой, если вы уже опубликовали ее и если некоторые люди тянут из нее.
Использование filter-branch для процесса извлечения.
Чтобы переписать репозиторий так, как будто
Project1/
был корнем проекта, и удалить всю остальную историю:
git filter-branch --subdirectory-filter Project1 -- --all
Таким образом, можно, например, превратить вложенный каталог библиотеки в собственный репозиторий. Обратите внимание на параметры
--
, которые отделяют опцииfilter-branch
от опций редакции, и-all
для перезаписи всех ветвей и тэгов.
Затем объявите Project1
как подмодуль в SolityB
:
cd SolutionB
git submodule add /path/to/Project1 Project1
ПРИМЕЧАНИЕ: Не используйте локальные URL-адреса здесь, если вы планируете опубликовать
SolityB
!
git commit -m "Add submodules Project1"
Можно использовать RegEx.Split для разделения непосредственно с помощью Enviroment.NewLine.
public static List<string> ConvertBlockToLines(this string block)
{
return Regex.Split(block, Environment.NewLine).ToList();
}
-121--3054670- Нет необходимости преобразовывать в ваш специальный знак:
List<string> strings = str.Split(new string[] {Environment.NewLine}, StringSplitOptions.None).ToList();
strings.ForEach(s => s = s.Trim());
-121--3054667- Разбить проект 1 на собственный репозиторий и сделать его подмодулем как решения A, так и решения B.