<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
  <channel>
    <title>GotDotNet.Ru: основная лента</title>
    <link>http://www.gotdotnet.ru/rss/</link>
    <description>Последние записи из основной лента</description>
    <language>ru-RU</language>
    <lastBuildDate>Thu, 11 Mar 2010 14:52:26 UT</lastBuildDate>
    <generator>bitrix::blog.rss</generator>
    <docs>http://cyber.law.harvard.edu/rss/rss.html</docs>
    <item>
      <title>Подведены итоги конкурса XNA игр: Мечтай. Создавай. Играй.</title>
      <link>http://www.gotdotnet.ru/blogs/vanka/7284/</link>
      <description>Подведены итоги конкурса XNA игр: Мечтай. Создавай. Играй. &lt;br/&gt;
&lt;br/&gt;
&lt;img src="http://www.gotdotnet.ru/upload/blog/vanka/b61/logo.PNG" border="0"/&gt; &lt;br/&gt;
&lt;p&gt;Окончательные итоги такие: &lt;br/&gt;
&lt;/p&gt; &lt;p&gt;1 место: игра &lt;strong&gt;Epsilon &lt;/strong&gt;(9.475)&lt;/p&gt; &lt;p&gt;&lt;strong&gt;автор: Денис Грачёв&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;2 место: игра &lt;strong&gt;Haxxagon Labs&lt;/strong&gt; (9.425)&lt;/p&gt; &lt;p&gt;&lt;strong&gt;авторы: &lt;/strong&gt;&lt;strong&gt;Самара Анатолий &lt;br/&gt;
Свириденко Александр &lt;br/&gt;
Симилетов Александр &lt;br/&gt;
Яновский Андрей&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;3 место: игра &lt;strong&gt;Paclight &lt;/strong&gt;(7.85)&lt;/p&gt; &lt;p&gt;&lt;b&gt;&lt;strong&gt;авторы: &lt;/strong&gt;&lt;/b&gt;&lt;strong&gt;Владимир Герасимов &lt;br/&gt;
Никита Вешкурцев &lt;br/&gt;
Владислав Коробов&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Среди студенческих команд победил &lt;strong&gt;Transsikator &lt;/strong&gt;(8.15)&lt;/p&gt; &lt;p&gt;&lt;b&gt;&lt;strong&gt;автор: &lt;/strong&gt;&lt;/b&gt;&lt;strong&gt;Гиляровский Константин&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Благодарим всех участников конкурса за проявленный интерес и отличные работы!&lt;/p&gt; &lt;p&gt;Поздравляем победителей!&lt;/p&gt; &lt;br/&gt;
Все присланные&amp;#160;работы скоро можно будет посмотреть на странице &lt;noindex&gt;&lt;a href="http://xnadev.ru/viewpage.php?page_id=4" rel="nofollow"&gt;конкурсов&lt;/a&gt;&lt;/noindex&gt;. &lt;br/&gt;
Ссылка на оригинальную новость: &lt;noindex&gt;&lt;a href="http://www.xnadev.ru/news.php?readmore=88" rel="nofollow"&gt;xnadev.ru&lt;/a&gt;&lt;/noindex&gt;</description>
      <author>vanka</author>
      <category>xna</category>
      <category>конкурс</category>
      <guid isPermaLink="false">urn:bitrix:blog:post:7284</guid>
      <pubDate>Thu, 11 Mar 2010 08:57:19 UT</pubDate>
    </item>
    <item>
      <title>Интревью руководителя проекта NitrosBase Андрея Портнова</title>
      <link>http://www.gotdotnet.ru/blogs/nitrosbase/7283/</link>
      <description>Перевод на Русский язык интревью руководителя проекта NitrosBase Андрея Портнова корреспонденту программы BizSpark. Оригинал на сайте &lt;noindex&gt;&lt;a href="http://www.microsoftstartupzone.com/Blogs/Microspark-BizSpark-Startup-of-the-Day/Lists/Posts/Post.aspx?ID=161" rel="nofollow"&gt;Microsoft StartupZone&lt;/a&gt;&lt;/noindex&gt; &lt;h4&gt;Расскажите нам о себе и Вашей роли в компании &lt;/h4&gt; Я - генеральный директор компании Компайл Груп, а также я руковожу проектом NitrosBase. В 1985 году я окончил Московский физико-технический институт, а в 1999 получил второе высшее образование в области экономики. В 1987 я начал работать программистом в филиале Курчатовского института атомной энергии - одного из ведущих мировых научных центров ядерной физики и высоких технологий. Там и сформировалась наша команда. Двумя другими ее участниками были Виктор Чернов, который на тот момент работал над своей диссертацией и разрабатывал собственную методику оптимизации на основе генетических алгоритмов, и Владислав Головков, участвовавший в проекте по созданию искусственного интеллекта. У Владислава были идеи о том, как ускорить процессы индексации и поиска, и с тех пор мы вместе работаем над такими алгоритмами. В настоящее время я являюсь организатором и координатором проекта. Таким образом, я отвечаю за успешность бизнеса NitrosBase, а Владислав и Виктор занимаются техническим совершенствованием ядра нашей базы данных и всех решений, основанных на нем. И они делают замечательную работу! Мы уже получили такие награды как За Укрепление Безопасности России - “ЗУБР”-2008 (http://secaward.ru/premia/laureat) и &amp;#171;Идея года&amp;#187; на выставке &amp;#171;Инновации и технологии&amp;#187; Innotech-2009 (http://innotechexpo.ru/). &lt;h4&gt;Чем Вы занимались до создания своей компании?&lt;/h4&gt; Как я уже сказал, я начал карьеру в качестве программиста в филиале Института Атомной Энергии и через 9 лет покинул его в должности директора департамента вычислительных систем, который насчитывал более 300 сотрудников. К тому времени я уже был соучредителем частной компании, занимающейся разработкой программного обеспечения для заказчиков из США и Канады. На какое-то время наша команда разделилась: Виктор провел несколько лет в США, работая в Oracle и внескольких стартапах, Владислав продолжал разрабатывать программное обеспечение, а я получал второе высшее образование в области экономики, а также опыт в банковском деле и менеджменте. В 2005 году мы объединили полученный нами опыт и навыки и создали Компайл Груп. А в 2009 мы решили запустить новый проект – NitrosBase – самую быструю в мире систему управления базами данных. &lt;h4&gt;Как Вы чувствуете себя в качестве самого многообещающего &amp;#171;Стартапа Дня&amp;#187; по мнению Microsoft BizSpark?&lt;/h4&gt; Это очень приятно! На самом деле, у нас очень амбициозная цель: разработать кэширующий ускоритель для MS SQL Server. Это заставит MS SQL Server работать в тысячи раз быстрее! У нас уже есть собственное ядро для такой кэширующей СУБД, и имеются результаты тестов, демонстрирующие такое ускорение. Мы уже презентовали этот проект на конференции SVOD (www.svod.org) и заняли первое место как самая многообещающая технологическая компания. Тем не менее, когда вы говорите с инвесторами, их в первую очередь интересует успех на рынке, а не дипломы и медали. Поэтому мы решили начать с разработки ряда элементов управления для ASP.Net приложений, базирующихся на нашем ядре СУБД. Это требует меньше времени и денег на разработку и позволит начать продажи. В данный момент мы запускаем первый элемент управления на рынок, а следующий уже находится в бета-тестировании. Поэтому для нас чрезвычайно важно, что наши разработки и бизнес-стратегия получили высокую оценку экспертов BizSpark. &lt;h4&gt;Какова миссия Вашей компании?&lt;/h4&gt; Глядя на пользователей программного обеспечения, которое использует базы данных, мы видим, что почти все они недовольны производительностью, но зачастую они даже не высказывают недовольства, потому что сегодня привычная точка зрения такова: &amp;#171;базы данных всегда работают медленно&amp;#187;. Глядя на разработчиков, мы видим, что они тратят колоссальные ресурсы, используя различные уловки, чтобы заставить свои приложения работать вдвое или втрое быстрее, и они уверены, что это нормально, потому что &amp;#171;базы данных всегда работают медленно&amp;#187;. Мы считаем, что наша миссия состоит в том, чтобы разрушить этот стереотип, предоставив разработчикам простые в использовании инструменты для создания супер-быстрых приложений, которые сделают их пользователей счастливыми даже при работе с приложениями, содержащими миллионы записей. &lt;h4&gt;Как вы пришли к идее создания Вашей компании?&lt;/h4&gt; Мы использовали наши алгоритмы для индексации и поиска в приложениях, которые мы разрабатывали на заказ. Каждая задача требовала индивидуального подхода, но мы старались по возможности унифицировать их, чтобы сделать разработку наиболее эффективной. После получения награды ZUBR-2008 мы решили, что можем свести воедино наши алгоритмы и разработать универсальный продукт для продажи. Тогда мы и решили запустить проект NitrosBase. &lt;h4&gt;Расскажите, пожалуйста, о вашем финансировании. Находитесь ли Вы в поисках и если да, то какова сумма?&lt;/h4&gt; Да, мы ищем источник финансирования. До сих пор мы разрабатывали наши продукты без внешнего финансирования, но мы не сможем сами обеспечить финансовую поддержку нашего главного проекта – ускорителя MS SQL Server. Нам необходимо около 3 миллионов долларов, чтобы завершить разработку и начать продажи. &lt;h4&gt;Сколько у Вас сотрудников? Сколько разработчиков?&lt;/h4&gt; В настоящее время в проекте NitrosBase задействовано на постоянной основе три программиста. У нас также есть ведущий архитектор, координатор и тестировщики. Над проектом работает пять постоянных сотрудников, остальные привлекаются в качестве фрилансеров. &lt;h4&gt;Вы занимаетесь подбором сотрудников? Если да, то каких людей Вы ищете и где?&lt;/h4&gt; У нас есть резерв внештатных сотрудников (фрилансеров), с которыми мы работали ранее. В первую очередь мы приглашаем их, поскольку знаем их навыки и привычки. Также мы приглашаем людей по рекомендациям наших программистов и фрилансеров. И, наконец, мы ищем людей на сайтах по подбору персонала. В основном мы набираем тестировщиков, дизайнеров и программистов. &lt;h4&gt;На какой платформе вы работаете и почему?&lt;/h4&gt; Мы ориентированы на Microsoft SQL Server и .Net. Принимая во внимание то, что нашей главной целью является создание ускорителя сервера MS SQL, ответ на вопрос &amp;#171;почему?&amp;#187; вполне очевиден. &lt;h4&gt;Где Вы сегодня видите возможности в области программного обеспечения/Интернет?&lt;/h4&gt; Мне кажется, что время заказных проектов с тоннами уникальных кодов прошло. Ежедневно на рынке становится доступным все больше и больше готового программного обеспечения с различными функциями. Именно поэтому мы начали ориентироваться на выпуск &amp;#171;коробочного&amp;#187; программного обеспечения. Заказные программы очень дорогостоящие, в то время как большинство задач сегодня может решить умелый интегратор посредством более дешевых готовых решений. Для разработчиков я вижу возможности создания продуктов для широкой продажи по более низкой цене, вместо разработки уникальных и дорогих решений. Кроме того, выглядят многообещающими сервисы на &amp;#171;облаках&amp;#187; и модель SAAS (ПО как услуга). Эти подходы дают похожий результат: больше покупателей за более низкую стоимость. Что касается области применения для приложений, я бы хотел подчеркнуть, что люди по-прежнему ненавидят читать руководства и не любят тратить время на изучение чего-то нового, что не имеет отношения к их непосредственному роду занятий. Поэтому всегда будет востребовано программное обеспечение, сделанное по принципу &amp;#171;просто нажми кнопку&amp;#187;, которое стоит между любым мощным сервисом или продуктом и необученным пользователем. Миллионы покупателей готовы предпочесть простоту функциональности, и это очень хороший и благодатный рынок. &lt;h4&gt;Что Вы думаете о программе BizSpark?&lt;/h4&gt; Мы любим BizSpark и очень признательны Microsoft за то, что они помогают разработчикам. Для нас это поистине неоценимо: инструменты разработки, конференции, другие источники информации и, наконец, помощь в продвижении продукта. В нашем бизнес-плане мы указываем, что мы участвуем в BizSpark, и считаем это сильным преимуществом. &lt;h4&gt;Можете дать совет начинающим разработчикам программного обеспечения?&lt;/h4&gt; Не уверен, что скажу что-то новое: не важно, насколько Вы умелый программист – бизнес-идея является главной отправной точкой. Сначала выясните, чего именно хотят покупатели, а программная реализация, как правило, не проблема. &lt;h4&gt;Кто для Вас является образцом для подражания?&lt;/h4&gt; Не уверен, что у меня он есть. Я большой поклонник Сета Година во всем, что касается маркетинговой деятельности. На конференции SVOD в декабре 2009 меня впечатлило выступление Сергея Белоусова, главы правления и главного исполнительного директора известной компании Parallels. Он буквально заряжен успехом и харизмой, и когда слушаешь его, кажется, что он – отличный образец для подражания. &lt;h4&gt;Что бы вы особенно хотели, чтобы читатели вынесли из этого интервью?&lt;/h4&gt; Эра приложений &amp;#171;кликни и жди&amp;#187; закончилась. Эра изощренного и мучительного кодирования – тоже. Попробуйте NitrosBase! &lt;p align="right"&gt;Перевод О. Чемагина &lt;/p&gt;</description>
      <author>lukesky</author>
      <category>ASP.NET</category>
      <category>MS SQL Server</category>
      <category>ADO.NET</category>
      <category>NitrosBase</category>
      <category>FastSQLDataSource</category>
      <category>NBDataSource</category>
      <category>SQL Server Accelerator</category>
      <guid isPermaLink="false">urn:bitrix:blog:post:7283</guid>
      <pubDate>Thu, 11 Mar 2010 05:21:05 UT</pubDate>
    </item>
    <item>
      <title>Скрейпинг сайтов с .Net и WatiN</title>
      <link>http://www.gotdotnet.ru/blogs/nesteruk/7282/</link>
      <description>Рано или поздно у каждого разработчика появится соблазн &amp;#171;скачать&amp;#187; какой-нибудь сайт, либо для того чтобы получить или проанализировать определенный контент, либо просто доказать себе что это в его (её) силах. На самом деле, получить доступ к HTML определенного сайта просто, но проблемы начинаются тогда, когда сайт требует авторизации или содержит контент в виде картинки (например [...]&lt;img src="http://stats.wordpress.com/b.gif?host=nesteruk.wordpress.com&amp;amp;blog=373435&amp;amp;post=283&amp;amp;subd=nesteruk&amp;amp;ref=&amp;amp;feed=1" border="0"/&gt;</description>
      <author>mezastel</author>
      <category>Technology</category>
      <category>watin</category>
      <guid>http://nesteruk.wordpress.com/2010/03/10/%d1%81%d0%ba%d1%80%d0%b5%d0%b9%d0%bf%d0%b8%d0%bd%d0%b3-%d1%81%d0%b0%d0%b9%d1%82%d0%be%d0%b2-%d1%81-net-%d0%b8-watin/</guid>
      <pubDate>Wed, 10 Mar 2010 12:44:40 UT</pubDate>
    </item>
    <item>
      <title>ASP.NET 4.0: 301 Permanent Redirect (перемещение навсегда)</title>
      <link>http://www.gotdotnet.ru/blogs/sashaeve/7281/</link>
      <description>&lt;p&gt;302 Redirect (временное перемещение) означает, что страница перемещается на временный адрес. 301 Permanent Redirect (перемещение навсегда) означает, что перенаправление идет на постоянный адрес. &lt;/p&gt; &lt;p&gt;Это важно потому что поисковые системы оценивают временные адреса ниже, чем постоянные. Таким образом, неправильное перемещение может грозить для владельцев сайтов понижением ссылочного веса и, как результат, снижением позиции в поисковой выдаче. &lt;br/&gt;
&lt;/p&gt; &lt;p&gt;&lt;noindex&gt;&lt;a href="http://msug.vn.ua/blogs/akrakovetsky/archive/2010/03/10/301-permanent-redirect-asp-net-4.aspx" rel="nofollow"&gt;Читать полностью&lt;/a&gt;&lt;/noindex&gt; &lt;br/&gt;
&lt;/p&gt;</description>
      <author>sashaeve</author>
      <category>ASP.NET 4.0</category>
      <guid isPermaLink="false">urn:bitrix:blog:post:7281</guid>
      <pubDate>Wed, 10 Mar 2010 12:13:30 UT</pubDate>
    </item>
    <item>
      <title>Hello, Mock</title>
      <link>http://www.gotdotnet.ru/blogs/handcode/7280/</link>
      <description>Во время разработки(тестирования) иногда возникает потребность использовать некий интерфейс, до того, как он будет реализован. Решением данной проблемы является использование Mock-объектов. Mock-объект предоставляет фиктивную реализацию, другими...</description>
      <author>oakland</author>
      <category>Mock</category>
      <category>.NET</category>
      <category>Hello</category>
      <guid>http://handcode.blogspot.com/2010/03/hello-mock.html</guid>
      <pubDate>Wed, 10 Mar 2010 05:45:00 UT</pubDate>
    </item>
    <item>
      <title>Data structures: Finger Tree (Part 1)</title>
      <link>http://www.gotdotnet.ru/blogs/v2notes/7279/</link>
      <description>&lt;div&gt;&lt;noindex&gt;&lt;a href="http://v2matveev.blogspot.com/2010/03/data-structures-finger-tree-part-1.html" rel="nofollow"&gt;Data structures: Finger Tree (Part 1) &lt;/a&gt;&lt;/noindex&gt; &lt;br/&gt;
&lt;noindex&gt;&lt;a href="http://feeds.feedburner.com/~ff/OccasionalNotes?a=AFO4Zkj8dKo:JPfnYjZbMDk:yIl2AUoC8zA" rel="nofollow"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OccasionalNotes?d=yIl2AUoC8zA" border="0"/&gt;&lt;/a&gt;&lt;/noindex&gt; &lt;noindex&gt;&lt;a href="http://feeds.feedburner.com/~ff/OccasionalNotes?a=AFO4Zkj8dKo:JPfnYjZbMDk:F7zBnMyn0Lo" rel="nofollow"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OccasionalNotes?i=AFO4Zkj8dKo:JPfnYjZbMDk:F7zBnMyn0Lo" border="0"/&gt;&lt;/a&gt;&lt;/noindex&gt; &lt;noindex&gt;&lt;a href="http://feeds.feedburner.com/~ff/OccasionalNotes?a=AFO4Zkj8dKo:JPfnYjZbMDk:V_sGLiPBpWU" rel="nofollow"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OccasionalNotes?i=AFO4Zkj8dKo:JPfnYjZbMDk:V_sGLiPBpWU" border="0"/&gt;&lt;/a&gt;&lt;/noindex&gt; &lt;/div&gt; &lt;img src="http://feeds.feedburner.com/~r/OccasionalNotes/~4/AFO4Zkj8dKo" width="1px" height="1px" border="0"/&gt;</description>
      <author>desco</author>
      <category>Finger tree</category>
      <category>fsharp</category>
      <category>F#</category>
      <category>Data structures</category>
      <guid>http://feedproxy.google.com/~r/OccasionalNotes/~3/AFO4Zkj8dKo/data-structures-finger-tree-part-1.html</guid>
      <pubDate>Tue, 09 Mar 2010 19:19:00 UT</pubDate>
    </item>
    <item>
      <title>С миру по нитке #28</title>
      <link>http://www.gotdotnet.ru/blogs/nisus/7269/</link>
      <description>&lt;h2&gt;Программирование&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;&lt;noindex&gt;&lt;a href="http://florent.clairambault.fr/c-net-how-works-automatic-assembly-versioning" rel="nofollow"&gt;How works automatic assembly versioning&lt;/a&gt;&lt;/noindex&gt; &lt;br/&gt;
Принцип, по которому формируется автоматический номер версии сборки. Оказывается это все-таки особое представление текущего времени и даты. &lt;/li&gt;
 &lt;li&gt;&lt;noindex&gt;&lt;a href="http://mikehadlow.blogspot.com/2010/02/creating-x509-certificates-with.html?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed:+CodeRant+(Code+rant)&amp;amp;utm_content=Google+Reader" rel="nofollow"&gt;Creating x.509 certificates with Pluralsight self-cert&lt;/a&gt;&lt;/noindex&gt; &lt;br/&gt;
Создаем self-signed X.509-сертификат программно. &lt;/li&gt;
 &lt;li&gt;&lt;noindex&gt;&lt;a href="http://blog.webdistortion.com/2010/02/16/60-net-libraries-every-developer-should-know-about/" rel="nofollow"&gt;60+ .NET libraries every developer should know about.&lt;/a&gt;&lt;/noindex&gt; &lt;br/&gt;
Справочник по библиотекам, способным облегчить жизнь .Net-разработчика. Все основные вроде есть. &lt;/li&gt;
 &lt;li&gt;&lt;noindex&gt;&lt;a href="http://blogs.msdn.com/ncl/archive/2010/02/23/system-uri-f-a-q.aspx" rel="nofollow"&gt;System.Uri FAQ&lt;/a&gt;&lt;/noindex&gt; &lt;br/&gt;
Неплохой обзор некоторых подводных камней, проявляющихся при работе с классом System.Uri. &lt;/li&gt;
 &lt;li&gt;&lt;noindex&gt;&lt;a href="http://itblogs.ru/blogs/bishop/archive/2010/03/05/58917.aspx" rel="nofollow"&gt;10 заповедей для программистов&lt;/a&gt;&lt;/noindex&gt; &lt;br/&gt;
Как говорится, ППКС. &lt;/li&gt;
 &lt;/ul&gt; &lt;h2&gt;Сеть&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;&lt;noindex&gt;&lt;a href="http://msmvps.com/blogs/deborahk/archive/2010/02/09/asp-net-updatepanel-and-master-pages.aspx" rel="nofollow"&gt;ASP.NET: UpdatePanel and Master Pages&lt;/a&gt;&lt;/noindex&gt; &lt;br/&gt;
Определяем обновление компонента UpdatePanel. &lt;/li&gt;
 &lt;li&gt;&lt;noindex&gt;&lt;a href="http://dotnetslackers.com/articles/aspnet/The-Kayak-Framework-An-easy-way-to-speak-HTTP-with-NET.aspx" rel="nofollow"&gt;The Kayak Framework: An easy way to speak HTTP with .NET&lt;/a&gt;&lt;/noindex&gt; &lt;br/&gt;
Веб-сервер для ASP.NET. Использование IIS не всегда возможно и оправдано, тут то и вступают в дело небольшие самописные обработчики. &lt;/li&gt;
 &lt;li&gt;&lt;noindex&gt;&lt;a href="http://www.4guysfromrolla.com/articles/030310-1.aspx" rel="nofollow"&gt;Improving CSS With .LESS&lt;/a&gt;&lt;/noindex&gt; &lt;br/&gt;
Занятные трюки для уменьшения объема CSS-скриптов, что самое приятное, производятся автоматически. &lt;/li&gt;
 &lt;li&gt;&lt;noindex&gt;&lt;a href="http://www.xdevsoftware.com/blog/post/Redirect-from-Http-to-Https-in-ASPNET.aspx" rel="nofollow"&gt;Redirect from Http to Https in ASP.NET&lt;/a&gt;&lt;/noindex&gt; &lt;br/&gt;
Включение SSL только для нужных страниц сайта. &lt;/li&gt;
 &lt;li&gt;&lt;noindex&gt;&lt;a href="http://dotnet.dzone.com/news/discover-which-control-raised?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed:+zones/dotnet+(.NET+Zone)" rel="nofollow"&gt;Discover which Control Raised a PostBack&lt;/a&gt;&lt;/noindex&gt; &lt;br/&gt;
Определяем контрол, вызвавший отправку формы. &lt;/li&gt;
 &lt;/ul&gt; &lt;h2&gt;Базы данных&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;&lt;noindex&gt;&lt;a href="http://blog.sqlauthority.com/2010/03/03/sql-server-performance-comparison-insert-top-n-into-table-using-top-with-insert/" rel="nofollow"&gt;SQL SERVER – Performance Comparison – INSERT TOP (N) INTO Table – Using Top with INSERT&lt;/a&gt;&lt;/noindex&gt; &lt;br/&gt;
Особенности использования оператора TOP при вставке в базу данных результатов выполнения SELECT-а. &lt;/li&gt;
 &lt;li&gt;&lt;noindex&gt;&lt;a href="http://dotnetslackers.com/Community/blogs/kaushalparik/archive/2008/06/19/multiple-active-result-sets-mars-ado-net-2-0.aspx" rel="nofollow"&gt;Multiple Active Result Sets (MARS - ADO.NET 2.0)&lt;/a&gt;&lt;/noindex&gt; &lt;br/&gt;
Малоизвестная фича ADO.NET 2.0 и выше – возможность иметь несколько активных запросов для одного соединения бд. &lt;/li&gt;
 &lt;/ul&gt; &lt;h2&gt;SharePoint&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;&lt;noindex&gt;&lt;a href="http://florent.clairambault.fr/threads-and-sharepoint" rel="nofollow"&gt;Threads and Sharepoint&lt;/a&gt;&lt;/noindex&gt; &lt;br/&gt;
Немного об особенностях использования потоков в портальных приложениях.&lt;/li&gt;
 &lt;/ul&gt;</description>
      <author>Nisus</author>
      <category>.net</category>
      <category>asp.net</category>
      <category>ссылки</category>
      <guid isPermaLink="false">urn:bitrix:blog:post:7269</guid>
      <pubDate>Tue, 09 Mar 2010 11:31:33 UT</pubDate>
    </item>
    <item>
      <title>Создание внебраузерных Silverlight приложений. Часть 2.</title>
      <link>http://www.gotdotnet.ru/blogs/wizardbox/7268/</link>
      <description>&lt;noindex&gt;&lt;a href="http://www.gotdotnet.ru/blogs/wizardbox/7264/" rel="nofollow"&gt;Создание внебраузерных Silverlight приложений. Часть 1.&lt;/a&gt;&lt;/noindex&gt; &lt;h2&gt;Содержание&lt;/h2&gt; &lt;ul&gt;&lt;li&gt;&lt;noindex&gt;&lt;a href="http://www.gotdotnet.ru/blogs/wizardbox/7268/#txt1" rel="nofollow"&gt;Обновление внебраузерных приложений&lt;/a&gt;&lt;/noindex&gt;&lt;/li&gt;
 &lt;li&gt;&lt;noindex&gt;&lt;a href="http://www.gotdotnet.ru/blogs/wizardbox/7268/#txt2" rel="nofollow"&gt;Определение наличия сетевого соединения&lt;/a&gt;&lt;/noindex&gt;&lt;/li&gt;
 &lt;li&gt;&lt;noindex&gt;&lt;a href="http://www.gotdotnet.ru/blogs/wizardbox/7268/#txt3" rel="nofollow"&gt;Архитектура внебраузерных приложений&lt;/a&gt;&lt;/noindex&gt;&lt;/li&gt;
 &lt;li&gt;&lt;noindex&gt;&lt;a href="http://www.gotdotnet.ru/blogs/wizardbox/7268/#txt4" rel="nofollow"&gt;Отладка внебраузерных приложений&lt;/a&gt;&lt;/noindex&gt;&lt;/li&gt;
 &lt;li&gt;&lt;noindex&gt;&lt;a href="http://www.gotdotnet.ru/blogs/wizardbox/7268/#txt5" rel="nofollow"&gt;Совместное использование кода и сборок в Silverlight и .NET&lt;/a&gt;&lt;/noindex&gt;&lt;/li&gt;
 &lt;/ul&gt; &lt;h2&gt;&lt;a name="txt1" rel="nofollow"&gt;Обновление внебраузерных Silverlight приложений&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;В платформу Silverlight встроен асинхронный механизм обновления внебраузерных приложений. Разработчик ответственен за то, когда будет проверяться наличие обновлений для его приложения, а загрузка и установка происходят автоматически. Что требуется от разработчика.&lt;/p&gt; &lt;ol&gt;&lt;li&gt;Загрузить новую версию .xap файла Silverlight приложения на сервер.&lt;/li&gt;
 &lt;li&gt;При запуске внебраузерного приложения или в любой другой момент проверить наличие обновлений.&lt;/li&gt;
 &lt;li&gt;После окончания проверки Silverlight скачает новую версию приложения, которая будет установлена автоматически при следующем запуске. Разработчик может обработать событие окончания проверки и, например, показать пользователю сообщение о необходимости перезапуска приложения.&lt;/li&gt;
 &lt;/ol&gt; &lt;p&gt;Давайте добавим возможность обновления в существующее внебраузерное приложение. Откроем C# код страницы App.xaml. И в конструкторе класса &amp;#171;App&amp;#187; подпишемся на событие &amp;#171;CheckAndDownloadUpdateCompleted&amp;#187;.&lt;/p&gt; &lt;div style="color: Black; background-color: White"&gt;&lt;pre&gt;&lt;span style="color: Blue"&gt;this&lt;/span&gt;.CheckAndDownloadUpdateCompleted += 
&lt;span style="color: Blue"&gt;new&lt;/span&gt; CheckAndDownloadUpdateCompletedEventHandler(App_CheckAndDownloadUpdateCompleted);
&lt;/pre&gt; &lt;/div&gt; &lt;p&gt;Данное событие окончания проверки на наличие обновлений в случае успеха срабатывает только после физической закачки новой версии на компьютер пользователя. К сожалению, нет возможности спросить у пользователя, хочет ли он скачивать и устанавливать найденное обновление. &lt;/p&gt; &lt;p&gt;Так как в следующий раз при запуске приложения пользователь уже будет работать с новой его версией, в обработчике события &amp;#171;CheckAndDownloadUpdateCompleted&amp;#187; уведомим пользователя об этом.&lt;/p&gt;&lt;div style="color: Black; background-color: White"&gt;&lt;pre&gt;&lt;span style="color: Blue"&gt;void&lt;/span&gt; App_CheckAndDownloadUpdateCompleted(&lt;span style="color: Blue"&gt;object&lt;/span&gt; sender, 
CheckAndDownloadUpdateCompletedEventArgs e)
{
    &lt;span style="color: Blue"&gt;if&lt;/span&gt; (e.UpdateAvailable)
    {
        MessageBox.Show(&lt;span&gt;&amp;quot;Доступно обновление. &amp;quot;&lt;/span&gt; +
            &lt;span&gt;&amp;quot;Перезапустите приложение для использования новой
                версии.&amp;quot;&lt;/span&gt;);
    }
    &lt;span style="color: Blue"&gt;else&lt;/span&gt; &lt;span style="color: Blue"&gt;if&lt;/span&gt; (e.Error != &lt;span style="color: Blue"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; e.Error &lt;span style="color: Blue"&gt;is&lt;/span&gt; PlatformNotSupportedException)
    {
        MessageBox.Show(&lt;span&gt;&amp;quot;Доступно обновление, &amp;quot;&lt;/span&gt; +
            &lt;span&gt;&amp;quot;но требуется более новая версия Silverlight.&amp;quot;&lt;/span&gt;);
    }
}
&lt;/pre&gt; &lt;/div&gt; &lt;p&gt;В реальных внебраузерных приложениях вместо MessageBox лучше использовать оповещения или какое-либо другое решение. &lt;/p&gt; &lt;p&gt;После того как мы подписались на событие, надо собственно инициировать проверку на наличие обновлений. Нет ничего проще. Добавим следующий код в функцию &amp;#171;Application_Startup&amp;#187; класса &amp;#171;App&amp;#187;.&lt;/p&gt; &lt;div style="color: Black; background-color: White"&gt;&lt;pre&gt;&lt;span style="color: Blue"&gt;this&lt;/span&gt;.CheckAndDownloadUpdateAsync();
&lt;/pre&gt; &lt;/div&gt; &lt;p&gt;Из других классов получить текущий экземпляр класса &amp;#171;App&amp;#187; можно через свойство Application.Current. Проверка происходит асинхронно, а от разработчика больше ничего не требуется. Полный код конструктора класса &amp;#171;App&amp;#187; теперь выглядит следующим образом. &lt;/p&gt; &lt;div style="color: Black; background-color: White"&gt;&lt;pre&gt;&lt;span style="color: Blue"&gt;public&lt;/span&gt; App()
{
    &lt;span style="color: Blue"&gt;this&lt;/span&gt;.Startup += &lt;span style="color: Blue"&gt;this&lt;/span&gt;.Application_Startup;
    &lt;span style="color: Blue"&gt;this&lt;/span&gt;.Exit += &lt;span style="color: Blue"&gt;this&lt;/span&gt;.Application_Exit;
    &lt;span style="color: Blue"&gt;this&lt;/span&gt;.UnhandledException += &lt;span style="color: Blue"&gt;this&lt;/span&gt;.Application_UnhandledException;

    &lt;span style="color: Blue"&gt;this&lt;/span&gt;.CheckAndDownloadUpdateCompleted += 
    &lt;span style="color: Blue"&gt;new&lt;/span&gt; CheckAndDownloadUpdateCompletedEventHandler(App_CheckAndDownloadUpdateCompleted);

    InitializeComponent();
}
&lt;/pre&gt; &lt;/div&gt; &lt;p&gt;Как видите, изменения незначительны. Как и в случае с функцией &amp;#171;Application_Startup&amp;#187;, полный код которой также не должен вызвать у Вас удивления.&lt;/p&gt; &lt;div style="color: Black; background-color: White"&gt;&lt;pre&gt;&lt;span style="color: Blue"&gt;private&lt;/span&gt; &lt;span style="color: Blue"&gt;void&lt;/span&gt; Application_Startup(&lt;span style="color: Blue"&gt;object&lt;/span&gt; sender, StartupEventArgs e)
{
    &lt;span style="color: Blue"&gt;this&lt;/span&gt;.CheckAndDownloadUpdateAsync();
    &lt;span style="color: Blue"&gt;this&lt;/span&gt;.RootVisual = &lt;span style="color: Blue"&gt;new&lt;/span&gt; MainPage();
}
&lt;/pre&gt; &lt;/div&gt; &lt;p&gt;Хорошей практикой является добавление кода, проверяющего наличие обновлений, в каждое создаваемое внебраузерное приложение. Ведь без этого для использования новой версии пользователю придётся удалить старую и установить приложение заново. &lt;/p&gt; &lt;h2&gt;&lt;a name="txt2" rel="nofollow"&gt;Определение наличия сетевого соединения&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Ещё одной часто возникающей задачей является определение наличия сетевого соединения. Ведь если у нас нет доступа в сеть, поведение приложения может коренным образом меняться, а часть его функциональности и вовсе оказаться недоступной. &lt;/p&gt; &lt;p&gt;Для того чтобы просто проверить наличие сетевого соединения достаточно вызвать статическую функцию GetIsNetworkAvailable класса NetworkInterface.&lt;/p&gt; &lt;div style="color: Black; background-color: White"&gt;&lt;pre&gt;NetworkInterface.GetIsNetworkAvailable();
&lt;/pre&gt; &lt;/div&gt; &lt;p&gt;Давайте добавим в элемент LayoutRoot на странице MainPage.xaml текстовый блок, куда будем выводить информацию о сетевом соединении. &lt;/p&gt; &lt;div style="color: Black; background-color: White"&gt;&lt;pre&gt;&lt;span style="color: Blue"&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;TextBlock&lt;/span&gt; &lt;span style="color: Red"&gt;x:Name&lt;/span&gt;&lt;span style="color: Blue"&gt;=&lt;/span&gt;&lt;span style="color: Black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: Blue"&gt;tbNetwork&lt;/span&gt;&lt;span style="color: Black"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color: Red"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color: Blue"&gt;=&lt;/span&gt;&lt;span style="color: Black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: Blue"&gt;Top&lt;/span&gt;&lt;span style="color: Black"&gt;&amp;quot;&lt;/span&gt; 
&lt;span style="color: Red"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color: Blue"&gt;=&lt;/span&gt;&lt;span style="color: Black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: Blue"&gt;Center&lt;/span&gt;&lt;span style="color: Black"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color: Red"&gt;FontSize&lt;/span&gt;&lt;span style="color: Blue"&gt;=&lt;/span&gt;&lt;span style="color: Black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: Blue"&gt;25&lt;/span&gt;&lt;span style="color: Black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: Blue"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt; &lt;/div&gt; &lt;p&gt;Также напишем функцию, которая будет собственно изменять текст в текстовом блоке.&lt;/p&gt; &lt;div style="color: Black; background-color: White"&gt;&lt;pre&gt;&lt;span style="color: Blue"&gt;void&lt;/span&gt; CheckNetwork()
{
    &lt;span style="color: Blue"&gt;if&lt;/span&gt; (NetworkInterface.GetIsNetworkAvailable())
    {
        tbNetwork.Text = &lt;span&gt;&amp;quot;Сеть доступна&amp;quot;&lt;/span&gt;;
        tbNetwork.Foreground = &lt;span style="color: Blue"&gt;new&lt;/span&gt; SolidColorBrush(Colors.Green);
    }
    &lt;span style="color: Blue"&gt;else&lt;/span&gt;
    {
        tbNetwork.Text = &lt;span&gt;&amp;quot;Сеть не доступна&amp;quot;&lt;/span&gt;;
        tbNetwork.Foreground = &lt;span style="color: Blue"&gt;new&lt;/span&gt; SolidColorBrush(Colors.Red);
    }
}
&lt;/pre&gt; &lt;/div&gt; &lt;p&gt;Отлично, функция у нас есть. Но когда её вызывать? Если вызвать её один раз при загрузке приложения, то мы не узнаем об изменениях, происходящих с сетевым соединением в процессе работы приложения. К счастью мы можем подписаться на событие NetworkAddressChanged класса NetworkChange, которое происходит при изменении сетевого адреса компьютера, а значит и при исчезновении/появлении сетевого соединения. В обработчике события NetworkChange вызовем функцию CheckNetwork. Кроме того вызовем функцию CheckNetwork в конструкторе класса MainPage (В листинге не приведён код предыдущих примеров). &lt;/p&gt; &lt;div style="color: Black; background-color: White"&gt;&lt;pre&gt;&lt;span style="color: Blue"&gt;public&lt;/span&gt; MainPage()
{
    InitializeComponent();

    CheckNetwork();
    NetworkChange.NetworkAddressChanged += (sender, e) =&amp;gt; CheckNetwork();
}
&lt;/pre&gt; &lt;/div&gt; &lt;p&gt;Теперь запустите приложение в браузере или вне его, в условиях, когда сетевое соединение доступно.&lt;/p&gt; &lt;img src="http://www.gotdotnet.ru/upload/blog/wizardbox/0b3/10.png" border="0"/&gt; &lt;p&gt;Вы увидите зелёный текст, сообщающий об этом. Теперь отключите сетевой адаптер, можете выдернуть кабель или сделать другие действия для обеспечения недоступности сети.&lt;/p&gt; &lt;img src="http://www.gotdotnet.ru/upload/blog/wizardbox/255/11.png" border="0"/&gt; &lt;p&gt;Надпись сменится автоматически. Чего мы и добивались. &lt;/p&gt; &lt;h2&gt;&lt;a name="txt3" rel="nofollow"&gt;Архитектура внебраузерных Silverlight приложений&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Разрабатывая внебраузерные Silverlight приложения полезно знать, что конкретно выполняется на компьютере у пользователя, где это хранится, а также, куда собственно инсталлируются внебраузерные приложения. Как разработчик Вы создаёте .xap файл Silverlight приложения. Очевидно, что выполняться он не может. &lt;/p&gt; &lt;p&gt;Давайте зайдём в свойства ярлыка любого установленного внебраузерного Silverlight приложения.&lt;/p&gt; &lt;img src="http://www.gotdotnet.ru/upload/blog/wizardbox/56a/12.png" border="0"/&gt; &lt;p&gt;Можно увидеть, что на самом деле запускается файл &amp;#171;sllauncher.exe&amp;#187;, расположенный в папке &amp;#171;C:\Program Files\Microsoft Silverlight&amp;#187; или &amp;#171;C:\Program Files (x86)\Microsoft Silverlight&amp;#187; на 64 битных платформах. Ему передаётся Id внебраузерного Silverlight приложения. В данном случае это &amp;#171;2923737553.localhost&amp;#187;. Sllauncher.exe при запуске ищет в папке внебраузерных приложений приложение с нужным Id и запускает его внутри своего окна. Папка, куда устанавливаются внебраузерные Silverlight приложения своя для каждого пользователя. &lt;/p&gt; &lt;p&gt;Перейдите в директорию &amp;#171;C:\Users\__ИМЯ_ПОЛЬЗОВАТЕЛЯ__\AppData\LocalLow\Microsoft\Silverlight&amp;#187;, только учтите, что папка &amp;#171;AppData&amp;#187; является скрытой. Внутри директории &amp;#171;Silverlight&amp;#187; находятся две поддиректории: &amp;#171;is&amp;#187; - место для изолированных хранилищ, а также &amp;#171;OutOfBrowser&amp;#187; - место для размещения внебраузерных приложений. &lt;/p&gt; &lt;img src="http://www.gotdotnet.ru/upload/blog/wizardbox/365/13.png" border="0"/&gt; &lt;p&gt;Внутри каждой папки внебраузерного Silverlight приложения находятся несколько файлов, необходимых для его работы. &lt;/p&gt; &lt;img src="http://www.gotdotnet.ru/upload/blog/wizardbox/0a4/14.png" border="0"/&gt; &lt;p&gt;На самом деле было бы не совсем верно утверждать, что при работе внебраузерных Silverlight приложений браузер не используется, так как в окне внебраузерного приложения размещается самый настоящий Internet Explorer, в котором уже выполняется Silverlight. С помощью программы Spy++ это легко увидеть.&lt;/p&gt; &lt;p&gt;В первом случае, это видно на рисунке, Silverlight приложение работает в браузере.&lt;/p&gt; &lt;img src="http://www.gotdotnet.ru/upload/blog/wizardbox/2d5/15.png" border="0"/&gt; &lt;p&gt;Во втором случае оно работает вне его.&lt;/p&gt; &lt;img src="http://www.gotdotnet.ru/upload/blog/wizardbox/9c4/16.png" border="0"/&gt; &lt;p&gt;Можно заметить, что везде присутствует &amp;#171;Internet Explorer_Server&amp;#187;. Другое дело, что в случае с внебраузерными приложениями мы его не замечаем и не можем запустить в нём что-то отличное от нашего Silverlight приложения.&lt;/p&gt; &lt;h2&gt;&lt;a name="txt4" rel="nofollow"&gt;Отладка внебраузерных приложений&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Мы увидели много интересных возможностей внебраузерных Silverlight приложений, научились создавать такие приложения и узнали, как они работают. Всё это, конечно, хорошо, но на данный момент может быть не совсем очевиден механизм их отладки. Ведь, отлаживая Silverlight приложения в браузере, доступа к специфическим внебраузерным возможностям нет. Поэтому хорошим решением кажется присоединение отладчика к процессу &amp;#171;sllauncher.exe&amp;#187;, в котором, как мы увидели ранее, и работают внебраузерные приложения. Но данное решение не позволяет отлаживать код, выполняемый при загрузке внебраузерного Silverlight приложения. Вероятно, должен быть способ лучше.&lt;/p&gt; &lt;p&gt;Далее я такой способ и опишу.&lt;/p&gt; &lt;p&gt;Предположим, что Silverlight приложение создано, настроено для работы вне браузера и хостится в проекте Web приложения.&lt;/p&gt; &lt;ol&gt;&lt;li&gt;Если проект Web приложения не является стартовым проектом (запускаемым при нажатии F5 в Visual Studio), сделайте его таковым.&lt;/li&gt;
 &lt;li&gt;Запустите проект.&lt;/li&gt;
 &lt;li&gt;Установите внебраузерное Silverlight приложение.&lt;/li&gt;
 &lt;li&gt;После установки внебраузерное приложение запустится. Закройте его и остановите отладку в Visual Studio.&lt;/li&gt;
 &lt;li&gt;Сделайте проект Silverlight приложения стартовым. Для этого нажмите правой кнопкой мыши на имени проекта в окне &amp;#171;Solution Explorer&amp;#187; и выберите пункт &amp;#171;Set as StartUp Project&amp;#187;.&lt;/li&gt;
 &lt;li&gt;После этого в том же контекстном меню проекта Silverlight приложения выберите пункт &amp;#171;Properties&amp;#187;.&lt;/li&gt;
 &lt;li&gt;В открывшемся диалоге свойств проекта перейдите на вкладку &amp;#171;Debug&amp;#187;. И установите для &amp;#171;Start Action&amp;#187; значение &amp;#171;Installed out-of-browser application&amp;#187;. В выпадающем списке выберите, скорее всего, единственный пункт, а именно имя установленного внебраузерного приложения. &lt;br/&gt;
