Движок шаблонов C# [закрывается]

В моей предыдущей компании мы устанавливаем Подверсию, чтобы хранить файлы CAD. Файлы до 100 МБ хранились в Подверсии. Если многие люди 'добавляют', что большие файлы к веб-серверу Подверсии могут быть узким местом. Однако возрастающие фиксации были совершенно в порядке.

Подверсия сохранила 'двоичную дельту'. На самом деле, на стороне сервера, двоичные и текстовые файлы рассматривают точно то же в хранении 'дельты'. Проверьте "двоичную дельту, кодирующую раздел улучшений на странице http://subversion.tigris.org/svn_1.4_releasenotes.html . Это явно говорит" , Подверсия использует xdelta алгоритм для вычислений различий между строки байтов " (и не строки 'символов').

Только для эксперимента, я сохранил 10 версий CAD (файл части CATIA). Каждая версия я сделал незначительные модификации, чтобы разделить и затем проверить размер репозитория серверной стороны. Общий размер был о 1.2x приблизительно для 10 пересмотров (x - быть исходным размером файла).

Не забывают устанавливать свойство svn:needs-блокировки. По моему опыту, Лучший способ состоит в том, чтобы использовать 'автоматические опоры' для установки svn:needs-блокировки на основе расширения файла.

68
задан Peter Mortensen 8 December 2017 в 18:52
поделиться

5 ответов

22
ответ дан 24 November 2019 в 14:21
поделиться

Как насчет T4, Набор инструментов преобразования текстовых шаблонов ? Он должен соответствовать вашим требованиям и встроен в Visual Studio.

Отличные ресурсы T4:

Блог Олега Сича

T4 Editor

T4 Toolbox

16
ответ дан 24 November 2019 в 14:21
поделиться

У меня есть механизм шаблонов, встроенный в мою библиотеку классов, который выглядит и работает аналогично старому стилю ASP или T4, если на то пошло.

Вы в основном пишете код C # в <%%> блоки и, таким образом, могут делать большинство вещей, которые может делать C #, с ограничением, что весь файл шаблона компилируется в один метод. Другими словами, вы не можете определять вспомогательные классы и тому подобное внутри шаблона, но для вспомогательных методов вы можете использовать анонимные методы.

Пример:

<%
    var firstname = "Bob";
    var count = 10;

    for (Int32 index = 0; index < count; index++)
    {
%>
<%= firstname %> x <%= index+1 %>/<%= count %>
<%
    }
%>

Затем он будет скомпилирован в класс C # в другом домене приложений и может быть выполнен для возврата строки, содержащей созданный текст.

Вы также можете передать аргумент в шаблон, а также библиотеки ссылочных классов, что означает, что вы можете передавать пользовательские структуры данных или получать доступ к уровню доступа к данным или коду бизнес-логики из вашего шаблон.

2
ответ дан 24 November 2019 в 14:21
поделиться

Вы смотрели XSLT ? Вам придется начать с исходного формата данных в XML, возможно, с xml-сериализации ваших объектов данных. Вы можете с легкостью выполнять циклы и if, !

У Кэтлин Доллард есть книга по генерации кода с помощью XSLT .

Лично я большой поклонник T4 (особенно при генерации C #), но вы можете обнаружить, что, поскольку XML и HTML являются вашими типами вывода, XSLT вам подходит. К тому же он очень кроссплатформенный.

6
ответ дан 24 November 2019 в 14:21
поделиться

Вам может понадобиться этот механизм шаблонов .NET .

Код шаблона:

$Book.StaticId$

ID: $bk.BookId$ - Author: $bk.Author.Name$

Length of the author's Name: $bk.Author.Name.Length$

Код C #:

class Author
   {
       public string Name
       {
           get
           {
               return "John Borders";
           }
       }
   }
   class Book
   {
       public static string StaticId
       {
           get
           {
               return "AABB";
           }
       }
       public int BookId
       {
           get
           {
               return 100;
           }
       }
       public Author Author
       {
           get
           {
               return new Author();
           }
       }
   }
   public class PropertySample1
   {
       [STAThread]
       static void Main()
       {
           TemplateEngine dt = new TemplateEngine();
           dt.LoadFromFile("Template.tpl");
           Book book = new Book();
           dt.SetValue("bk", book);
           dt.UsingNamespace("CSharp,Demo");
           string output = dt.Run();
           Console.WriteLine(output);
       }
   }

Вывод:

AABB

ID: 100 - Author: John Borders

12
1
ответ дан 24 November 2019 в 14:21
поделиться
Другие вопросы по тегам:

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