Столкнулся с очередной "фишкой" дизайнера студии при работе с Windows Forms. Ситуация:
Вы разрабатываете CustomControl. У него много свойств. Вы его кидаете на форму, там все настраиваете и т.п. Затем вам нужно что-то поменять в CustomControl, расставить значения по-умолчанию, добавить/удалить свойства...
InitializeComponent в дизайнере не всегда успешно обновится в соответствии с вашими действиями. А уж если вы из него сами руками что-нибудь поудаляли - то проще контрол удалить с формы и добавить заново, чем исправить.
Так вот, этого делать не нужно. Чтобы Visual Studio обновила код дизайнера для вашего контрола, нужно довавить еще один такой же контрол на форму, затем сразу же удалить его - обновятся все свойства всех контролов с таким же типом (Magic).
P.S. Магия WinForms, магия дизайнера... открывая новые горизонты смысла... они меня убивают :)
суббота, 18 апреля 2009 г.
воскресенье, 22 марта 2009 г.
TestDriven.NET, NHibernate and UnableToLoadProxyFactoryFactoryException
Пытаюсь запустить отдельный тест для проверки работы DAO.
При запуске теста получаю следующее:
При этом сборка 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 после сборки релиза.
[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" и добавление нескольких файлов, лежащих в папке, которая находится в папке проекта, но не добавлена в проект превращается в настоящую пытку. А все по незнанию. Решение:
Все! Очень просто :)
Все! Очень просто :)
четверг, 18 октября 2007 г.
NDbUnit и MySQL
Ситуация: для тестирования в проекте используется NUnit + NDbUnit для тестирования работы с базой. Проект работал на MS SQL Server и все было прекрасно. Потом встала задача переделать все на MySQL, что и было сделано, но возникла проблема: NDbUnit с MySQL не дружит. Тоесть NDbUnit поддеживает только SQL Server и OLE DB базы. Ну казалось бы - OLE DB поддерживает, так и используем OLE DB provider для MySQL! Но не тут то было... Сначала встала проблемма, что официального провайдера нет. Нашел тот, что нашел: [sourceforge.net]. Но и с ним не заработало (кстати, позже нашел еще один: [cherrycitysoftware.com] Его не пробовал, он 10$ стоит, хотя и бесплатно можно использовать, но с морокой). Погуглил получше и нашел решение [forums.microsoft.com], хотя и не очень красивое:
Это решение хоть и работает, но вызывает у меня не лучшие эмоции - добавление источника данных ODBC, через десятые руки работа с базой, внесение изменений в исходники NDbUnit'a... Должен быть другой способ, которого я не нашел. Если кто знает - подскажите в какую сторону смотреть.
- Идем в "Панель Управления" - "Администрирование" - "Источники данных (ODBC)". Там нужно добавить "Системный DSN" для MySQL базы к которой мы хотим приконнектиться, при этом в качестве драйвера выбираем MySQL ODBC 3.51 (можно скачать с оффициального сайта [dev.mysql.com]). В настройках драйвера выставляем все, что положено (кстати, сюда мы еще вернемся), DataSource Name я дал такое же, как у базы.
- Потом при создании Connection String в Visual Studio для Datasource выбираем ".Net Framework Data Provider for OLE DB"
- Для OLE DB Provider используем MSDataShape
- Для "Server or filename" используем DataSource Name, которое дали на шаге 2.
- Жмем "Test Connection" и радуемся.
Это решение хоть и работает, но вызывает у меня не лучшие эмоции - добавление источника данных ODBC, через десятые руки работа с базой, внесение изменений в исходники NDbUnit'a... Должен быть другой способ, которого я не нашел. Если кто знает - подскажите в какую сторону смотреть.
Подписаться на:
Сообщения (Atom)