суббота, 18 апреля 2009 г.

Designer - обновить InitializeComponent

Столкнулся с очередной "фишкой" дизайнера студии при работе с Windows Forms. Ситуация:
Вы разрабатываете CustomControl. У него много свойств. Вы его кидаете на форму, там все настраиваете и т.п. Затем вам нужно что-то поменять в CustomControl, расставить значения по-умолчанию, добавить/удалить свойства...
InitializeComponent в дизайнере не всегда успешно обновится в соответствии с вашими действиями. А уж если вы из него сами руками что-нибудь поудаляли - то проще контрол удалить с формы и добавить заново, чем исправить.
Так вот, этого делать не нужно. Чтобы Visual Studio обновила код дизайнера для вашего контрола, нужно довавить еще один такой же контрол на форму, затем сразу же удалить его - обновятся все свойства всех контролов с таким же типом (Magic).
P.S. Магия WinForms, магия дизайнера... открывая новые горизонты смысла... они меня убивают :)

воскресенье, 22 марта 2009 г.

TestDriven.NET, NHibernate and UnableToLoadProxyFactoryFactoryException

Пытаюсь запустить отдельный тест для проверки работы DAO.
[TestFixture]
public class CityTypeDaoFixture
{
private ISessionFactory _sessionFactory;
private Configuration _configuration;

[TestFixtureSetUp]
public void TestFixtureSetUp()
{
_configuration = new Configuration();
_configuration.Configure();
_configuration.AddAssembly(typeof(CityType).Assembly);
_sessionFactory = _configuration.BuildSessionFactory();
}

[SetUp]
public void SetupContext()
{
new SchemaExport(_configuration).Execute(false, true, false, false);
}

[Test]
public void CanAddNewCityType()
{
var product = new CityType { Name = "Большой город", MaxTrains = 16 };
ICityTypeDao cityTypeDao = new CityTypeDao();
cityTypeDao.Add(product);
}
}

При запуске теста получаю следующее:
TestCase 'RailSlewer.Tests.DALTests.CityTypeDaoFixture.CanAddNewCityType'
failed: TestFixtureSetUp failed in CityTypeDaoFixture
TestFixture failed: NHibernate.Bytecode.UnableToLoadProxyFactoryFactoryException : Unable to load type 'NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu' during configuration of proxy factory class.
Possible causes are:
- The NHibernate.Bytecode provider assembly was not deployed.
- The typeName used to initialize the 'proxyfactory.factory_class' property of the session-factory section is not well formed.

Solution:
Confirm that your deployment folder contains one of the following assemblies:
NHibernate.ByteCode.LinFu.dll
NHibernate.ByteCode.Castle.dll

При этом сборка NHibernate.ByteCode.LinFu.dll добавлена в References, у нее стоит CopyLocal=True и я сходил в Bin\Debug и убедился что она там лежит. 15 минут гугления и я выясняю, что не одинок. В интернете предлагают убедиться, что сборка лежит там же, где и бинари. Ну лежит. Не найдя решения в течении еще минут 15, применил метод научного тыка и со второй попытки нашел, где на самом деле ее хотят видеть:
"obj\Debug" - Вот где!

Update: Покопавшись с проблеммой еще, я выяснил что естественно из "obj\Debug" ничего грузиться не должно. Запустив свой проект при подключенных исходниках NHibernate (Тот же релиз NHibernate'a но не bin, а src) я прошел свой тест. Мучался я с этой проблеммой долго и нудно. Все нервы извел. В общем собрал самостоятельно NHibernate (ничего не менял) и теперь все тип-топ. Если кому интересно, то собранный мной из архива "NHibernate-2.1.0.Alpha1-src.zip" релиз можно скачать тут:
Только необходимые dll (581k) - все, что нужно чтобы NHibernate работал в вашем проекте
Все файлы релиза (3M) - все, что было во всех папках Bin\Release-2.0 после сборки релиза.

среда, 25 февраля 2009 г.

Visual Studio - Publish failed

Только что сталкнулся с мистической ошибкой - делаю build all для solution'a, содержащего web site - все отлично. Делаю publish веб сайту - ни одной ошибки компиляции, но... publish failed. Все перепробовал: сделал clean solution, clean project, reload project. Закрыл - открыл студию. Publish failed!!! Заработало только после того, как я в открытой студии сделал close solution и открыл его заново. Ппц... Как говорил один знакомый - при нынешнем уровне развития ПО оно скоро начнет проявлять признаки интеллекта и откажется работать на человека.

суббота, 21 февраля 2009 г.

Visual Studio - Add Existing Folder

Наверное многие сталкивались с тем, что в Visual Studio рядом с пунктом меню "Add existing file" нет меню "Add Existing Folder" и добавление нескольких файлов, лежащих в папке, которая находится в папке проекта, но не добавлена в проект превращается в настоящую пытку. А все по незнанию. Решение:
  1. Нажать кнопку "Show All Files"

  2. Теперь найти в Solution Explorer нужную папку (она будет белой)
  3. Нажать правой кнопкой и выбрать "Include in project"
Все! Очень просто :)