Yetanotherforum - форум с открытым исходным кодом на ASP.NET

1 комментарий

Некоторое время назад, когда я писал дипломную работу, помнится одним из необязательных заданий в дипломе был форум. К сожалению, времени на создание своего форума тогда совсем не было. Поиск же существующих бесплатных разработок на ASP.NET ни к чему не привёл и, соответственно, диплом остался без форума.

Сегодня чисто случайно наткнулся вот на такую разработку yetanotherforum.net .  Тестовый вариант можно посмотреть здесь.

Yetanotherforum - форум с открытым исходным кодом на ASP.NET

YetAnotherForum.NET (YAF) - это open source форум, предоставляемый под лицензией GPL, более детально на сайте разработчиков.

Размер архива с исходниками 1,58.

Использование одного файла AssemblyInfo.cs для всех проектов

Комментарии отсутствуют

Зачем это нужно?
В том случае, когда solution состоит из нескольких проектов и необходимо для всех сборок вручную поменять версию, задача превращается в рутинную работу. Если же выполнить ниже указанные действия, то изменять версию придётся только в одном файле.

Как это сделать?
1. Создаём AssemblyInfo.cs и ложим его в общую папку.
2. Добавляем существующий файл в каждый проект как ссылку (см. рисунок ниже).

  Использование одного файла AssemblyInfo.cs для всех проектов

PS: данный пост я разместил больше для себя, так как от проекта к проекту проходит немало времени и я постоянно умудряюсь забывать, что нужно делать. 

Изменение полей в упакованых размерных типах через интерфейсы

Комментарии отсутствуют

Хотя задача по изменению полей в упакованных размерных типах на практике может и вовсе не встретиться, но знать о существовании такой возможности, думаю, не помешает. Рассказывать об упаковке и распаковке значимых не вижу особого смысла, поэтому перейду непосредственно к коду.

[code=c#]    internal interface IBoxed
    {
        void SetValue(int value);
    }

    internal struct BoxedType : IBoxed
    {
        private int value;

        public BoxedType(int value)
        {
            this.value = value;
        }

        #region IBoxed Members

        public void SetValue(int value)
        {
            this.value = value;
        }

        public override string ToString()
        {
            return string.Format("Value: {0}", value);
        }

        #endregion
    }

    class Program
    {
        static void Main(string[] args)
        {
            BoxedType b = new BoxedType(5);
            Console.WriteLine("First test: " + b);

            b.SetValue(6);
            Console.WriteLine("Second test: " + b);

            object o = b;
            Console.WriteLine("Third test: " + o);

            ((BoxedType)o).SetValue(3);
            Console.WriteLine("Fourth test: " + o);

            ((IBoxed)b).SetValue(8);
            Console.WriteLine("Fifth test: " + b);

            ((IBoxed)o).SetValue(10);
            Console.WriteLine("Sixth test: " + o);
        }
    } [/code]

Ну и, конечно же, результаты:

First test: Value: 5
Second test: Value: 6
Third test: Value: 6
Fourth test: Value: 6
Fifth test: Value: 6
Sixth test: Value: 10

BoxTypesTest.rar (19,38 kb

Шифрование конфигурационных файлов (web.config, app.config)

Комментарии отсутствуют

Тем, кто хоть иногда сталкивался с технологией .NET, наверняка приходилось настраивать конфигурационные файлы приложений, будь-то настольные приложения или же веб-приложения. Если ваше приложение работает с базой данных, то скорей всего вы добавляли в конфигурационные файлы строки следующего формата:





[code=xml]<connectionStrings>
    <add name="Name" connectionString="Data Source=server;User ID=user;Password=pwd;persist security info=False;initial catalog=BlogEngine;" providerName="System.Data.SqlClient" />
</connectionStrings> [/code] В приведённом выше примере имя пользователя и пароль хранятся в открытом виде, что не всегда приемлемо. К счастью, .NET Framework предоставляет средства для скрытия такой информации. Используя утилиту коммандной строки aspnet_regiis.exe (ASP.NET), эту информацию можно зашифровать. Более подробно читаем в MSDN.

К сожалению, если у вас есть веб-приложение, выложенное на каком-то хостинге, запустить утилиту aspnet_regiis.exe вам никто не даст. По этому необходимо искать альтернативные решения. Как вариант, написать код, добавив страницу конфигурации (смотрим прикреплённый файл). Страница конфигурации имеет следующий вид:

Шифрование конфигурационных файлов (web.config, app.config)

Указываем секцию для шифрования, жмём ОК и получаем:

[code=xml]<appSettings configProtectionProvider="DataProtectionConfigurationProvider">
    <EncryptedData>
      <CipherData>
 <CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAsaxvgs6ZWEuISiiBH1xhUgQAAAACAAAAAAADZgAAqAAAABAAAAAp89FcCcjWHQq6vX0s5gg3AAAAAASAAACgAAAAEAAAABdMVsofZYXXxYrZp7YWdy2IAAAACFZiI8SzneG3HnSUtTyo49jGrOOdZxFx9JXe4AJy+mR9LMMOIGTZl9KM3TLXY4GBNQwt3GR2rdoHblcV1Qa1SDWWI5UTtWyRmGuSovIepjboz6WBEF0AKT65W+xgyCg51txL7d76j/PekeS7Hj7sTEskRE48N1xMFLp4F7F10JQIhvaj5hUVhxQAAADwgJ+zt9fzgoU8tKsqwF0odKPrCA==</CipherValue>
      </CipherData>
    </EncryptedData>
  </appSettings>[/code]

Да и еще, шифровать конфигурационный файл веб-приложения нужно непросредственно на хостинге, так как для этой процедуры используется, как я понимаю, специфический ключ компьютера, определённый в разделе <machineKey> файла machine.config. Поэтому попытки зашифровать у себя на машине с последующим выкладыванием на хостинг ни к чему не приведут. В том случае, если у вас есть доступ к серверу или вы хотите зашифровать конфигурационный файл у себя на машине, не используя дополнительную страницу, можно применить следующую утилиту (исходники прилагаются):

 

Указываем конфигурационный файл, имя секции, жмём Go и наслаждаемся результатом. Утилита позволяет шифровать конфигурационные файлы как настольных приложений, так и веб-приложений.

WebApplication(20,08 kb)

WindowsApplication (48,59 kb)

 Удачного вам шифрования! :)

Читаем также:

Кеширование данных с помощью директивы OutputCache

Как разница между методом Response.Redirect и Server.Transfer?

Как разница между методом Finalize и деструктором?