&lt;img src="http://www.gotdotnet.ru/upload/blog/wizardbox/11f/18.png" border="0"/&gt;&lt;/li&gt;
 &lt;li&gt;Всё, можно сохранить изменения, и поставить точку останова в нужном месте Silverlight приложения.&lt;/li&gt;
 &lt;li&gt;Нажмите F5. Silverlight приложение сразу запустится вне браузера. Отладчик будет присоединён автоматически. &lt;br/&gt;
&lt;img src="http://www.gotdotnet.ru/upload/blog/wizardbox/42a/19.png" border="0"/&gt;&lt;/li&gt;
 &lt;/ol&gt; &lt;h2&gt;&lt;a name="txt5" rel="nofollow"&gt;Совместное использование кода и сборок в Silverlight и .NET&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Если Вы создаёте Silverlight и WPF версию какого-либо приложения, может потребоваться использовать одни и те же сборки в обеих версиях. Или же один и тот же код должен работать как на сервере, так и на Silverlight клиенте. Вариантов, почему это может быть нужно, множество. &lt;/p&gt; &lt;p&gt;В Silverlight присутствует возможность создать сборки, которые можно подключить и в обычных .NET приложениях. Серьёзным ограничением является то, что такие сборки могут использовать только общий для Silverlight и .NET API. Сразу хочется отметить, что пользовательский интерфейс не является порируемым из-за отличий между Silverlight и WPF. Но существуют пять общих ключевых сборок, доступных для использования на обеих платформах. Вот они.&lt;/p&gt; &lt;ul&gt;&lt;li&gt;mscorlib&lt;/li&gt;
 &lt;li&gt;System&lt;/li&gt;
 &lt;li&gt;System.Core&lt;/li&gt;
 &lt;li&gt;System.ComponentModel.Composition&lt;/li&gt;
 &lt;li&gt;Microsoft.VisualBasic&lt;/li&gt;
 &lt;/ul&gt; &lt;p&gt;Данные сборки являются базовыми и поддерживают только основные сценарии работы, но это лучше, чем отсутствие возможности портирования сборок как таковой. &lt;/p&gt; &lt;p&gt;Также надо учитывать, что есть возможность использовать Silverlight сборки в .NET, но не наоборот. Это связано с тем, что Silverlight является подмножеством .NET, а код, созданный для подмножества некоторого API с большей долей вероятности будет работать и в версии с большими возможностями. &lt;/p&gt; &lt;p&gt;Давайте создадим новый проект типа &amp;#171;Silverlight Class Library&amp;#187;. Добавим в данный проект класс &amp;#171;SharedClass&amp;#187;.&lt;/p&gt; &lt;div style="color: Black; background-color: White"&gt;&lt;pre&gt;&lt;span style="color: Blue"&gt;public&lt;/span&gt; &lt;span style="color: Blue"&gt;class&lt;/span&gt; SharedClass
{
    &lt;span style="color: Blue"&gt;private&lt;/span&gt; &lt;span style="color: Blue"&gt;string&lt;/span&gt; _text;
    &lt;span style="color: Blue"&gt;public&lt;/span&gt; &lt;span style="color: Blue"&gt;string&lt;/span&gt; Text
    {
        &lt;span style="color: Blue"&gt;get&lt;/span&gt;
        {
            &lt;span style="color: Blue"&gt;return&lt;/span&gt; _text;
        }
    }
    &lt;span style="color: Blue"&gt;public&lt;/span&gt; SharedClass(&lt;span style="color: Blue"&gt;string&lt;/span&gt; text)
    {
        _text = String.Format(&lt;span&gt;&amp;quot;***{0}***&amp;quot;&lt;/span&gt;, text);
    }
}
&lt;/pre&gt; &lt;/div&gt; &lt;p&gt;Мы можем собрать проект и подключить получившуюся сборку в любое .NET 4.0 или Silverlight приложение.&lt;/p&gt; &lt;img src="http://www.gotdotnet.ru/upload/blog/wizardbox/47f/20.png" border="0"/&gt; &lt;p&gt;Из .NET приложения получится работать только с кодом, использующим классы пяти портируемых сборок. Класс &amp;#171;SharedClass&amp;#187; ничего лишнего не использует, поэтому создадим консольное .NET 4.0 приложение, подключим нужную сборку и протестируем работу класса &amp;#171;SharedClass&amp;#187;.&lt;/p&gt; &lt;div style="color: Black; background-color: White"&gt;&lt;pre&gt;&lt;span style="color: Blue"&gt;static&lt;/span&gt; &lt;span style="color: Blue"&gt;void&lt;/span&gt; Main(&lt;span style="color: Blue"&gt;string&lt;/span&gt;[] args)
{
    SharedClass sharedClass = &lt;span style="color: Blue"&gt;new&lt;/span&gt; SharedClass(&lt;span&gt;&amp;quot;Hello Silverlight!&amp;quot;&lt;/span&gt;);
    Console.WriteLine(sharedClass.Text);
}
&lt;/pre&gt; &lt;/div&gt; &lt;img src="http://www.gotdotnet.ru/upload/blog/wizardbox/21e/23.png" border="0"/&gt; &lt;p&gt;Бывают ситуации, когда возможностей, предлагаемых портируемыми сборками оказывается недостаточно. Тогда стоит воспользоваться более сложными приёмами. Например, в .NET и Silverlight приложениях использовать одни и те же файлы исходного кода. А для кода, зависимого от платформы применять условную компиляцию. Рассмотрим это на примере.&lt;/p&gt; &lt;p&gt;Откроем существующее Silverlight приложение и щёлкнем правой кнопкой мыши на названии решения (&amp;#171;Solution …&amp;#187;) в окне &amp;#171;Solution Explorer&amp;#187;. В контекстном меню выберем Add -&amp;gt; New Solution Folder. Назовём папку &amp;#171;SharedCode&amp;#187; и добавим в неё файл с C# кодом класса &amp;#171;SharedClass&amp;#187;, рассмотренным ранее.&lt;/p&gt; &lt;p&gt;Добавим ссылку на данный файл в проект Silverlight приложения и проект ASP.NET приложения. Для этого в контекстном меню соответствующего проекта нажмём Add -&amp;gt; Existing Item… , выберем файл &amp;#171;SharedClass.cs&amp;#187;, а вместо &amp;#171;Add&amp;#187; выберем &amp;#171;Add As Link&amp;#187;.&lt;/p&gt; &lt;img src="http://www.gotdotnet.ru/upload/blog/wizardbox/f84/21.png" border="0"/&gt; &lt;p&gt;Теперь ссылка на файл присутствует в обоих проектах.&lt;/p&gt; &lt;img src="http://www.gotdotnet.ru/upload/blog/wizardbox/8c8/22.png" border="0"/&gt; &lt;p&gt;Соответственно в обоих проектах можно использовать класс &amp;#171;SharedClass&amp;#187;. Более того, можно добавить в данный класс код, различный для каждой платформы с помощью условной компиляции. В свойствах проекта Silverlight приложения и на вкладке &amp;#171;Build&amp;#187; определён параметр &amp;#171;Conditional compilation symbols&amp;#187;. Его значение равно &amp;#171;SILVERLIGHT&amp;#187;. Данный символ и будет использоваться в условии при компиляции.&lt;/p&gt; &lt;p&gt;Добавим в класс функцию &amp;#171;ShowText&amp;#187;. В случае использования данной функции в Silverlight приложении будет показано сообщение с текстом, а в ASP.NET текст будет выведен на страницу. &lt;/p&gt; &lt;div style="color: Black; background-color: White"&gt;&lt;pre&gt;&lt;span style="color: Blue"&gt;public&lt;/span&gt; &lt;span style="color: Blue"&gt;void&lt;/span&gt; ShowText()
{
&lt;span style="color: Blue"&gt;#if&lt;/span&gt; SILVERLIGHT
    System.Windows.MessageBox.Show(_text);
&lt;span style="color: Blue"&gt;#else&lt;/span&gt;
    System.Web.HttpContext.Current.Response.Write( _text);
&lt;span style="color: Blue"&gt;#endif&lt;/span&gt;
}
&lt;/pre&gt; &lt;/div&gt; &lt;p&gt;Это происходи потому, что данная функция компилируется по-разному для .NET и Silverlight приложений. Более того, уже не важно классы каких сборок используются. Главное, чтобы компиляция происходила корректно. &lt;/p&gt; </description>
      <author>spugachev</author>
      <category>Silverlight</category>
      <category>oob</category>
      <guid isPermaLink="false">urn:bitrix:blog:post:7268</guid>
      <pubDate>Tue, 09 Mar 2010 10:33:09 UT</pubDate>
    </item>
    <item>
      <title>ASP.NET MVC: Http Handler умер, да здравствует FileResult</title>
      <link>http://www.gotdotnet.ru/blogs/sashaeve/7267/</link>
      <description>Если вы разрабатывали приложения в ASP.NET MVC, то достаточно хорошо знакомы с классом ActionResult. &lt;b&gt;ActionResult&lt;/b&gt; самый распространенный тип объектов возвращаемый действием. Когда разрабатывается MVC приложения, большую часть времени вы используете именно ActionResult класс. &lt;br/&gt;
&lt;p&gt;На предыдущей неделе, я работал над&amp;#160;своим open source&amp;#160;проектом &lt;noindex&gt;&lt;a href="http://weblog.codeplex.com/" rel="nofollow"&gt;WeBlog&lt;/a&gt;&lt;/noindex&gt;, я создавал HTTP Handler для обработки изображений. Я начал использовать HTTP Handler для изображений, потому что нуждался в механизме предотвращения &lt;noindex&gt;&lt;a href="http://en.wikipedia.org/wiki/Inline_linking" rel="nofollow"&gt;дополнительной нагрузке(hotlinking)&lt;/a&gt;&lt;/noindex&gt;. Единственным минусом в использовании HTTP Handler - уродливые URL адреса.&lt;/p&gt; &lt;p&gt;&lt;noindex&gt;&lt;a href="http://msug.vn.ua/blogs/dev/archive/2010/03/09/asp-net-mvc-http-handler-fileresult.aspx" rel="nofollow"&gt;Читать полностью&lt;/a&gt;&lt;/noindex&gt; &lt;br/&gt;
&lt;/p&gt; &lt;br/&gt;
</description>
      <author>sashaeve</author>
      <category>ASP.NET MVC</category>
      <guid isPermaLink="false">urn:bitrix:blog:post:7267</guid>
      <pubDate>Tue, 09 Mar 2010 10:06:09 UT</pubDate>
    </item>
    <item>
      <title>Используем ASP.NET 4 определение браузера в ASP.NET 3.5</title>
      <link>http://www.gotdotnet.ru/blogs/sashaeve/7266/</link>
      <description>&lt;p&gt;&lt;i&gt;Перевод статьи &amp;quot;&lt;noindex&gt;&lt;a title="Title of this entry." href="http://stephenwalther.com/blog/archive/2010/03/05/use-asp.net-4-browser-definitions-with-asp.net-3.5.aspx" rel="nofollow"&gt;Use ASP.NET 4 Browser Definitions with ASP.NET 3.5&lt;/a&gt;&lt;/noindex&gt;&amp;quot;&lt;/i&gt;. &lt;br/&gt;
&lt;/p&gt; &lt;p&gt;Мы обновили файлы определения браузера в ASP.NET 4,&amp;#160;теперь они содержат информацию о таких браузерах и устройствах, как Google Chrome и iPhone. Вы можете использовать файлы определения браузера и в более ранних версиях ASP.NET, например в ASP.NET 3.5. Обновленные файлы определения информации и инструкции по установке могут быть найдены &lt;noindex&gt;&lt;a href="http://aspnet.codeplex.com/releases/view/41420" rel="nofollow"&gt;тут.&lt;/a&gt;&lt;/noindex&gt;&lt;/p&gt; &lt;p&gt;Изменения в файлах определения браузера могут вызвать проблемы обратной совместимости, если вы обновляете ASP.NET 3.5 проект до ASP.NET 4. Если у вас возникли такие проблемы, то у вас есть возможность загрузить старый файлы определения браузера в ASP.NET приложение. &lt;br/&gt;
&lt;/p&gt; &lt;p&gt;&lt;noindex&gt;&lt;a href="http://msug.vn.ua/blogs/dev/archive/2010/03/09/asp-net-4-asp-net-3-5.aspx" rel="nofollow"&gt;Читать полностью&lt;/a&gt;&lt;/noindex&gt; &lt;br/&gt;
&lt;/p&gt;</description>
      <author>sashaeve</author>
      <category>ASP.NET 4.0</category>
      <guid isPermaLink="false">urn:bitrix:blog:post:7266</guid>
      <pubDate>Tue, 09 Mar 2010 09:37:39 UT</pubDate>
    </item>
    <item>
      <title>WCF 4.0: упрощенная конфигурация</title>
      <link>http://www.gotdotnet.ru/blogs/natale/7265/</link>
      <description>&lt;p align="justify"&gt;В ближайших нескольких постах предлагаю ознакомиться с новыми возможностями в WCF 4.0, особенно учитывая, что официальный выход .Net 4.0 запланирован на 12 апреля, т.е. осталось набраться терпения еще всего лишь на 35 дней!&lt;/p&gt; &lt;p align="justify"&gt;Начнем мы знакомство с такого улучшения как упрощенная конфигурация.&lt;/p&gt; &lt;p align="justify"&gt;&lt;strong&gt;Endpoint по умолчанию&lt;/strong&gt; – позволяет не прописывать явно в секции &amp;lt;configuration&amp;gt; никаких конечных точек (endpoint).&lt;/p&gt; &lt;p align="justify"&gt;&lt;div class="blog-code-box"&gt;&lt;pre class="csharp"&gt;ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService),
    new Uri(&amp;quot;http://localhost/CalculatorService&amp;quot;), 
    new Uri(&amp;quot;net.tcp://localhost/CalculatorService&amp;quot;));
serviceHost.Open();

Console.WriteLine(&amp;quot;WCF Service is running.&amp;quot;);
Console.WriteLine(&amp;quot;Press &amp;lt;ENTER&amp;gt; to terminate service.&amp;quot;);
Console.ReadLine();

serviceHost.Close();



&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;div class="blog-code-box"&gt;&lt;pre class="xml"&gt;&amp;lt;configuration&amp;gt;
&amp;lt;/configuration&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt; &lt;p align="justify"&gt;WCF 4.0 автоматически сформирует конечную точку (endpoint) и присвоит ей соответствующие параметры, в частности, сопоставит схему http c BasicHttpBinding, а net.tcp - c NetTcpBinding. При это файл web.config не содержит никаких настроек, тэг &amp;lt;service&amp;gt; (и его подчиненные тэги - &amp;lt;endpoint&amp;gt;) в нем отсутствует.&lt;/p&gt; &lt;p align="justify"&gt;&lt;strong&gt;Binding/behaivor по умолчанию (nameless behaivor)&lt;/strong&gt; – позволяют сервису наследовать определенные по умолчанию привязки (binding) и поведения (behaivor), эти привязки и поведения определены на более высоком уровне иерархии (machine.config → rootweb.config → web.config и т.д.), что позволяет так же создавать гибкую иерархическую модель наследования настроек.&lt;/p&gt; &lt;p align="justify"&gt;&lt;div class="blog-code-box"&gt;&lt;pre class="xml"&gt;&amp;lt;system.serviceModel&amp;gt;
    &amp;lt;bindings&amp;gt;
      &amp;lt;basicHttpBinding&amp;gt;
        &amp;lt;binding name=&amp;quot;&amp;quot; maxReceivedMessageSize=&amp;quot;9999999&amp;quot;&amp;gt;
          &amp;lt;readerQuotas maxArrayLength=&amp;quot;9999999&amp;quot;/&amp;gt;
        &amp;lt;/binding&amp;gt;
      &amp;lt;/basicHttpBinding&amp;gt;      
    &amp;lt;/bindings&amp;gt;
    &amp;lt;behaviors&amp;gt;
      &amp;lt;serviceBehaviors&amp;gt;
        &amp;lt;behavior name=&amp;quot;&amp;quot;&amp;gt;
          &amp;lt;serviceMetadata httpGetEnabled=&amp;quot;true&amp;quot;/&amp;gt;
        &amp;lt;/behavior&amp;gt;
      &amp;lt;/serviceBehaviors&amp;gt;
    &amp;lt;/behaviors&amp;gt;
&amp;lt;/system.serviceModel&amp;gt;
&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt; &lt;p align="justify"&gt;Для того чтобы применить поведение (behaivor) по умолчанию необходимо либо оставить его атрибут name незаполненным, либо пропустить его в определении.&lt;/p&gt; &lt;p align="justify"&gt;&lt;strong&gt;ProtocolMapping&lt;/strong&gt; – определяет сопоставление привязки (binding) и схемы/протокола (например, HTTP или NET.TCP ), которое применяется по умолчанию. Если обратиться к первому примеру (Endpoint по умолчанию), то имеено за счет ProtocolMapping для cхемы http использовался BasicHttpBinding. ProtocolMapping поддерживает иерархическое определение, т.е. machine.config → rootweb.config → web.config и т.д.. Это позволяется определить сопоставление как глобально, так и локально.&lt;/p&gt; &lt;p align="justify"&gt;&lt;div class="blog-code-box"&gt;&lt;pre class="xml"&gt;&amp;lt;protocolMapping&amp;gt;
  &amp;lt;add scheme=&amp;quot;http&amp;quot; binding=&amp;quot;basicHttpBinding&amp;quot;/&amp;gt;
  &amp;lt;add scheme=&amp;quot;net.tcp&amp;quot; binding=&amp;quot;netTcpBinding&amp;quot;/&amp;gt;
  &amp;lt;add scheme=&amp;quot;net.pipe&amp;quot; binding=&amp;quot;netNamedPipeBinding&amp;quot;/&amp;gt;
  &amp;lt;add scheme=&amp;quot;net.msmq&amp;quot; binding=&amp;quot;netMsmqBinding&amp;quot;/&amp;gt;
&amp;lt;/protocolMapping&amp;gt;
&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt; &lt;p align="justify"&gt;или&lt;/p&gt; &lt;p align="justify"&gt;&lt;div class="blog-code-box"&gt;&lt;pre class="xml"&gt;&amp;lt;protocolMapping&amp;gt;
  &amp;lt;add scheme=&amp;quot;http&amp;quot; binding=&amp;quot;basicHttpBinding&amp;quot;/&amp;gt;
  &amp;lt;add scheme=&amp;quot;net.tcp&amp;quot; binding=&amp;quot;netTcpBinding&amp;quot;/&amp;gt;
&amp;lt;/protocolMapping&amp;gt;
&amp;lt;protocolMapping&amp;gt;
  &amp;lt;clear scheme=&amp;quot;http&amp;quot; /&amp;gt;
  &amp;lt;add scheme=&amp;quot;http&amp;quot; binding=&amp;quot;customBinding&amp;quot;
   bindingConfiguration=&amp;quot;binaryHttp&amp;quot; /&amp;gt;
&amp;lt;/protocolMapping&amp;gt;
&amp;lt;bindings&amp;gt;
  &amp;lt;customBinding&amp;gt;
    &amp;lt;binding name=&amp;quot;binaryHttp&amp;quot;&amp;gt;
      &amp;lt;binaryMessageEncoding/&amp;gt;
      &amp;lt;httpTransport/&amp;gt;
    &amp;lt;/binding&amp;gt;
  &amp;lt;/customBinding&amp;gt;
&amp;lt;/bindings&amp;gt;
&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;strong&gt;Стандартные endpoint (атрибут kind)&lt;/strong&gt; - позволяет для конечных точек (endpoint) определить набор постоянных значений (значений по умолчанию). Например, конечная точка (endpoint) метаданных всегда реализует контракт IMetadataExchange, тогда как WebHttpEndpoint всегда соответствует определенное поведение (behaivor). Стандартные конечные точки (endpoint) как раз позволяют определить набор значений по умолчанию единожды и далее ссылаться на созданную стандартную конечную точку (endpoint), именованную сущность. Стандартная конечная точка (endpoint) может быть задана на любом уровне иерархии.&lt;/p&gt; &lt;p align="justify"&gt;&lt;div class="blog-code-box"&gt;&lt;pre class="xml"&gt;&amp;lt;services&amp;gt;
  &amp;lt;service&amp;gt;
    &amp;lt;endpoint isSystemEndpoint=&amp;quot;true&amp;quot; kind=&amp;quot;udpDiscoveryEndpoint&amp;quot; /&amp;gt;
  &amp;lt;/service&amp;gt;
&amp;lt;/services&amp;gt;
&amp;lt;standardEndpoints&amp;gt;  
  &amp;lt;udpDiscoveryEndpoint&amp;gt;
     &amp;lt;standardEndpoint multicastAddress=&amp;quot;soap.udp://239.255.255.250:3702&amp;quot; /&amp;gt; 
  &amp;lt;/udpDiscoveryEndpoint&amp;gt;
&amp;lt;/ standardEndpoints &amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;strong&gt;.SVC-less конфигурация&lt;/strong&gt; – позволяет не создавать отдельно файл .svc для сервиса, а определить соответствие между адресом сервиса и контрактом, который он реализует, на логическом уровне (web.config).&lt;/p&gt; &lt;p align="justify"&gt;&lt;img src="http://www.gotdotnet.ru/upload/blog/natale/f13/SVC-less.jpg" border="0"/&gt;&lt;div class="blog-code-box"&gt;&lt;pre class="xml"&gt;&amp;lt;system.serviceModel&amp;gt;
    &amp;lt;serviceHostingEnvironment&amp;gt;      
      &amp;lt;serviceActivations&amp;gt;
        &amp;lt;add relativeAddress=&amp;quot;Calculator.svc&amp;quot; 
         service=&amp;quot;CalculatorService&amp;quot;/&amp;gt;
      &amp;lt;/serviceActivations&amp;gt;
    &amp;lt;/serviceHostingEnvironment&amp;gt;
    &amp;lt;services&amp;gt;
      &amp;lt;service name=&amp;quot;CalculatorService&amp;quot;&amp;gt;
        &amp;lt;endpoint binding=&amp;quot;webHttpBinding&amp;quot;
           contract=&amp;quot;ICalculatorService&amp;quot; /&amp;gt;        
      &amp;lt;/service&amp;gt;
    &amp;lt;/services&amp;gt;
&amp;lt;/system.serviceModel&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt; &lt;p align="justify"&gt;Веб-каст с примерами по обсуждаемым возможностям можно найти на портале &lt;noindex&gt;&lt;a href="http://techdays.ru/" rel="nofollow"&gt;TechDays.ru&lt;/a&gt;&lt;/noindex&gt; - &amp;quot;&lt;noindex&gt;&lt;a href="http://www.techdays.ru/videos/2199.html" rel="nofollow"&gt;WCF 4.0 в примерах. Часть 1.&amp;quot;&lt;/a&gt;&lt;/noindex&gt;.&lt;/p&gt;</description>
      <author>natale</author>
      <category>WCF</category>
      <guid isPermaLink="false">urn:bitrix:blog:post:7265</guid>
      <pubDate>Mon, 08 Mar 2010 19:32:36 UT</pubDate>
    </item>
    <item>
      <title>Создание внебраузерных Silverlight приложений. Часть 1.</title>
      <link>http://www.gotdotnet.ru/blogs/wizardbox/7264/</link>
      <description>&lt;noindex&gt;&lt;a href="http://www.gotdotnet.ru/blogs/wizardbox/7268/" rel="nofollow"&gt;Создание внебраузерных Silverlight приложений. Часть 2.&lt;/a&gt;&lt;/noindex&gt;&lt;h2&gt;&lt;a name="txt1" rel="nofollow"&gt;Введение&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Как Вы, наверное, знаете, Silverlight приложения могут работать не только внутри, но и вне браузера (OOB, Out-of-Browser). При этом внебраузерные Silverlight приложения фактически устанавливаются на компьютер пользователя и запускаются с него, а не по сети, как в случае с традиционными Silverlight приложениями, что позволяет внебраузерным приложениям работать и в условиях отсутствия сетевого соединения. Ярлык такого приложения при установке располагаться в меню &amp;#171;Пуск&amp;#187; и/или на рабочем столе (всё зависит от выбора пользователя), оно отображается в диалоге установки и удаления программ операционной системы наравне с обычными Windows приложениями. Если же внебраузерное приложение ещё и является доверенным (trusted), то оно получает доступ к некоторым ресурсам компьютера за пределами традиционной для Silverlight приложений песочницы (sandbox). Например, доверенное приложение может обращаться к части файловой системы компьютера, а не только к изолированному хранилищу (isolated storage), сетевым ресурсам, не требуя обязательного наличия на сервере файла кросс доменной политики (cross domain policy file), а также доверенное внебраузерное Silverlight приложение может взаимодействовать с COM (Component Object Model) объектами, такими, как, например, объекты автоматизации Microsoft Office. И, конечно же, это далеко не полный список дополнительных возможностей доверенных внебраузерных приложений. &lt;/p&gt; &lt;p&gt;Также стоит сказать, что каждое Silverlight приложение может работать вне браузера, если это явным образом разрешил разработчик, поставив всего одну галочку в свойствах проекта в Visual Studio или написав несколько строк на XML, если Visual Studio по каким-то причинам не используется. Поставить галочку просто, но таким образом нельзя получить всех преимуществ работы вне браузера. Ведь для внебраузерных приложений доступны многие программные интерфейсы (API – Application programming interface), не доступные в браузере. Это и оповещения (notifications), и управление параметрами окна внебраузерного приложения, элементы управления WebBrowser и HTMLBrush, а также широчайшие возможности доверенных внебраузерных приложений, о которых упоминалось выше. &lt;/p&gt; &lt;p&gt;&lt;img src="http://www.gotdotnet.ru/upload/blog/wizardbox/729/01.png" border="0"/&gt; &lt;br/&gt;
&lt;i&gt;Silverlight клиент для Facebook&lt;/i&gt;&lt;/p&gt; &lt;p&gt;Многие web разработчики не любят создавать настольные приложения, в том числе и по причине трудности их обновления. Действительно, если мы имеем web приложение, то в большинстве случаев все пользователи работают с последней его версией. Более того, версия у всех одна и та же. В случае же с настольными приложениями мы получаем трудности не только с их обновлением, но ещё и с их установкой. &lt;/p&gt; &lt;p&gt;Внебраузерные Silverlight приложения – это попытка привнести достоинства web приложений в мир настольных. Silverlight практически полностью берёт на себя заботы по обновлению внебраузерных приложений, и во многих случаях разработчику задумываться об этом почти не надо. Требуется написать буквально одну строчку кода, а дальше всё происходит автоматически. В дополнение к обновлению, установку и удаление внебраузерных приложений также полностью берёт на себя платформа. &lt;/p&gt; &lt;p&gt;Надо отметить, что любые Silverlight приложения, в том числе внебраузерные, одинаково хорошо работают как на Windows, так и на MacOS X. При этом обе платформы официально поддерживаются компанией Microsoft и все возможности внебраузерных приложений доступны на каждой из них. Единственной зависимой от платформы возможностью является взаимодействие с COM объектами, которые присутствуют только в Windows. &lt;/p&gt; &lt;p&gt;Кроме того существует проект Moonlight, который обеспечивает работу Silverlight приложений на операционной системе Linux. Это проект с открытым исходным кодом, разрабатываемый компанией Novell при некоторой поддержке со стороны Microsoft. Наблюдается небольшое отставание Moonlight от официальной версии Silverlight, поэтому, если Вы хотите, чтобы Ваши приложения работали и на Linux тоже, не забудьте их протестировать на совместимость с Moonlight. &lt;/p&gt; &lt;h2&gt;&lt;a name="txt2" rel="nofollow"&gt;Создание внебраузерного приложения&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Давайте создадим простое внебраузерное приложение (все примеры далее используют Silverlight четвёртой версии, если не оговаривается иное). &lt;/p&gt; &lt;p&gt;Итак, нам понадобится Visual Studio 2010. Запустим её и создадим новый проект. &lt;/p&gt; &lt;ul&gt;&lt;li&gt;Выберем File -&amp;gt; New -&amp;gt; Project -&amp;gt; Visual C# -&amp;gt; Silverlight.&lt;/li&gt;
 &lt;li&gt;Тип проекта &amp;#171;Silverlight Application&amp;#187;.&lt;/li&gt;
 &lt;li&gt;Назовём проект &amp;#171;OOBSilverlightApplication&amp;#187;.&lt;/li&gt;
 &lt;li&gt;Нажмём на кнопку &amp;#171;OK&amp;#187; и в открывшемся диалоге &amp;#171;New Silverlight Application&amp;#187; оставим все параметры без изменений.&lt;/li&gt;
 &lt;li&gt;Очередной раз, нажав на кнопку &amp;#171;OK&amp;#187;, мы создадим проект Silverlight приложения и проект web приложения &amp;#171;OOBSilverlightApplication.Web&amp;#187;, которое собственно предназначено для хостинга Silverlight приложения. Создавать web приложение имеет смысл практически всегда, кроме случаев, когда Вы не разрабатываете серверную часть для Вашего внебраузерного Silverlight приложения, или внебраузерное приложение взаимодействует только с уже существующими сторонними сервисами.&lt;/li&gt;
 &lt;/ul&gt; &lt;p&gt;Для многих может показаться странным то, что в Visual Studio нет отдельного типа проекта внебраузерного Silverlight приложения. На самом деле это связано с тем, что Silverlight приложение в принципе не может быть только внебраузерным. Оно всегда в первый раз запускается в браузере. А уже из браузера пользователь может установить приложение себе на компьютер. &lt;/p&gt; &lt;p&gt;Интерфейс приложения в браузере и вне его может быть практически одинаковым, но бывают и ситуации (часто такое происходит с доверенными внебраузерными приложениями), когда в браузере отображается только одна кнопка &amp;#171;установить&amp;#187; и, возможно, некоторое текстовое описание, а вся функциональность доступна исключительно вне браузера. При этом физически приложение представляет собой единственный .xap файл. Разработчик может определить окружение, в котором происходит запуск и в связи с этим коренным образом изменить интерфейс и поведение приложения.&lt;/p&gt; &lt;p&gt;Ну что же, вернёмся в Visual Studio. Давайте изменим цвет фона страницы &amp;#171;MainPage.xaml&amp;#187; для того чтобы наше приложение можно было легко идентифицировать. Сделаем это, заменив в строке &amp;lt;Grid x:Name=&amp;quot;LayoutRoot&amp;quot; Background=&amp;quot;White&amp;quot;&amp;gt; значение цвета фона с &amp;#171;White&amp;#187; на &amp;#171;AliceBlue&amp;#187;. &lt;/p&gt; &lt;p&gt;Также добавим в менеджер размещения (layout manager) Grid с именем &amp;#171;LayoutRoot&amp;#187;, чей фон мы только что меняли, кнопку, при нажатии на которую пользователь сможет установить приложение. &lt;/p&gt; &lt;div style="color: Black; background-color: White"&gt;&lt;pre&gt;&lt;span style="color: Blue"&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;Button&lt;/span&gt; &lt;span style="color: Red"&gt;x:Name&lt;/span&gt;&lt;span style="color: Blue"&gt;=&lt;/span&gt;&lt;span style="color: Black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: Blue"&gt;btnInstall&lt;/span&gt;&lt;span style="color: Black"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color: Red"&gt;Content&lt;/span&gt;&lt;span style="color: Blue"&gt;=&lt;/span&gt;&lt;span style="color: Black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: Blue"&gt;Установить приложение&lt;/span&gt;&lt;span style="color: Black"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color: Red"&gt;Width&lt;/span&gt;&lt;span style="color: Blue"&gt;=&lt;/span&gt;&lt;span style="color: Black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: Blue"&gt;150&lt;/span&gt;&lt;span style="color: Black"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color: Red"&gt;Height&lt;/span&gt;&lt;span style="color: Blue"&gt;=&lt;/span&gt;&lt;span style="color: Black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: Blue"&gt;50&lt;/span&gt;&lt;span style="color: Black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: Blue"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt; &lt;/div&gt; &lt;p&gt;Двойным щелчком по кнопке в визуальном дизайнере создадим обработчик события нажатия данной кнопки. В обработчике напишем код, вызывающий диалог установки приложения в случае, если оно ещё не было установлено.&lt;/p&gt; &lt;div style="color: Black; background-color: White"&gt;&lt;pre&gt;&lt;span style="color: Blue"&gt;private&lt;/span&gt; &lt;span style="color: Blue"&gt;void&lt;/span&gt; btnInstall_Click(&lt;span style="color: Blue"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)
{
    &lt;span style="color: Blue"&gt;if&lt;/span&gt; (Application.Current.InstallState == InstallState.NotInstalled)
    {
        Application.Current.Install();
    }
}
&lt;/pre&gt; &lt;/div&gt; &lt;p&gt;Учтите только, что с помощью значения свойства Application.Current.InstallState нельзя проверить запущено приложение в браузере или вне его. Для этого существует другое свойство Application.Current.IsRunningOutOfBrowser. Используя его, поменяем цвет фона нашего приложения на оранжевый, в случае, если приложение работает вне браузера. Сделать это проще всего в конструкторе страницы MainPage.&lt;/p&gt; &lt;div style="color: Black; background-color: White"&gt;&lt;pre&gt;&lt;span style="color: Blue"&gt;public&lt;/span&gt; MainPage()
{
    InitializeComponent();

    &lt;span style="color: Blue"&gt;if&lt;/span&gt; (Application.Current.IsRunningOutOfBrowser)
    {
        LayoutRoot.Background = &lt;span style="color: Blue"&gt;new&lt;/span&gt; SolidColorBrush(Colors.Orange);
    }
}
&lt;/pre&gt;&lt;p&gt;Кроме того, добавим в конструктор страницы MainPage код, который при изменении состояния установки приложения будет показывать сообщение об этом.&lt;/p&gt;&lt;div style="color: Black; background-color: White"&gt;&lt;pre&gt;Application.Current.InstallStateChanged += (sender, e) =&amp;gt; 
{ MessageBox.Show(Application.Current.InstallState.ToString()); };
&lt;/pre&gt; &lt;/div&gt; &lt;p&gt;Сейчас мы можем запустить наше приложение, но при нажатии на кнопку, получим исключение (exception) &amp;#171;Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))&amp;#187;. Это происходит, так как мы не указали, что приложение вообще может работать вне браузера. &lt;/p&gt; &lt;ol&gt;&lt;li&gt;Для того чтобы оно могло так работать, в контекстном меню проекта &amp;#171;OOBSilverlightApplication&amp;#187; в окне &amp;#171;Solution Explorer&amp;#187; выберем пункт &amp;#171;Properties&amp;#187;.&lt;/li&gt;
 &lt;li&gt;В появившемся диалоге на первой вкладке (&amp;#171;Silverlight&amp;#187;) установим галочку &amp;#171;Enable running application out of browser&amp;#187;. В принципе, для корректной работы вне браузера больше ничего не требуется. Однако всегда следует задать базовые настройки внебраузерного приложения. &lt;br/&gt;
&lt;img src="http://www.gotdotnet.ru/upload/blog/wizardbox/d39/02.png" border="0"/&gt;&lt;/li&gt;
 &lt;li&gt;Нажмём на кнопку &amp;#171;Out-of-Browser Settings…&amp;#187; и в появившемся диалоговом окне установим &lt;ul&gt;&lt;li&gt;Заголовок окна внебраузерного приложения (Window Title): &amp;#171;Тестовое приложение&amp;#187;.&lt;/li&gt;
 &lt;li&gt;Текст ярлыка внебраузерного приложения (Shortcut name): &amp;#171;Тест&amp;#187;.&lt;/li&gt;
 &lt;li&gt;Описание приложения (Application Description): &amp;#171;Описание&amp;#187;.&lt;/li&gt;
 &lt;/ul&gt; &lt;br/&gt;
&lt;img src="http://www.gotdotnet.ru/upload/blog/wizardbox/09e/03.png" border="0"/&gt; &lt;/li&gt;
 &lt;/ol&gt; &lt;p&gt;Если Вы хотите, чтобы Ваше внебраузерное приложение было доверенным, установите галочку &amp;#171;Require elevated trust when running outside the browser&amp;#187;. При этом пользователю будет показан другой диалог установки, предупреждающей о том, что приложение имеет доступ к ресурсам компьютера и может нанести ему вред.&lt;/p&gt; &lt;p&gt;Диалоговое окно &amp;#171;Out-of-Browser Settings&amp;#187; на самом деле редактирует файл &amp;#171;OutOfBrowserSettings.xml&amp;#187;, расположенный в папке &amp;#171;Properties&amp;#187; проекта Silverlight приложения и создаваемый при первой установке галочки &amp;#171;Enable running application out of browser&amp;#187;. После наших изменений в настройках файл &amp;#171;OutOfBrowserSettings.xml&amp;#187; выглядит следующим образом.&lt;/p&gt; &lt;div style="color: Black; background-color: White"&gt;&lt;pre&gt;&lt;span style="color: Blue"&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;OutOfBrowserSettings&lt;/span&gt; &lt;span style="color: Red"&gt;ShortName&lt;/span&gt;&lt;span style="color: Blue"&gt;=&lt;/span&gt;&lt;span style="color: Black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: Blue"&gt;Тест&lt;/span&gt;&lt;span style="color: Black"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color: Red"&gt;EnableGPUAcceleration&lt;/span&gt;&lt;span style="color: Blue"&gt;=&lt;/span&gt;&lt;span style="color: Black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: Blue"&gt;False&lt;/span&gt;&lt;span style="color: Black"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color: Red"&gt;ShowInstallMenuItem&lt;/span&gt;&lt;span style="color: Blue"&gt;=&lt;/span&gt;&lt;span style="color: Black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: Blue"&gt;True&lt;/span&gt;&lt;span style="color: Black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: Blue"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color: Blue"&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;OutOfBrowserSettings.Blurb&lt;/span&gt;&lt;span style="color: Blue"&gt;&amp;gt;&lt;/span&gt;Описание&lt;span style="color: Blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;OutOfBrowserSettings.Blurb&lt;/span&gt;&lt;span style="color: Blue"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color: Blue"&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;OutOfBrowserSettings.WindowSettings&lt;/span&gt;&lt;span style="color: Blue"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: Blue"&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;WindowSettings&lt;/span&gt; &lt;span style="color: Red"&gt;Title&lt;/span&gt;&lt;span style="color: Blue"&gt;=&lt;/span&gt;&lt;span style="color: Black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: Blue"&gt;Тестовое приложение&lt;/span&gt;&lt;span style="color: Black"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color: Blue"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span style="color: Blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;OutOfBrowserSettings.WindowSettings&lt;/span&gt;&lt;span style="color: Blue"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color: Blue"&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;OutOfBrowserSettings.SecuritySettings&lt;/span&gt;&lt;span style="color: Blue"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: Blue"&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;SecuritySettings&lt;/span&gt; &lt;span style="color: Red"&gt;ElevatedPermissions&lt;/span&gt;&lt;span style="color: Blue"&gt;=&lt;/span&gt;&lt;span style="color: Black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: Blue"&gt;NotRequired&lt;/span&gt;&lt;span style="color: Black"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color: Blue"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span style="color: Blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;OutOfBrowserSettings.SecuritySettings&lt;/span&gt;&lt;span style="color: Blue"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color: Blue"&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;OutOfBrowserSettings.Icons&lt;/span&gt; &lt;span style="color: Blue"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color: Blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;OutOfBrowserSettings&lt;/span&gt;&lt;span style="color: Blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt; &lt;/div&gt; &lt;p&gt;Теперь давайте запустим приложение. Для его установки нажмите на кнопку &amp;#171;Установить приложение&amp;#187; или кликните правой кнопкой мыши в любом его месте и выберете в контекстном меню пункт &amp;#171;Install Тест onto this computer…&amp;#187;. Благодаря данному пункту меню пользователь может установить приложение даже, если мы удалим созданную нами кнопку. Естественно и сам пункт меню можно скрыть, сняв галочку &amp;#171;Show install menu&amp;#187; в окне &amp;#171;Out-of-Browser Settings&amp;#187;.&lt;/p&gt; &lt;img src="http://www.gotdotnet.ru/upload/blog/wizardbox/e0b/04.png" border="0"/&gt; &lt;p&gt;После нажатия на кнопку или соответствующий пункт меню перед нами появится диалоговое окно установки приложения. В данном случае иконка приложения стандартная, так как свою иконку мы не задали. &lt;/p&gt; &lt;img src="http://www.gotdotnet.ru/upload/blog/wizardbox/592/05.png" border="0"/&gt; &lt;p&gt;Если бы производилась установка доверенного приложения, то диалоговое окно выглядело бы по-другому.&lt;/p&gt; &lt;img src="http://www.gotdotnet.ru/upload/blog/wizardbox/089/05a.png" border="0"/&gt; &lt;p&gt;Выберем опцию добавления ярлыка приложения на рабочий стол (Desktop) и нажмём на кнопку &amp;#171;OK&amp;#187; или &amp;#171;Install&amp;#187; в зависимости от типа приложения. Отобразится несколько сообщений о смене состояния установки, что происходит благодаря написанному нами коду, и приложение запустится вне браузера. Весь процесс установки завершается практически мгновенно.&lt;/p&gt; &lt;img src="http://www.gotdotnet.ru/upload/blog/wizardbox/1cc/06.png" border="0"/&gt; &lt;p&gt;Как Вы видите, цвет фона вне браузера отличается от цвета фона в браузере, как мы того и хотели. Ярлык нашего приложения доступен в меню Пуск.&lt;/p&gt; &lt;img src="http://www.gotdotnet.ru/upload/blog/wizardbox/09d/07.png" border="0"/&gt; &lt;p&gt;А также на рабочем столе.&lt;/p&gt; &lt;img src="http://www.gotdotnet.ru/upload/blog/wizardbox/eca/08.png" border="0"/&gt; &lt;p&gt;Кроме того оно отображается в диалоге установки и удаления программ операционной системы.&lt;/p&gt; &lt;img src="http://www.gotdotnet.ru/upload/blog/wizardbox/2ec/09.png" border="0"/&gt; &lt;p&gt;Вообще, если говорить про удаление внебраузерного Silverlight приложения, то пользоваться диалогом установки и удаления операционной системы не обязательно. Когда приложение установлено, то и в браузере и вне его в контекстном меню Сильверлайта вместо пункта &amp;#171;Install Тест onto this computer…&amp;#187; отображается пункт &amp;#171;Remove this application…&amp;#187;. Удаление, как и установка, происходит почти мгновенно.&lt;/p&gt; &lt;h2&gt;&lt;a name="txt3" rel="nofollow"&gt;Заключение&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Как Вы видите создавать и использовать внебраузерные Silverlight приложения максимально просто. Надо отметить только, что в случае MacOS X ярлыки внебраузерных приложений располагаются в других местах, а диалоги выглядят в соответствии с оформлением операционной системы. Сами же приложения ведут себя и работают точно также.&lt;/p&gt; &lt;p&gt;Разработчикам стоит учитывать, что системные администраторы с помощью групповых политик могут запретить установку и/или запуск доверенных внебраузерных приложений. Это может быть оправдано с точки зрения политики безопасности организации. Поэтому не стоит требовать расширенных прав &amp;#171;на всякий случай&amp;#187;. Если Вам достаточно возможностей обычных внебраузерных приложений – создавайте обычные, а не доверенные внебраузерные приложения. &lt;/p&gt;&lt;/div&gt;</description>
      <author>spugachev</author>
      <category>silverlight</category>
      <category>oob</category>
      <guid isPermaLink="false">urn:bitrix:blog:post:7264</guid>
      <pubDate>Mon, 08 Mar 2010 11:39:45 UT</pubDate>
    </item>
    <item>
      <title>.NET 4.0 : Collectible assemblies</title>
      <link>http://www.gotdotnet.ru/blogs/v2notes/7278/</link>
      <description>&lt;div&gt;&lt;noindex&gt;&lt;a href="http://v2matveev.blogspot.com/2010/03/net-40-collectible-assemblies.html" rel="nofollow"&gt;.NET 4.0 : Collectible assemblies&lt;/a&gt;&lt;/noindex&gt; &lt;br/&gt;
&lt;noindex&gt;&lt;a href="http://feeds.feedburner.com/~ff/OccasionalNotes?a=KxqNMXfAjEg:2CAsjqzro9Y:yIl2AUoC8zA" rel="nofollow"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OccasionalNotes?d=yIl2AUoC8zA" border="0"/&gt;&lt;/a&gt;&lt;/noindex&gt; &lt;noindex&gt;&lt;a href="http://feeds.feedburner.com/~ff/OccasionalNotes?a=KxqNMXfAjEg:2CAsjqzro9Y:F7zBnMyn0Lo" rel="nofollow"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OccasionalNotes?i=KxqNMXfAjEg:2CAsjqzro9Y:F7zBnMyn0Lo" border="0"/&gt;&lt;/a&gt;&lt;/noindex&gt; &lt;noindex&gt;&lt;a href="http://feeds.feedburner.com/~ff/OccasionalNotes?a=KxqNMXfAjEg:2CAsjqzro9Y:V_sGLiPBpWU" rel="nofollow"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OccasionalNotes?i=KxqNMXfAjEg:2CAsjqzro9Y:V_sGLiPBpWU" border="0"/&gt;&lt;/a&gt;&lt;/noindex&gt; &lt;/div&gt; &lt;img src="http://feeds.feedburner.com/~r/OccasionalNotes/~4/KxqNMXfAjEg" width="1px" height="1px" border="0"/&gt;</description>
      <author>desco</author>
      <category>VS 2010</category>
      <category>System.Reflection.Emit</category>
      <category>SRE</category>
      <category>.NET 4.0</category>
      <category>C#</category>
      <guid>http://feedproxy.google.com/~r/OccasionalNotes/~3/KxqNMXfAjEg/net-40-collectible-assemblies.html</guid>
      <pubDate>Sun, 07 Mar 2010 18:21:00 UT</pubDate>
    </item>
    <item>
      <title>Проблемы с C# Zen Coding</title>
      <link>http://www.gotdotnet.ru/blogs/nesteruk/7237/</link>
      <description>Сегодня я написал и закомитил расширение C#Zen для Visual Studio 2008. В итоге было решено использовать = вместо : в качестве разделителя. Но я столкнулся с проблемой, которую не ожидал: IntelliSense. Чтобы быстро сделать класс, нужно иметь возможность быстро печатать c=name, но если сделать это в Студии, вы получите char=namespace, потому что IntelliSense решит вам помочь [...]&lt;img src="http://stats.wordpress.com/b.gif?host=nesteruk.wordpress.com&amp;amp;blog=373435&amp;amp;post=280&amp;amp;subd=nesteruk&amp;amp;ref=&amp;amp;feed=1" border="0"/&gt;</description>
      <author>mezastel</author>
      <category>C#</category>
      <guid>http://nesteruk.wordpress.com/2010/03/07/%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d1%8b-%d1%81-c-zen-coding/</guid>
      <pubDate>Sun, 07 Mar 2010 07:21:06 UT</pubDate>
    </item>
    <item>
      <title>Использование файлов описания браузеров в ASP.NET 4.0</title>
      <link>http://www.gotdotnet.ru/blogs/sashaeve/7262/</link>
      <description>&lt;p&gt;В ASP.NET 4.0 добавлена информация о современных браузерах и устройствах. &lt;/p&gt; &lt;p&gt;Полный список браузеров и устройств выглядит таким образом:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Microsoft Internet Explorer 6, 7, 8 &lt;br/&gt;
&lt;/li&gt;
 &lt;li&gt;Google Chrome &lt;/li&gt;
 &lt;li&gt;Mozilla Firefox 3, 3.5&lt;/li&gt;
 &lt;li&gt;Apple Safari 3, 4&lt;/li&gt;
 &lt;li&gt;Opera 8, 9, 10&lt;/li&gt;
 &lt;li&gt;iPhone, IPod&lt;/li&gt;
 &lt;li&gt;Blackberry&lt;/li&gt;
 &lt;li&gt;Windows Mobile &amp;#160;&lt;/li&gt;
 &lt;/ul&gt; &lt;p&gt;Для увеличения производительности информация о старых браузерах и устройствах была удалена. Например, ASP.NET 4.0 не поддерживает информацию о Netscape Navigator и Internet Explorer версий ниже 6.&lt;/p&gt; &lt;h3&gt;Файлы описания браузеров и их возможностей (Browser Definition Files and Browser Capabilities)&lt;/h3&gt; &lt;p&gt;ASP.NET хранит информацию в файлах, которые называются &lt;i&gt;файлами описания браузера&lt;/i&gt;. Эти файлы являются обыкновенными XML файлами, которые легко можно просмотреть в Notepad.&lt;/p&gt; &lt;p&gt;В ASP.NET 3.5 эти файлы размещались в следующей директории:&lt;/p&gt; &lt;p&gt;&lt;i&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; \Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\Browsers&lt;/i&gt;&lt;/p&gt; &lt;p&gt;В ASP.NET 4.0 файлы находятся в директории:&lt;/p&gt; &lt;p&gt;&lt;i&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/i&gt;&lt;i&gt;\Windows\Microsoft.NET\Framework\v4.xxx\CONFIG\Browsers&lt;/i&gt;&lt;/p&gt; &lt;p&gt;Каждый файл описания браузера содержит набор свойств. Например, файл firefox.browser содержит информацию о Firefox 3 и Firefox 3.5. &lt;/p&gt; &lt;p&gt;&lt;i&gt;Дополнительную информацию о структуре файлов описания браузера можно получить по ссылке &lt;noindex&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms228122.aspx" rel="nofollow"&gt;http://msdn.microsoft.com/en-us/library/ms228122.aspx&lt;/a&gt;&lt;/noindex&gt;.&lt;/i&gt;&lt;/p&gt; &lt;p&gt;Объект HttpBrowserCapabilities, который можно получить из свойства Request.Browser использует файлы описания для определения браузера клиента и возвращает информацию о его возможностях. Например, с помощью свойства Request.Browser.Cookies можно проверить поддерживает ли текущий браузер куки или нет.&lt;/p&gt; &lt;p&gt;Такие элементы управления, как Menu и TreeView используют информацию о возможностях браузера для корректного отображения разметки. Например, полученный HTML код для TreeView в браузерах, которые поддерживают JavaScript, будет существенно отличаться от кода, полученного для браузеров, не поддерживающим JavaScript.&lt;/p&gt; &lt;noindex&gt;&lt;a href="http://msug.vn.ua/blogs/akrakovetsky/archive/2010/03/06/changes-in-browser-capabilities-with-asp-net-4.aspx" rel="nofollow"&gt;Читать полностью&lt;/a&gt;&lt;/noindex&gt; &lt;br/&gt;
</description>
      <author>sashaeve</author>
      <category>Browser</category>
      <category>ASP.NET 4.0</category>
      <guid>http://feedproxy.google.com/~r/MicrosoftUserGroupVinnitsya/~3/D9lgrrUhzTQ/changes-in-browser-capabilities-with-asp-net-4.aspx</guid>
      <pubDate>Sat, 06 Mar 2010 11:31:00 UT</pubDate>
    </item>
    <item>
      <title>Отчет NSS Labs о уровне защищенности браузеров на 1 квартал 2010 года</title>
      <link>http://www.gotdotnet.ru/blogs/XaocCPS/7234/</link>
      <description>&lt;p&gt;Независимая лаборатория &lt;noindex&gt;&lt;a href="http://nsslabs.com/index.php" rel="nofollow"&gt;NSS Labs&lt;/a&gt;&lt;/noindex&gt; провела очередное тестирование браузеров на уровень их защищенности от угроз т.н. социальных malware. Считается, что этот вид атак стал самым распространенным и опасным в интернете. Обычно такие угрозы представляют собой URL на опасные приложения, которые размещены в различных социальных сетях или сайтах сомнительного происхождения. Результаты теста, совмещенные с результатами предыдущих тестов, ниже:&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.gotdotnet.ru/upload/blog/XaocCPS/891/nss_627a5801-6372-40bc-bfa4-20fce8e2a5b1.png" alt="nss" title="nss" width="660px" height="450px" border="0" style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px"/&gt; &lt;/p&gt; &lt;p&gt;Полный отчет с описанием всего механизма тестирования &lt;noindex&gt;&lt;a href="http://nsslabs.com/browser-security" rel="nofollow"&gt;доступен здесь&lt;/a&gt;&lt;/noindex&gt;. Там же расположен сокращенный отчет с одними только выводами.&lt;/p&gt;</description>
      <author>XaocCPS</author>
      <category>браузеры</category>
      <category>безопасность</category>
      <guid isPermaLink="false">urn:bitrix:blog:post:7234</guid>
      <pubDate>Sat, 06 Mar 2010 06:23:45 UT</pubDate>
    </item>
    <item>
      <title>.NET Framework - Application Development Foundation [Лекция 2]</title>
      <link>http://www.gotdotnet.ru/blogs/ineta/7232/</link>
      <description>&lt;p&gt;&lt;strong&gt;1. Лекция. Работа с типами данных в &lt;span&gt;&lt;strong&gt;&lt;span&gt;&lt;strong&gt;&lt;span&gt;.NET Framework 3.5.&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;1.1. Необходимость введения типов. Ссылочные и значимые типы.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;1.2. Числовые типы и типы с плавающей точкой. Строковые типы. Перечисления.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;1.3. Массивы.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;1.4. Работа с составными типами. Структуры.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;1.5. Подведение итогов.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;&lt;strong&gt;&lt;span&gt;2. Практикум.&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;noindex&gt;&lt;a href="http://miee.ineta.ru/events/eventInfo.aspx?Id=11dfa166-eb37-4b51-84d9-603326055f2d" rel="nofollow"&gt;Подробнее о мероприятии&lt;/a&gt;&lt;/noindex&gt;&lt;/p&gt;</description>
      <author>Ineta.Ru</author>
      <category>events</category>
      <guid>http://miee.ineta.ru/events/eventInfo.aspx?Id=11dfa166-eb37-4b51-84d9-603326055f2d</guid>
      <pubDate>Fri, 05 Mar 2010 19:38:05 UT</pubDate>
    </item>
    <item>
      <title>Работа на двух экранах - повышение производительности или рассредоточение внимания?</title>
      <link>http://www.gotdotnet.ru/blogs/sos/7231/</link>
      <description>&lt;p&gt;Недавно на работе мне достался 17-дюймовый монитор, который стоял на моём рабочем столе без дела. Я решил попробовать и подключить его к ноутбуку, и поскольку как основной экран он был маловат, то естественным образом я стал использовать его как расширение рабочего стола. Для начала второй экран показывал красивую фотографию, т.е. выполнял роль большой фоторамки, но постепенно мне удалось адаптировать стиль работы к двум экранам, примерно следующим образом.&lt;/p&gt; &lt;p&gt;&lt;noindex&gt;&lt;a href="http://www.gotdotnet.ru/upload/blog/sos/18e/image_8.png" rel="nofollow"&gt;&lt;img src="http://www.gotdotnet.ru/upload/blog/sos/f5a/image_thumb_3.png" alt="image" title="image" width="550px" height="218px" border="0" style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: block; FLOAT: none; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: auto; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: auto"/&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;/p&gt; &lt;p&gt;В качестве основного экрана я использую ноутбук – на нём открыто то, с чем я работаю больше всего – Outlook, веб-браузер (IE8), проводник и иногда Far Commander (да-да, я из того поколения людей, которые застали “командира нортона”, и с тех пор предпочитают пользоваться подобными инструментами для файл-менеджмента). Второй экран повёрнут слегка боком (см. картинку ниже), и он выполняет в первую очередь &lt;strong&gt;коммуникационно-вдохновляющую функцию&lt;/strong&gt;: на нём открыт твиттер (&lt;noindex&gt;&lt;a href="http://seesmic.com/seesmic_desktop/windows/" rel="nofollow"&gt;Seesmic for Windows&lt;/a&gt;&lt;/noindex&gt;), гаджет с фотографиями, Office Communicator (который после внедрения у нас Enterprise Voice выполняет и функцию телефона – отсюда и почти всегда надетые наушники с микрофоном) и &lt;noindex&gt;&lt;a href="http://download.live.com/Messenger" rel="nofollow"&gt;Windows Live Messenger&lt;/a&gt;&lt;/noindex&gt;. &lt;/p&gt; &lt;p&gt;Помимо коммуникаций, второй экран используется для &lt;strong&gt;концентрации локального фокуса внимания&lt;/strong&gt;. Например, если мне надо сосредоточиться на написании одного письма – оно перетаскивается на второй экран (закрывая собою твиттер). Теперь, даже если меня отвлекают на какие-то срочные дела и я начинаю открывать много окон и папок, всегла легко вернуться к “главному” делу – глаз сам тянется к твиттеру, и находит соответствующее окно. А когда главное дело доделывается и окно закрывается – сразу хочется написать об этом в открывшемся твиттере!&lt;/p&gt; &lt;p align="center"&gt;&lt;noindex&gt;&lt;a href="http://www.gotdotnet.ru/upload/blog/sos/dab/P1050197.jpg" rel="nofollow"&gt;&lt;img src="http://www.gotdotnet.ru/upload/blog/sos/c96/P1050197_thumb.jpg" alt="P1050197" title="P1050197" width="285px" height="215px" border="0" style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px"/&gt;&lt;/a&gt;&lt;/noindex&gt; &lt;noindex&gt;&lt;a href="http://www.gotdotnet.ru/upload/blog/sos/e1e/P1050196.jpg" rel="nofollow"&gt;&lt;img src="http://www.gotdotnet.ru/upload/blog/sos/576/P1050196_thumb.jpg" alt="P1050196" title="P1050196" width="284px" height="214px" border="0" style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px"/&gt;&lt;/a&gt;&lt;/noindex&gt; &lt;/p&gt; &lt;p&gt;Такое неравнозначное использование экранов отчасти вызвано тем, что экраны разного размера, и глаз испытывает некоторый дискомфорт при переходе от одного к другому. В случае, когда используются одинаковые мониторы, можно рассматривать расширенный десктоп просто как большой рабочий стол – в этом случае наверное может сложиться другой стиль работы. Однако поскольку для всех владельцев ноутбуков + внешних мониторов такая ситуация с неравнозначностью экранов будет нормой, мне показалось полезным описать тут свой опыт по эффективному использованию такой конфигурации. Оказывается, не я один в Майкрософт использую такую конфигурацию – вот и Яна Фролова, моя коллега, тоже! А другие используют просто монитор в качестве основного, не используя ноутбучную панель вообще.&lt;/p&gt;  &lt;p&gt;Друзья, а вы имели опыт работы в многомониторной конфигурации? &lt;strong&gt;Поделитесь опытом&lt;/strong&gt;, как вы используете в этом случае рабочее пространство! Пользователи ноутбуков – как вы думаете, внешний монитор помогает работать более эффективно, или скорее рассеивает внимание? А есть ли кто-то, кто работал с тремя мониторами? А с четырьмя? Буду признателен за ваш опыт – уверен, нам всем есть чему поучиться друг у друга!&lt;/p&gt;</description>
      <author>sos</author>
      <category>lifestyle</category>
      <category>student</category>
      <guid isPermaLink="false">urn:bitrix:blog:post:7231</guid>
      <pubDate>Fri, 05 Mar 2010 18:53:05 UT</pubDate>
    </item>
    <item>
      <title>Создаем гаджет для Windows 7</title>
      <link>http://www.gotdotnet.ru/blogs/sashaeve/7261/</link>
      <description>&lt;p&gt;Гаджет - это &lt;span&gt;&lt;span&gt; оригинальное, нестандартное техническое приспособление. Сегодня поговорим, как создать гаджет для Windows 7. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;В качестве примера реализуем гаджет, который будет отображать последние записи из блогов нашего сообщества. Итак, приступим. &lt;/p&gt; &lt;p&gt;Минимальный гаджет должен состоять из двух файлов - gadget.xml (мета информация) и main.html (собственно, гаджет).&lt;/p&gt; &lt;h3&gt;gadget.xml&lt;/h3&gt; &lt;p&gt;Вся мета информация о нашем гаджете должна храниться в файле с названием gadget.xml:&lt;/p&gt; &lt;p&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt; &lt;br/&gt;
&amp;lt;gadget&amp;gt; &lt;br/&gt;
&amp;lt;name&amp;gt;Microsoft User Group Винница&amp;lt;/name&amp;gt; &lt;br/&gt;
&amp;lt;namespace&amp;gt;msug.vinnitsya.gadget&amp;lt;/namespace&amp;gt; &lt;br/&gt;
&amp;lt;version&amp;gt;1.0.1&amp;lt;/version&amp;gt; &lt;br/&gt;
&amp;lt;author name=&amp;quot;Microsoft User Group Винница&amp;quot;&amp;gt; &lt;br/&gt;
&amp;lt;info url=&amp;quot;http://msug.vn.ua/&amp;quot; text=&amp;quot;Официальный сайт Microsoft User Group Винница&amp;quot; /&amp;gt; &lt;br/&gt;
&amp;lt;logo src=&amp;quot;logo.png&amp;quot; /&amp;gt; &lt;br/&gt;
&amp;lt;/author&amp;gt; &lt;br/&gt;
&amp;lt;copyright&amp;gt;&amp;amp;#169; Microsoft User Group Винница&amp;lt;/copyright&amp;gt; &lt;br/&gt;
&amp;lt;description&amp;gt;Последние сообщения из блогов сайта Microsoft User Group Винница.&amp;lt;/description&amp;gt; &lt;br/&gt;
&amp;lt;icons&amp;gt; &lt;br/&gt;
&amp;lt;icon height=&amp;quot;64&amp;quot; width=&amp;quot;64&amp;quot; src=&amp;quot;logo.png&amp;quot; /&amp;gt; &lt;br/&gt;
&amp;lt;/icons&amp;gt; &lt;br/&gt;
&amp;lt;hosts&amp;gt; &lt;br/&gt;
&amp;lt;host name=&amp;quot;sidebar&amp;quot;&amp;gt; &lt;br/&gt;
&amp;lt;base type=&amp;quot;HTML&amp;quot; apiVersion=&amp;quot;1.0.0&amp;quot; src=&amp;quot;main.html&amp;quot; /&amp;gt; &lt;br/&gt;
&amp;lt;permissions&amp;gt;Full&amp;lt;/permissions&amp;gt; &lt;br/&gt;
&amp;lt;platform minPlatformVersion=&amp;quot;1.0&amp;quot; /&amp;gt; &lt;br/&gt;
&amp;lt;defaultImage src=&amp;quot;icon.gif&amp;quot; /&amp;gt; &lt;br/&gt;
&amp;lt;/host&amp;gt; &lt;br/&gt;
&amp;lt;/hosts&amp;gt; &lt;br/&gt;
&amp;lt;/gadget&amp;gt;&lt;/p&gt; &lt;p&gt;&lt;noindex&gt;&lt;a href="http://msug.vn.ua/blogs/akrakovetsky/archive/2010/03/05/creating-windows-7-sidebar-gadget.aspx" rel="nofollow"&gt;Читать полностью&lt;/a&gt;&lt;/noindex&gt; &lt;br/&gt;
&lt;/p&gt; </description>
      <author>sashaeve</author>
      <category>Windows 7</category>
      <category>гаджет</category>
      <guid>http://feedproxy.google.com/~r/MicrosoftUserGroupVinnitsya/~3/RYOnz0beE90/creating-windows-7-sidebar-gadget.aspx</guid>
      <pubDate>Fri, 05 Mar 2010 18:39:00 UT</pubDate>
    </item>
    <item>
      <title>WCF: немного об интероперабильности</title>
      <link>http://www.gotdotnet.ru/blogs/natale/7230/</link>
      <description>&lt;p align="justify" style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font&gt;&lt;strong&gt;WCF &amp;amp; WSE 2.0 &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;font&gt;&lt;p align="justify" style="MARGIN: 0cm 0cm 10pt"&gt;Организация взаимодействия WCF и сервиса, поддерживающего стандарт WSE 2.0. &lt;/p&gt; &lt;/font&gt; &lt;p align="justify" style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font&gt;Ответ простой: использовать &lt;span&gt;WSE&lt;/span&gt; 3.0, либо настроить custombinding в WCF. Почему? WCF поддерживает только WS-Security 1.1. &lt;/font&gt;&lt;font&gt;WSE 3.0 реализует &lt;span&gt; &lt;/span&gt;WS-Security 1.0 и WS-Security &lt;span&gt; &lt;/span&gt;1.1, а WSE 2.0 только WS-Security 1.0. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify" style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font&gt;&lt;strong&gt;WCF &amp;amp; Java&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify" style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font&gt;Организация взаимодействия &lt;span&gt;WCF&lt;/span&gt;&lt;span&gt; &lt;/span&gt;и &lt;span&gt;Java&lt;/span&gt;. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify" style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font&gt;Ответ: убедитесь, что &lt;span&gt;Action&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Header&lt;/span&gt; (приходящее от &lt;span&gt;Java&lt;/span&gt;) не является пустым, либо установите в &lt;span&gt;WCF&lt;/span&gt; атрибут &lt;span&gt;ServiceBehavior&lt;/span&gt;&lt;span&gt; &lt;/span&gt;– &lt;span&gt;AddressFilterMode&lt;/span&gt;. &lt;/font&gt;&lt;/p&gt; </description>
      <author>natale</author>
      <category>WCF</category>
      <guid isPermaLink="false">urn:bitrix:blog:post:7230</guid>
      <pubDate>Fri, 05 Mar 2010 17:10:28 UT</pubDate>
    </item>
    <item>
      <title>C# Zen Coding уже на F#</title>
      <link>http://www.gotdotnet.ru/blogs/nesteruk/7233/</link>
      <description>В моем предыдущем посте, где я описал идею CSharpZen, я пообещал две вещи – дописать расширение для Visual Studio 2010, а также записать вебкаст того, как это можно использовать. Но пока я дописывал код для трансформатора, мне снова показалось что код может стать более понятным если его переписать на F#. И понеслось… Почему опять F#? Я [...]&lt;img src="http://stats.wordpress.com/b.gif?host=nesteruk.wordpress.com&amp;amp;blog=373435&amp;amp;post=271&amp;amp;subd=nesteruk&amp;amp;ref=&amp;amp;feed=1" border="0"/&gt;</description>
      <author>mezastel</author>
      <category>C#</category>
      <category>f#</category>
      <guid>http://nesteruk.wordpress.com/2010/03/05/c-zen-coding-%d1%83%d0%b6%d0%b5-%d0%bd%d0%b0-f/</guid>
      <pubDate>Fri, 05 Mar 2010 16:45:39 UT</pubDate>
    </item>
    <item>
      <title>Расширяемость Reporting Services 2008 R2: Введение</title>
      <link>http://www.gotdotnet.ru/blogs/evgeniy-nikonorov/7229/</link>
      <description>&lt;p&gt;&lt;br/&gt;
Опубликовал новый вебкаст по интересной теме: &lt;/p&gt; &lt;p&gt;&lt;noindex&gt;&lt;a href="http://www.techdays.ru/videos/2405.html" rel="nofollow"&gt;Расширяемость Reporting Services 2008 R2: Введение&lt;/a&gt;&lt;/noindex&gt; &lt;/p&gt; &lt;p&gt;В докладе рассматривается архитектура Reporting Services 2008 R2 с точки зрения расширяемости. Приведены модули расширения, встроенные по умолчанию, а также рассмотрены примеры возможных расширений. Приведены ссылки на ресурсы сторонних производителей расширений для RS.&lt;/p&gt; &lt;p&gt;В планах сделать по докладу по каждому пункту, так что принимаются заявки :), &lt;/p&gt; &lt;p&gt;первым делом собираюсь рассмотреть RDC расширение &lt;/p&gt;</description>
      <author>evgeniy_nikonorov</author>
      <category>reporting services extensibility</category>
      <category>sql server 2008 r2</category>
      <guid isPermaLink="false">urn:bitrix:blog:post:7229</guid>
      <pubDate>Fri, 05 Mar 2010 14:48:45 UT</pubDate>
    </item>
    <item>
      <title>Прямой доступ к базе данных 1С7.7</title>
      <link>http://www.gotdotnet.ru/blogs/virtualexpert/7225/</link>
      <description>Большая часть российских предприятий для автоматизации бухгалтерского учета и экономических расчетов использует программу 1С. Эта программа предлагает вполне достаточный базовый функционал, но никогда не сможет удовлетворить &lt;b&gt;&lt;em&gt;ВСЕ&lt;/em&gt;&lt;/b&gt; наши пожелания. Поэтому, если в программе, написанной на C#, научиться напрямую читать данные из баз 1С, то весь недостающий функционал 1С вы сможете сами реализовать в своих программах. &lt;ol&gt;В предыдущих трех статьях мы создали 3 класса: &lt;li&gt;&lt;font color="#0099FF"&gt;MyConnect &lt;/font&gt;– позволяющий создать подключение к базе данных (метод OleDbConn(&lt;font color="Blue"&gt;string &lt;/font&gt;DataPath)) и скопировать dbf–файл в объект &lt;font color="#0099FF"&gt;DataTable &lt;/font&gt; (метод CopyDataTable(&lt;font color="#0099FF"&gt;OleDbConnection &lt;/font&gt;OleDbConn, &lt;font color="Blue"&gt;string &lt;/font&gt;myDoc). См. &lt;noindex&gt;&lt;a href="http://www.virtualexpert.ru/foxpro.htm" rel="nofollow"&gt;Microsoft OLE DB Provider for Visual FoxPro&lt;/a&gt;&lt;/noindex&gt;&lt;/li&gt;
 &lt;li&gt;&lt;font color="#0099FF"&gt;Browse &lt;/font&gt;– выводящий на экран объект &lt;font color="#0099FF"&gt;DataTable &lt;/font&gt;в виде таблицы (метод Browse(&lt;font color="#0099FF"&gt;DataTable &lt;/font&gt;tbl)). См. &lt;noindex&gt;&lt;a href="http://www.virtualexpert.ru/viewer.htm" rel="nofollow"&gt;DataGridView&lt;/a&gt;&lt;/noindex&gt;&lt;/li&gt;
 &lt;li&gt;&lt;font color="#0099FF"&gt;Graph &lt;/font&gt;– строящий график из двух заданных полей объекта &lt;font color="#0099FF"&gt;DataTable &lt;/font&gt; (метод Graph(&lt;font color="#0099FF"&gt;DataTable &lt;/font&gt;tblgraph, &lt;font color="Blue"&gt;string &lt;/font&gt;X, &lt;font color="Blue"&gt;string &lt;/font&gt;Y)). См. &lt;noindex&gt;&lt;a href="http://www.virtualexpert.ru/chart.htm" rel="nofollow"&gt;Microsoft Chart Controls&lt;/a&gt;&lt;/noindex&gt;&lt;/li&gt;
 &lt;/ol&gt;&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;b&gt;Создаем библиотеку классов&lt;/b&gt;&lt;br/&gt;
&lt;br/&gt;
Если вы работаете с Microsoft Visual Studio, выберите шаблон – &lt;em&gt;&amp;quot;Пустой проект&amp;quot;&lt;/em&gt;, укажите название проекта – &lt;em&gt;&amp;quot;Tools&amp;quot;&lt;/em&gt; и добавьте в него &lt;em&gt;&amp;quot;Файл с текстом программы&amp;quot;&lt;/em&gt;. Кроме того, в свойствах проекта поменяйте тип выходных данных на &lt;em&gt;&amp;quot;Библиотека классов&amp;quot;&lt;/em&gt;. Не забудьте в обозреватель решений добавить ссылки на:&lt;br/&gt;
&lt;br/&gt;
System&lt;br/&gt;
System.Data&lt;br/&gt;
System.Windows.Forms&lt;br/&gt;
System.XML&lt;br/&gt;
System.Drawing&lt;br/&gt;
System.Windows.Forms.DataVisualization&lt;br/&gt;
&lt;br/&gt;
Все классы и методы я оставил без изменений, кроме метода CopyDataTable(&lt;font color="#0099FF"&gt;OleDbConnection &lt;/font&gt; OleDbConn, &lt;font color="Blue"&gt;string &lt;/font&gt;myDoc). В новой версии он стал более универсальным, так как теперь ему передается не название dbf–файла, а сторока SQL – запроса. Измененные строки выделены более ярким цветом:&lt;br/&gt;
&lt;br/&gt;
&lt;font color="Blue"&gt;using &lt;/font&gt;System;&lt;br/&gt;
&lt;font color="Blue"&gt;using &lt;/font&gt;System.Data;&lt;br/&gt;
&lt;font color="Blue"&gt;using &lt;/font&gt;System.Windows.Forms;&lt;br/&gt;
&lt;font color="Blue"&gt;using &lt;/font&gt;System.Drawing;&lt;br/&gt;
&lt;font color="Blue"&gt;using &lt;/font&gt;System.Xml;&lt;br/&gt;
&lt;font color="Blue"&gt;using &lt;/font&gt;System.Data.OleDb;&lt;br/&gt;
&lt;font color="Blue"&gt;using &lt;/font&gt;System.Windows.Forms.DataVisualization.Charting;&lt;br/&gt;
&lt;br/&gt;
&lt;font color="Blue"&gt;namespace &lt;/font&gt;tools&lt;br/&gt;
{&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;font color="Gray"&gt;public class MyConnect&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; const string DataProvider = @&amp;quot;vfpoledb.1&amp;quot;; // Провайдер&lt;br/&gt;
&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Создать OleDbConnection&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public OleDbConnection OleDbConn(string DataPath)&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Для того, чтобы создать OLE – соединение с локальной базой данных,&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // необходимо указать 2 параметра – провайдера и путь к базе данных.&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Для наглядности я воспользовался построителем строк подключения –&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // OleDbConnectionStringBuilder.&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OleDbConnectionStringBuilder bldr = new OleDbConnectionStringBuilder();&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; bldr.DataSource = DataPath; // Указываем путь&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; bldr.Provider = DataProvider; // Указываем провайдера&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Создаем подключение к источнику данных&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OleDbConnection myConn = new OleDbConnection(bldr.ConnectionString);&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return myConn;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br/&gt;
&lt;br/&gt;
&lt;/font&gt; &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="Green"&gt;// Прочитать dbf-файл в DataTable&lt;/font&gt;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="Blue"&gt;public &lt;/font&gt;&lt;font color="#0099FF"&gt;DataTable &lt;/font&gt;CopyDataTable(&lt;font color="#0099FF"&gt;OleDbConnection &lt;/font&gt;OleDbConn, &lt;font color="Blue"&gt;string &lt;/font&gt;mySQL)&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="Gray"&gt;{&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Класс, необходимый для задания оператора SQL и источника данных&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OleDbCommand cmd = new OleDbCommand();&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;cmd.CommandText = @mySQL; &lt;font color="Green"&gt;// Задаем оператор SQL&lt;br/&gt;
&lt;/font&gt; &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="Gray"&gt;cmd.Connection = OleDbConn; // Задаем источник данных&lt;br/&gt;
&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Объект OleDbDataAdapter выполняет функцию моста между DataTable и источником данных.&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OleDbDataAdapter da = new OleDbDataAdapter();&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; da.SelectCommand = cmd;&lt;br/&gt;
&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DataTable tbl = new DataTable();&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Обеспечивает он такой мост с помощью метода Fill.&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; da.Fill(tbl);&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return tbl;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br/&gt;
&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;public class Browse : Form&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; internal protected DataGridView dataGridView;&lt;br/&gt;
&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public Browse(DataTable tbl)&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Browse форма - свойства&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Text = &amp;quot;Viewer2&amp;quot;;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Задаем размер клиентской области формы&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ClientSize = new Size(700, 400);&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Располагаем форму в центре экрана&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; StartPosition = FormStartPosition.CenterScreen;&lt;br/&gt;
&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Browse форма - методы&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Resize += new EventHandler(BrowseResize);&lt;br/&gt;
&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // dataGridView - свойства&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dataGridView = new DataGridView();&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dataGridView.Parent = this;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Задаем размер таблицы относительно клиентской области формы&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dataGridView.Height = ClientSize.Height - 20;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dataGridView.Width = ClientSize.Width - 20;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Задаем положение таблицы относительно левого верхнего угла формы&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dataGridView.Left = 10;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dataGridView.Top = 10;&lt;br/&gt;
&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // указываем источник данных&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dataGridView.DataSource = tbl;&lt;br/&gt;
&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Подбираем в цикле ширину всех колонок&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; foreach (DataColumn col in tbl.Columns)&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dataGridView.Columns[col.Caption].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br/&gt;
&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Реакция формы на изменение размера&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; void BrowseResize(object sender, EventArgs e)&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Подгоняем размер таблицы под клиентскую область формы&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dataGridView.Height = ClientSize.Height - 20;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dataGridView.Width = ClientSize.Width - 20;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br/&gt;
&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;public class Graph : Form&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public Graph(DataTable tblgraph, string X, string Y)&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Главная форма - свойства&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Text = &amp;quot;Graph1&amp;quot;;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ClientSize = new Size(700, 400);&lt;br/&gt;
&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // MicrosoftChart - свойства&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Chart myChart = new Chart();&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; myChart.Parent = this;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; myChart.Left = 10;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; myChart.Top = 10;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; myChart.Width = (ClientSize.Width - 20);&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; myChart.Height = (ClientSize.Height - 20);&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; myChart.DataSource = tblgraph;&lt;br/&gt;
&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Фон&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; myChart.BackColor = Color.MistyRose;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; myChart.BackGradientStyle = GradientStyle.DiagonalLeft;&lt;br/&gt;
&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Оформление границ&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; myChart.BorderSkin.SkinStyle = BorderSkinStyle.Sunken;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; myChart.BorderSkin.PageColor = this.BackColor;&lt;br/&gt;
&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Область в которой будет построен график&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ChartArea myChartArea = new ChartArea();&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; myChartArea.Name = &amp;quot;myChartArea&amp;quot;;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; myChart.ChartAreas.Add(myChartArea);&lt;br/&gt;
&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Линии сетки&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; myChartArea.AxisX.MajorGrid.LineColor = SystemColors.ControlLight;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; myChartArea.AxisY.MajorGrid.LineColor = SystemColors.ControlLight;&lt;br/&gt;
&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // График&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Series mySeries1 = new Series();&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mySeries1.ChartType = SeriesChartType.Spline;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mySeries1.ChartArea = &amp;quot;myChartArea&amp;quot;;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mySeries1.XValueMember = X;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mySeries1.YValueMembers = Y;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; myChart.Series.Add(mySeries1);&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br/&gt;
&lt;/font&gt;}&lt;br/&gt;
&lt;br/&gt;
Постройте решение (&lt;em&gt;&amp;quot;Build Solution&amp;quot;&lt;/em&gt;) и проверьте в папке &lt;em&gt;…\bin\Debug\&lt;/em&gt; наличие файла &lt;em&gt;Tools.dll.&lt;/em&gt; Библиотека готова, и мы можем приступить к работе с базой 1С7.7. Она существует в 2-х вариантах: локальная и SQL версии. Весь изложенный материал применим к обеим из них, разница лишь в методе подключения к базе данных. Например, для подключения к SQL базе можно вместо метода - OleDbConn(&lt;font color="Blue"&gt;string &lt;/font&gt;DataPath) использовать следующий метод:&lt;br/&gt;
&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="Blue"&gt;public &lt;/font&gt;&lt;font color="#0099FF"&gt;SqlConnection &lt;/font&gt;SqlConn(&lt;font color="Blue"&gt;string &lt;/font&gt;DataPath)&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0099FF"&gt;SqlConnectionStringBuilder &lt;/font&gt;bldr = &lt;font color="Blue"&gt;new &lt;/font&gt;&lt;font color="#0099FF"&gt;SqlConnectionStringBuilder&lt;/font&gt; ();&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; bldr.DataSource = &lt;font color="DarkRed"&gt;@&amp;quot;.\SQLEXPRESS&amp;quot;&lt;/font&gt;;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; bldr.InitialCatalog = DataPath;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; bldr.IntegratedSecurity = &lt;font color="Blue"&gt;true&lt;/font&gt;;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; bldr.ConnectTimeout = 30;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; bldr.UserInstance = &lt;font color="Blue"&gt;true&lt;/font&gt;;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0099FF"&gt;SqlConnection &lt;/font&gt;myConn = &lt;font color="Blue"&gt;new &lt;/font&gt;&lt;font color="#0099FF"&gt;SqlConnection&lt;/font&gt;(bldr.ConnectionString);&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="Blue"&gt;return &lt;/font&gt;myConn;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br/&gt;
&lt;br/&gt;
В локальной версии база данных 1С7.7 состоит из совокупности файлов формата &lt;em&gt;Dbase&lt;/em&gt;. Информация о назначении и структуре каждого файла указана в файле - &lt;em&gt;1Cv7.dd&lt;/em&gt;. Обычно он находится там же, где и база данных. Как это выглядит, разберем на примере документа – &lt;em&gt;&amp;quot;Расходная накладная&amp;quot;&lt;/em&gt;. Необходимую нам информацию я выделил более ярким цветом, мои пояснения – зеленым цветом:&lt;br/&gt;
&lt;img src="http://jmxgiq.blu.livefilestore.com/y1p9eplcjzXt0nBWKbLUhgomWgl-B_U0XqK9ucx7O0byVH2GuBQfhw_nPNi6ua9uDjp6SFglgpUKHkTFzfgh8KyDK6z71hECeQL/dh294.png" vspace="10" border="0"/&gt;&lt;br/&gt;
&lt;ol&gt;Видно, что хранение информации организовано по канонам СУБД: &lt;li&gt;Если у документа есть табличная часть, то она хранится в отдельном файле (&lt;em&gt;dh294.dbf&lt;/em&gt; – заголовочная часть документа, &lt;em&gt;dt294.dbf&lt;/em&gt; – табличная часть документа).&lt;/li&gt;
 &lt;li&gt;Вместо названий товаров и контрагентов в файле хранятся только коды, а сами названия - отдельно в справочниках.&lt;/li&gt;
 &lt;/ol&gt; &lt;ol&gt;Поэтому нам еще потребуется информация из трех справочников: &lt;li&gt;&lt;em&gt;Журналы (1sjourn.dbf)&lt;/em&gt; – только здесь хранятся номера и даты всех документов 1С,&lt;/li&gt;
 &lt;li&gt;&lt;em&gt;Справочник контрагентов (sc133.dbf)&lt;/em&gt; – отсюда возьмем названия клиентов,&lt;/li&gt;
 &lt;li&gt;&lt;em&gt;Справочник номенклатуры (sc156.dbf)&lt;/em&gt; – здесь названия всей номенклатуры товаров и услуг.&lt;/li&gt;
 &lt;/ol&gt; &lt;img src="http://jmxgiq.blu.livefilestore.com/y1prFK6W4scwqMNkuxSAc82eYaVOVv6bD7sAQTNs4uuxRJaKPA-3D38SmiC2yAcYbjTMSIduiBeLPQAN3TGQUStoRFaJ5y-0Mo2/sc133.png" vspace="10" border="0"/&gt;&lt;br/&gt;
&lt;img src="http://jmxgiq.blu.livefilestore.com/y1p0S3R8BhpaYg_M9DXEv7KS7nEncky6p0Sg0mQbUUkCWHoevBsu23RnB0vcvXk9riGAlSS_EHwjc16cMxtgLXHN5N_I5qwdCRA/sc156.png" vspace="10" border="0"/&gt;&lt;br/&gt;
Всю необходимую информацию для написания SQL запроса к базе данных 1С7.7 мы собрали. Формируем документ &lt;em&gt;&amp;quot;Расходная накладная&amp;quot;&lt;/em&gt;:&lt;br/&gt;
&lt;br/&gt;
SELECT _1sjourn.docno, _1sjourn.date, sc133.descr AS Client, &amp;quot;sc156.descr AS Good,&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;dt294.sp284 AS Number, dt294.sp285 AS Price, dt294.sp286 AS Summa,&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;dt294.sp287 AS NDS, dt294.sp290 AS Total&lt;br/&gt;
&amp;#160;&amp;#160;FROM dh294&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;INNER JOIN 1sjourn _1sjourn ON dh294.iddoc = _1sjourn.iddoc&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;INNER JOIN sc133 ON dh294.sp277 = sc133.id&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;INNER JOIN dt294 ON dh294.iddoc = dt294.iddoc&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;INNER JOIN sc156 ON dt294.sp283 = sc156.id&lt;br/&gt;
&lt;br/&gt;
Теперь перейдем к созданию исполняемой программы. Если вы работаете с Microsoft Visual Studio, выберите шаблон – &lt;em&gt;&amp;quot;Пустой проект&amp;quot;&lt;/em&gt;, укажите название проекта – &lt;em&gt;&amp;quot;1С77&amp;quot;&lt;/em&gt; и добавьте в него &lt;em&gt;&amp;quot;Файл с текстом программы&amp;quot;&lt;/em&gt;. Кроме того, в свойствах проекта поменяйте тип выходных данных на &lt;em&gt;&amp;quot;Приложение Windows&amp;quot;&lt;/em&gt;.&lt;br/&gt;
&lt;br/&gt;
&lt;b&gt;Используем &lt;em&gt;Browse&lt;/em&gt; для просмотра документов – &lt;em&gt;&amp;quot;Расходная накладная&amp;quot;&lt;/em&gt;&lt;/b&gt;&lt;br/&gt;
&lt;img src="http://jmxgiq.blu.livefilestore.com/y1pTc28hesUUx9NmBK_63pPGqMKLjTleBK9Ft8hi_xvCRs9Op8PKLoNVptFCXxUTJsS7MwC3inx7RFFAfaLcSGHiM9gHeFjH3_m/1C771.jpg" vspace="20" border="0"/&gt;&lt;br/&gt;
В обозревателе решений указываем ссылки на:&lt;br/&gt;
&lt;br/&gt;
System&lt;br/&gt;
System.Data&lt;br/&gt;
System.Windows.Forms&lt;br/&gt;
System.XML&lt;br/&gt;
&lt;br/&gt;
И, кроме того, надо добавить ссылку на нашу библиотеку – Tools. Разница лишь в том, что в окне &lt;em&gt;&amp;quot;Добавить ссылку&amp;quot;&lt;/em&gt; надо вместо вкладки &lt;em&gt;&amp;quot;.NET&amp;quot;&lt;/em&gt; выбрать вкладку &lt;em&gt;&amp;quot;Обзор&amp;quot;&lt;/em&gt; и найти &lt;em&gt;Tools.dll&lt;/em&gt;. Ниже приведен листинг программы:&lt;br/&gt;
&lt;br/&gt;
&lt;font color="Blue"&gt;using &lt;/font&gt;System;&lt;br/&gt;
&lt;font color="Blue"&gt;using &lt;/font&gt;System.Data;&lt;br/&gt;
&lt;font color="Blue"&gt;using &lt;/font&gt;System.Data.OleDb;&lt;br/&gt;
&lt;font color="Blue"&gt;using &lt;/font&gt;tools;&lt;br/&gt;
&lt;br/&gt;
&lt;font color="Blue"&gt;namespace &lt;/font&gt;_1C77&lt;br/&gt;
{&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;font color="Blue"&gt;public class &lt;/font&gt;&lt;font color="#0099FF"&gt;SQL1C&lt;br/&gt;
&lt;/font&gt; &amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="Green"&gt;// Документу из 1С приводим в соответствие SQL запрос&lt;br/&gt;
&lt;/font&gt; &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="Blue"&gt;public string &lt;/font&gt;SQL1C77(&lt;font color="Blue"&gt;string &lt;/font&gt;NameDoc)&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="Blue"&gt;string StringSQL = &lt;/font&gt;&lt;font color="DarkRed"&gt;&amp;quot;SELECT * FROM &amp;quot; &lt;/font&gt;+ NameDoc;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="Blue"&gt;switch &lt;/font&gt;(NameDoc)&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="Blue"&gt;case &lt;/font&gt;&lt;font color="DarkRed"&gt;&amp;quot;РасходнаяНакладная&amp;quot;&lt;/font&gt;:&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; StringSQL = &lt;font color="DarkRed"&gt;&amp;quot;SELECT _1sjourn.docno, _1sjourn.date, sc133.descr AS Client, &amp;quot; &lt;/font&gt;+&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="DarkRed"&gt;&amp;quot;sc156.descr AS Good, dt294.sp284 AS Number, dt294.sp285 AS Price, &amp;quot; &lt;/font&gt;+&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="DarkRed"&gt;&amp;quot;dt294.sp286 AS Summa, dt294.sp287 AS NDS, dt294.sp290 AS Total FROM dh294 &amp;quot; &lt;/font&gt;+&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="DarkRed"&gt;&amp;quot;INNER JOIN 1sjourn _1sjourn ON dh294.iddoc = _1sjourn.iddoc &amp;quot; &lt;/font&gt;+&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="DarkRed"&gt;&amp;quot;INNER JOIN sc133 ON dh294.sp277 = sc133.id &amp;quot; &lt;/font&gt;+&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="DarkRed"&gt;&amp;quot;INNER JOIN dt294 ON dh294.iddoc = dt294.iddoc &amp;quot; &lt;/font&gt;+&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="DarkRed"&gt;&amp;quot;INNER JOIN sc156 ON dt294.sp283 = sc156.id&amp;quot;&lt;/font&gt;;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="Blue"&gt;break&lt;/font&gt;;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="Blue"&gt;return &lt;/font&gt;StringSQL;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br/&gt;
&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;font color="Blue"&gt;class &lt;/font&gt;&lt;font color="#0099FF"&gt;_1C77&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;{&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="Blue"&gt;public static void &lt;/font&gt;Main()&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0099FF"&gt;MyConnect &lt;/font&gt;mycon = &lt;font color="Blue"&gt;new &lt;/font&gt;&lt;font color="#0099FF"&gt;MyConnect&lt;/font&gt;();&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="Green"&gt;// Создаем соединение с базой данных&lt;br/&gt;
&lt;/font&gt; &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0099FF"&gt;OleDbConnection &lt;/font&gt;OleDbCon = mycon.OleDbConn(&lt;font color="DarkRed"&gt;@&amp;quot;C:\Program Files\1Cv77\1SBDemo\&amp;quot;&lt;/font&gt;);&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="Green"&gt;// Открываем его&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;OleDbCon.Open();&lt;br/&gt;
&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0099FF"&gt;SQL1C &lt;/font&gt;mySQL1C = &lt;font color="Blue"&gt;new &lt;/font&gt;&lt;font color="#0099FF"&gt;SQL1C&lt;/font&gt;();&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="Green"&gt;// Выбираем SQL запрос для Расходной накладной&lt;br/&gt;
&lt;/font&gt; &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="Blue"&gt;string &lt;/font&gt;SQL1C1 = mySQL1C.SQL1C77(&lt;font color="DarkRed"&gt;&amp;quot;РасходнаяНакладная&amp;quot;&lt;/font&gt;);&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="Green"&gt;// Указывая соединение с базой данных и строку SQL, получем объект DataTable&lt;br/&gt;
&lt;/font&gt; &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0099FF"&gt;DataTable &lt;/font&gt;Doc1C1 = mycon.CopyDataTable(OleDbCon, SQL1C1);&lt;br/&gt;
&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="Green"&gt;// Создаем объект browse&lt;br/&gt;
&lt;/font&gt; &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0099FF"&gt;Browse &lt;/font&gt;browse = &lt;font color="Blue"&gt;new &lt;/font&gt;&lt;font color="#0099FF"&gt;Browse&lt;/font&gt;(Doc1C1);&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="Green"&gt;// и выводим его на экран&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;browse.ShowDialog();&lt;br/&gt;
&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="Green"&gt;// Закрываем соединение&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;OleDbCon.Close();&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br/&gt;
}&lt;br/&gt;
&lt;br/&gt;
Принцип, думаю понятен и теперь вы сами сможете организовать запрос к любому документу в базе 1С7.7. В заключение лишь хочу привести еще один пример, во-первых, использования созданной нами библиотеки (класс &lt;font color="#0099FF"&gt;Graph&lt;/font&gt;), а, во-вторых, открытия другого документа 1С – &lt;em&gt;&amp;quot;Платежного поручения&amp;quot;&lt;/em&gt;:&lt;br/&gt;
&lt;br/&gt;
&lt;b&gt;Строим график, используя данные документов – &lt;em&gt;&amp;quot;Платежное поручение&amp;quot;&lt;/em&gt;&lt;/b&gt;&lt;br/&gt;
&lt;img src="http://public.blu.livefilestore.com/y1pL18aX1iecfCW1Ks-ZxOYi29gmU01XYxV25it5yKZqTD0J-sZGyjnjozJ-WQZvfREWXZszzx3NfFKESTTY1HLAw/1C772.jpg" vspace="20" border="0"/&gt;&lt;br/&gt;
&lt;font color="Gray"&gt;using System;&lt;br/&gt;
using System.Data;&lt;br/&gt;
using System.Data.OleDb;&lt;br/&gt;
using tools;&lt;br/&gt;
&lt;br/&gt;
namespace _1C77&lt;br/&gt;
{&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;public class SQL1C&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Документу из 1С приводим в соответствие SQL запрос&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public string SQL1C77(string NameDoc)&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string StringSQL = &amp;quot;SELECT * FROM &amp;quot; + NameDoc;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; switch (NameDoc)&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; case &amp;quot;РасходнаяНакладная&amp;quot;:&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; StringSQL = &amp;quot;SELECT _1sjourn.docno, _1sjourn.date, sc133.descr AS Client, &amp;quot; +&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;sc156.descr AS Good, dt294.sp284 AS Number, dt294.sp285 AS Price, &amp;quot; +&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;dt294.sp286 AS Summa, dt294.sp287 AS NDS, dt294.sp290 AS Total FROM dh294 &amp;quot; +&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;INNER JOIN 1sjourn _1sjourn ON dh294.iddoc = _1sjourn.iddoc &amp;quot; +&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;INNER JOIN sc133 ON dh294.sp277 = sc133.id &amp;quot; +&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;INNER JOIN dt294 ON dh294.iddoc = dt294.iddoc &amp;quot; +&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;INNER JOIN sc156 ON dt294.sp283 = sc156.id&amp;quot;;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; break;&lt;br/&gt;
&lt;/font&gt; &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="Blue"&gt;case &lt;/font&gt;&lt;font color="DarkRed"&gt;&amp;quot;ПлатежноеПоручение&amp;quot;&lt;/font&gt;:&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; StringSQL = &lt;font color="DarkRed"&gt;&amp;quot;SELECT _1sjourn.docno, _1sjourn.date, sc133.descr AS Client, &amp;quot; &lt;/font&gt;+&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="DarkRed"&gt;&amp;quot;dh12070.sp12059 AS Summa, dh12070.sp12061 AS NDS FROM dh12070 &amp;quot; &lt;/font&gt;+&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="DarkRed"&gt;&amp;quot;INNER JOIN 1sjourn _1sjourn ON dh12070.iddoc = _1sjourn.iddoc &amp;quot; &lt;/font&gt;+&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="DarkRed"&gt;&amp;quot;INNER JOIN sc133 ON dh12070.sp12058 = sc133.id&amp;quot;&lt;/font&gt;;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="Blue"&gt;break&lt;/font&gt;;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="Gray"&gt;}&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return StringSQL;&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br/&gt;
&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;class _1C77&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public static void Main()&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MyConnect mycon = new MyConnect();&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Создаем соединение с базой данных&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OleDbConnection OleDbCon = mycon.OleDbConn(@&amp;quot;C:\Program Files\1Cv77\1SBDemo\&amp;quot;);&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Открываем его&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OleDbCon.Open();&lt;br/&gt;
&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SQL1C mySQL1C = new SQL1C();&lt;br/&gt;
&lt;/font&gt; &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="Green"&gt;// Выбираем SQL запрос для Платежного поручения&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="Blue"&gt;string &lt;/font&gt;SQL1C2 = mySQL1C.SQL1C77(&lt;font color="DarkRed"&gt;&amp;quot;ПлатежноеПоручение&amp;quot;&lt;/font&gt;);&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="Gray"&gt;// Указывая соединение с базой данных и строку SQL, получем объект DataTable&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DataTable Doc1C2 = mycon.CopyDataTable(OleDbCon, SQL1C2);&lt;br/&gt;
&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="Green"&gt;// Создаем объект graph&lt;br/&gt;
&lt;/font&gt; &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0099FF"&gt;Graph &lt;/font&gt;graph = &lt;font color="Blue"&gt;new &lt;/font&gt;&lt;font color="#0099FF"&gt;Graph&lt;/font&gt;(Doc1C2, &lt;font color="DarkRed"&gt;&amp;quot;date&amp;quot;, &amp;quot;summa&amp;quot;&lt;/font&gt;);&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="Green"&gt;// и выводим его на экран&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;graph.ShowDialog();&lt;br/&gt;
&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="Gray"&gt;// Закрываем соединение&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OleDbCon.Close();&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br/&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br/&gt;
}&lt;br/&gt;
&lt;br/&gt;
&lt;/font&gt; В этой статье вы научились получать данные из базы данных 1С7.7, посмотрели их в &lt;em&gt;DataGridView&lt;/em&gt; и построили на основе этих данных график. Для полного комплекта не хватает только еще научиться: &lt;ol&gt;&lt;li&gt;сохранять данные на диск,&lt;br/&gt;
&lt;br/&gt;
&lt;/li&gt;
 &lt;li&gt;выводить их в отчет и на печать&lt;br/&gt;
&lt;br/&gt;
&lt;/li&gt;
 &lt;/ol&gt; В следующей статье разберем универсальный метод сохранения объекта &lt;font color="#0099FF"&gt;DataTable &lt;/font&gt;в dbf-файл. &lt;br/&gt;
&lt;br/&gt;
&lt;noindex&gt;&lt;a href="http://www.virtualexpert.ru/" rel="nofollow"&gt; www.virtualexpert.ru&lt;/a&gt;&lt;/noindex&gt;  </description>
      <author>serbelyakov</author>
      <guid isPermaLink="false">urn:bitrix:blog:post:7225</guid>
      <pubDate>Fri, 05 Mar 2010 09:21:08 UT</pubDate>
    </item>
    <item>
      <title>Первая встреча Microsoft .NET User Group  в Таганроге!</title>
      <link>http://www.gotdotnet.ru/blogs/ineta/7228/</link>
      <description>&lt;p&gt;&lt;strong&gt;&lt;br/&gt;
&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;noindex&gt;&lt;a href="http://tug.ineta.ru/events/eventInfo.aspx?Id=6a02a125-a1eb-40bf-b933-5232422487d0" rel="nofollow"&gt;Подробнее о мероприятии&lt;/a&gt;&lt;/noindex&gt;&lt;/p&gt;</description>
      <author>Ineta.Ru</author>
      <category>events</category>
      <guid>http://tug.ineta.ru/events/eventInfo.aspx?Id=6a02a125-a1eb-40bf-b933-5232422487d0</guid>
      <pubDate>Fri, 05 Mar 2010 06:38:04 UT</pubDate>
    </item>
    <item>
      <title>WPF 4.0. Что нового? Часть 5.</title>
      <link>http://www.gotdotnet.ru/blogs/outcoldman/7227/</link>
      <description>&lt;p&gt;Последняя статья из серии что нового в WPF. Предыдущие версии: &lt;noindex&gt;&lt;a href="http://outcoldman.livejournal.com/45494.html" rel="nofollow"&gt;1&lt;/a&gt;&lt;/noindex&gt;, &lt;noindex&gt;&lt;a href="http://outcoldman.livejournal.com/45822.html" rel="nofollow"&gt;2&lt;/a&gt;&lt;/noindex&gt;, &lt;noindex&gt;&lt;a href="http://outcoldman.livejournal.com/45926.html" rel="nofollow"&gt;3&lt;/a&gt;&lt;/noindex&gt;, &lt;noindex&gt;&lt;a href="http://outcoldman.livejournal.com/51096.html" rel="nofollow"&gt;4&lt;/a&gt;&lt;/noindex&gt;. В данной части будет небольшая солянка из еще найденных и откопанных нововведений. Предполагаю, что можно найти и другие, но уже и эти не совсем нужны в продакшене, потому, пожалуй, пора остановится.&lt;/p&gt; &lt;noindex&gt;&lt;a href="http://outcoldman.livejournal.com/51238.html" rel="nofollow"&gt;Читать далее...&lt;/a&gt;&lt;/noindex&gt;</description>
      <author>outcoldman</author>
      <category>.net framework 4.0</category>
      <category>vs2010</category>
      <category>wpf</category>
      <category>wpf 4.0</category>
      <category>xaml</category>
      <category>programming</category>
      <category>other</category>
      <guid isPermaLink="false">urn:bitrix:blog:post:7227</guid>
      <pubDate>Thu, 04 Mar 2010 20:50:48 UT</pubDate>
    </item>
  </channel>
</rss>