tag:blogger.com,1999:blog-53571479330208356922024-02-20T23:10:01.876+03:00Программирование, настройка и администрирование CAD системПрограммирование, настройка и администрирование CAD системAndrey Bushmanhttp://www.blogger.com/profile/01700238372554577360noreply@blogger.comBlogger156125tag:blogger.com,1999:blog-5357147933020835692.post-90805324615072307362018-04-28T22:28:00.000+03:002018-04-28T22:28:38.513+03:00Расширенная информация об ошибке в C#<div dir="ltr" style="text-align: left;" trbidi="on">
Когда-то <a href="http://bushman-andrey.blogspot.ru/2015/12/detailederror.html">показывал</a> способ, которым можно в C++ точно указывать место в файлах исходного кода, где произошло исключение. В этой заметке показываю код, делающий подобное на C#, при этом наличие PDB-файлов не требуется.<br />
<br />
<a name='more'></a><br />
<span style="color: blue; font-family: Consolas; font-size: 9.5pt;">using</span><span style="font-family: Consolas; font-size: 9.5pt;"> System;</span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">using</span><span style="font-family: Consolas; font-size: 9.5pt;"> System.IO;<o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">using</span><span style="font-family: Consolas; font-size: 9.5pt;"> System.Reflection;<o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">using</span><span style="font-family: Consolas; font-size: 9.5pt;"> System.Runtime.CompilerServices;<o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">namespace</span><span style="font-family: Consolas; font-size: 9.5pt;"> ThreadsLearning {<o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">class</span><span style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="color: #2b91af; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">Program</span><span style="font-family: Consolas; font-size: 9.5pt;"> {<o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">private</span><span style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">static</span><span style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">void</span><span style="font-family: Consolas; font-size: 9.5pt;"> Main(</span><span style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">string</span><span style="font-family: Consolas; font-size: 9.5pt;">[] args) {<o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">try</span><span style="font-family: Consolas; font-size: 9.5pt;"> {<o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">throw</span><span style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">new</span><span style="font-family: Consolas; font-size: 9.5pt;">
Exception(Log(</span><span style="color: #a31515; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">"Oops... Something
wrong!"</span><span style="font-family: Consolas; font-size: 9.5pt;">)); </span><span style="color: green; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">// Line
11</span><span style="font-family: Consolas; font-size: 9.5pt;"><o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: Consolas; font-size: 9.5pt;"> }<o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">catch</span><span style="font-family: Consolas; font-size: 9.5pt;"> (Exception ex) {<o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: Consolas; font-size: 9.5pt;"> Console.WriteLine(ex.Message);<o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: Consolas; font-size: 9.5pt;"> }<o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: Consolas; font-size: 9.5pt;"> Console.WriteLine(</span><span style="color: #a31515; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">"Hit <Enter> for exit..."</span><span style="font-family: Consolas; font-size: 9.5pt;">);<o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: Consolas; font-size: 9.5pt;"> Console.ReadLine();<o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: Consolas; font-size: 9.5pt;"> }<o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="color: green; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">// Additional info:
https://channel9.msdn.com/Events/Build/BUILD2011/TOOL-816T</span><span style="font-family: Consolas; font-size: 9.5pt;"><o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">private</span><span style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">static</span><span style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">string</span><span style="font-family: Consolas; font-size: 9.5pt;"> Log(</span><span style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">string</span><span style="font-family: Consolas; font-size: 9.5pt;"> text,<o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: Consolas; font-size: 9.5pt;"> [CallerFilePath] </span><span style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">string</span><span style="font-family: Consolas; font-size: 9.5pt;"> file = </span><span style="color: #a31515; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">""</span><span style="font-family: Consolas; font-size: 9.5pt;">,<o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: Consolas; font-size: 9.5pt;"> [CallerMemberName] </span><span style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">string</span><span style="font-family: Consolas; font-size: 9.5pt;"> member = </span><span style="color: #a31515; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">""</span><span style="font-family: Consolas; font-size: 9.5pt;">,<o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: Consolas; font-size: 9.5pt;"> [CallerLineNumber] </span><span style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">int</span><span style="font-family: Consolas; font-size: 9.5pt;"> line = 0) {<o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">return</span><span style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">string</span><span style="font-family: Consolas; font-size: 9.5pt;">.Format(</span><span style="color: #a31515; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">"</span><span style="color: mediumseagreen; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">{0}</span><span style="color: #a31515; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">, </span><span style="color: mediumseagreen; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">{1}</span><span style="color: #a31515; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">, method </span><span style="color: mediumseagreen; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">{2}</span><span style="color: #a31515; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">, Line: </span><span style="color: mediumseagreen; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">{3}</span><span style="color: #a31515; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">. Error message: </span><span style="color: mediumseagreen; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">{4}</span><span style="color: #a31515; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">"</span><span style="font-family: Consolas; font-size: 9.5pt;">,<o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: Consolas; font-size: 9.5pt;">
Path.GetFileName(Assembly.GetExecutingAssembly().Location),<o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: Consolas; font-size: 9.5pt;"> Path.GetFileName(file), member,
line, text);<o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: Consolas; font-size: 9.5pt;"> }<o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: Consolas; font-size: 9.5pt;"> }<o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: Consolas; font-size: 9.5pt;">}<o:p></o:p></span></div>
<br />
<div class="MsoNormal">
<br /></div>
Консольный вывод следующий:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">ThreadsLearning.exe, Program.cs, method Main, Line: 11. Error message: Oops... Something wrong!</span><br />
<span style="font-family: Courier New, Courier, monospace;">Hit <Enter> for exit...</span><br />
<br />
<br />
<br /></div>
Andrey Bushmanhttp://www.blogger.com/profile/01700238372554577360noreply@blogger.com0tag:blogger.com,1999:blog-5357147933020835692.post-53095987138079523992018-03-26T00:45:00.005+03:002018-05-20T11:03:54.797+03:00Установка в Linux Mint 18.3 различных инструментов, используемых для программирования<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="text-align: justify;">
Мне не нравится современный пользовательский интерфейс Linux Ubuntu, но в то же время мне нравится <i>более классический</i> интерфейс Linux Mint 18.3, построенной (согласно <a href="https://linuxmint.com/rel_sylvia_cinnamon.php">официальной информации</a>) на базе Ubuntu 16.04. Поэтому на моём ноутбуке установлен Linux Mint 18.3.</div>
<div style="text-align: justify;">
<a name='more'></a><br /></div>
<div style="text-align: justify;">
Поскольку меня интересует программирование на языках C, C#, JavaScript и Java, то в данной заметке я размещаю краткую шпаргалку о том, какой софт можно установить в Linux Mint 18.3 для возможности разработки софта с использованием упомянутых выше языков программирования.</div>
<div style="text-align: justify;">
<br /></div>
<h2 style="text-align: left;">
GCC</h2>
<div style="text-align: justify;">
В качестве компилятора для языка <span style="font-family: "courier new" , "courier" , monospace;">C</span> я конечно же предпочитаю использовать <span style="font-family: "courier new" , "courier" , monospace;"><a href="https://gcc.gnu.org/">gcc</a></span>. К сожалению, по умолчанию, в Linux Mint 18.3 установлена весьма старая (5-я) версия этого компилятора. Информацию о версии установленной у вас версии <span style="font-family: "courier new" , "courier" , monospace;">gcc</span> всегда можно получить так:</div>
<div style="text-align: justify;">
<br /></div>
<div>
<div style="text-align: justify;">
<span style="font-family: "courier new" , "courier" , monospace;">gcc --version</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Инструкцию о том, как можно обновить <span style="font-family: "courier new" , "courier" , monospace;">gcc</span> можно найти <a href="https://gist.github.com/youmych/122e32cfa1c228c84684fec13b7d52e1">здесь</a>. Последовательно выполнив все обозначенные в ней действия, мне без труда удалось успешно обновить <span style="font-family: "courier new" , "courier" , monospace;">gcc</span> до наиболее свежей на сегодняшний день версии (7-й).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
На всякий случай дублирую содержимое ссылки, дабы в случае удаления кем-либо указанной выше информации она бы не была безвозвратно утеряна:</div>
</div>
<div>
<br /></div>
<div>
<pre style="white-space: pre-wrap; word-wrap: break-word;"><span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;">These commands are based on a askubuntu answer http://askubuntu.com/a/581497 and https://askubuntu.com/questions/26498/choose-gcc-and-g-version
To install gcc-7 (gcc-7.2.0), I had to do more stuff as shown below.
USE THOSE COMMANDS AT YOUR OWN RISK. I SHALL NOT BE RESPONSIBLE FOR ANYTHING.
ABSOLUTELY NO WARRANTY.
If you are still reading let's carry on with the code.
sudo apt-get update && \
sudo apt-get install build-essential software-properties-common -y && \
sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y && \
sudo apt-get update && \
sudo apt-get install gcc-snapshot -y && \
sudo apt-get update && \
sudo apt-get install gcc-7 g++-7 gcc-6 g++-6 gcc-multilib -y && \
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70 --slave /usr/bin/g++ g++ /usr/bin/g++-7 && \
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-6 && \
sudo apt-get install gcc-5 g++-5 -y && \
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 50 --slave /usr/bin/g++ g++ /usr/bin/g++-5;
When completed, you must change to the gcc you want to work with by default. Type in your terminal:
sudo update-alternatives --config gcc
To verify if it worked. Just type in your terminal
gcc -v
If everything went fine you should see gcc 7.2.0 by the time I am writing this gist
Happy coding!
See blog post at https://www.application2000.com</span></pre>
</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<div style="text-align: justify;">
Помимо того, что <span style="font-family: "courier new" , "courier" , monospace;">gcc</span> можно использовать непосредственно из консоли, его так же используют и различного рода IDE, например, используемый мною <a href="https://www.jetbrains.com/clion/?fromMenu">CLion</a> компании JetBrains. Эта IDE позволяет писать на C90, С99 и даже С11, в отличии от той жеVisual Studio, позволяющей писать только на C90. </div>
</div>
<div style="text-align: left;">
<br /></div>
<h2 style="text-align: left;">
VIM & IDE</h2>
<div style="text-align: justify;">
В качестве текстового редактора я предпочитаю <a href="https://www.vim.org/">vim</a>. Это приложение особенно полезно для тех, кто владеет слепой десятипальцевой печатью, которой можно обучиться, например, на сайте Владимира Шахиджаняна: <a href="https://solo.nabiraem.ru/">https://solo.nabiraem.ru/</a> - свои навыки я когда-то получил именно там.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Компания <a href="https://www.jetbrains.com/products.html?fromMenu">JetBrains</a> предоставляет набор кроссплатформенных IDE для интересующих меня языков программирования:</div>
<div style="text-align: justify;">
<ul>
<li><a href="https://www.jetbrains.com/clion/?fromMenu">CLion</a></li>
<li><a href="https://www.jetbrains.com/idea/?fromMenu">IntelliJ IDEA</a></li>
<li><a href="https://www.jetbrains.com/webstorm/?fromMenu">WebStorm</a></li>
<li><a href="https://www.jetbrains.com/rider/?fromMenu">Rider</a></li>
</ul>
</div>
<div style="text-align: justify;">
Для каждого из этих редакторов присутствует возможность установить плагин <span style="font-family: "courier new" , "courier" , monospace;">IdeaVim</span>, позволяющий эмулировать <span style="font-family: "courier new" , "courier" , monospace;">vim</span> в качестве текстового редактора IDE. Т.о. навыки использования vim могут быть успешно использованы в используемых мною IDE.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Установка <span style="font-family: "courier new" , "courier" , monospace;">vim</span>:</div>
<div>
<br /></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get install vim</span></div>
<div>
<br /></div>
<div>
Проверка установленной версии vim:</div>
<div>
<br /></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;">vim --version</span></div>
<div>
<br /></div>
<div>
Краткая обучающая инструкция по базовым основам использования vim:</div>
<div>
<br /></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;">vimtutor</span></div>
<div>
<br /></div>
<div>
По <span style="font-family: "courier new" , "courier" , monospace;">vim</span> имеются хорошие книги, в т.ч. и на русском языке:</div>
<div>
<ul style="text-align: left;">
<li><a href="https://www.ozon.ru/context/detail/id/137024733/">Практическое использование Vim. Второе издание</a>. Дрю Нэйл.</li>
<li><a href="https://www.ozon.ru/context/detail/id/141703514/">Изучаем редакторы vi и Vim. 7-е издание</a>. Арнольд Роббинс, Линда Лэмб</li>
</ul>
</div>
<div>
<div style="text-align: justify;">
Установку софта из дистрибутивов, скачанных с сайта JetBrains, можно выполнять из консоли следующим образом:</div>
</div>
<div>
<br /></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;">sudo tar -xzf your.tar.gz -C /opt</span></div>
<div>
<br /></div>
<div>
<div style="text-align: justify;">
В результате приложение будет установлено в каталог <span style="font-family: "courier new" , "courier" , monospace;">/opt</span>.</div>
</div>
<div>
<br /></div>
<h2 style="text-align: left;">
Visual Studio Code</h2>
<div>
<div style="text-align: justify;">
На <a href="https://code.visualstudio.com/">официальном сайте</a> Майкрософт можно скачать и установить самый свежий дистрибутив данного кроссплатформенного текстового редактора.</div>
</div>
<div>
<div style="text-align: justify;">
<br /></div>
</div>
<div>
<div style="text-align: justify;">
Среди доступных плагинов для этого текстового редактора так же имеется большой набор эмуляторов <span style="font-family: "courier new" , "courier" , monospace;">vim</span>.</div>
</div>
<div>
<br /></div>
<h2 style="text-align: left;">
Atom</h2>
<div>
<div style="text-align: justify;">
На <a href="https://atom.io/">официальном сайте</a> можно скачать и установить самый свежий дистрибутив данного, весьма популярного текстового редактора.</div>
</div>
<div>
<div style="text-align: justify;">
<br /></div>
</div>
<div>
<div style="text-align: justify;">
Для него так же можно скачать плагин эмуляции vim, как описано <a href="https://atom.io/packages/vim-mode-plus">здесь</a>:</div>
</div>
<div>
<br /></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;">apm install vim-mode-plus</span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span></div>
<h2 style="text-align: left;">
Git</h2>
<div>
<div>
<div style="text-align: justify;">
Вряд ли эта программа нуждается в представлении. На <a href="https://git-scm.com/">официальном сайте</a> всегда можно скачать и установить самый свежий дистрибутив программы.</div>
</div>
</div>
<div>
<br /></div>
<h2 style="text-align: left;">
JDK</h2>
<div>
<div style="text-align: justify;">
SDK для Java. На <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">официальном сайте</a> можно скачать и установить самую свежую версию JDK, необходимую для разработки кода на Java. Установленный JDK будет использоваться в <a href="https://www.jetbrains.com/idea/?fromMenu">IntelliJ Idea</a>.</div>
</div>
<div>
<br /></div>
<h2 style="text-align: left;">
Node.js</h2>
<div>
<div style="text-align: justify;">
Платформа, предоставляющая возможность разрабатывать приложения на JavaScript. С <a href="https://nodejs.org/en/">официального сайта</a> устанавливать лучше LTS-версию. При установке Node.js автоматически будет установлен и менеджер пакетов <a href="https://www.npmjs.com/">NPM</a>. </div>
</div>
<div>
<div style="text-align: justify;">
<br /></div>
</div>
<div>
<div style="text-align: justify;">
NPM можно использовать не только для JavaScript, но и в проектах ASP.NET Core MVC 2.</div>
</div>
<div>
<br /></div>
<h2 style="text-align: left;">
.NET Core SDK</h2>
<div>
На <a href="https://www.microsoft.com/net/download/linux-package-manager/ubuntu16-04/sdk-current">официальном сайте</a> Майкрософт присутствует подробная инструкция по установке самой свежей версии .NET Core SDK для Linux Ubuntu 16.04, на основе которой создан Linux Mint 18.3.</div>
<div>
<br /></div>
<h2 style="text-align: left;">
xUnit</h2>
<div>
Платформа для разработки модульных тестов для .NET и .NET Core. На <a href="https://xunit.github.io/">официальном сайте</a> даются ссылки на соответствующие NuGet и MyGet пакеты.<br />
<br />
<h2 style="text-align: left;">
Хостинг ASP.NET Core 2 приложений в IIS</h2>
<div style="text-align: justify;">
На тот случай, если своё web-приложение вы захотите хостить на IIS, компания Майкрософт <a href="https://docs.microsoft.com/ru-ru/aspnet/core/host-and-deploy/iis/?tabs=aspnetcore2x">опубликовала</a> подробную инструкцию по данной теме. Особое внимание следует обратить на то, что на указанной странице, в разделе У<i>становка пакета размещения .NET Core для Windows Server,</i> указан <a href="https://aka.ms/dotnetcore-2-windowshosting">пакет</a>, который необходимо установить на сервере, чтобы IIS научился работать с вашим приложением.<br />
<br /></div>
</div>
<h2 style="text-align: left;">
Remmina</h2>
<div>
<div style="text-align: justify;">
Это <a href="http://www.remmina.org/wp/">приложение</a> удобно использовать в качестве RDP-клиента для удалённого подключения к компьютерам, работающим под управлением Windows.</div>
</div>
<div>
<br /></div>
<h2 style="text-align: left;">
VMWare Horizon Client</h2>
<div>
<div style="text-align: justify;">
На <a href="https://my.vmware.com/web/vmware/info?slug=desktop_end_user_computing/vmware_horizon_clients/4_0">официальном сайте</a> присутствуют клиенты для различных операционных систем, в т.ч. и для Linux. Это приложение удобно использовать для удалённого подключения к различным виртуальным машинам, работающим под управлением VMWare.<br />
<br />
<b><span style="font-size: large;">MS SQL Server 2017</span></b><br />
<br />
Всю необходимую информацию по теме можно найти на <a href="https://docs.microsoft.com/ru-ru/sql/linux/quickstart-install-connect-ubuntu?view=sql-server-linux-2017">официальном сайте</a> продукта.<br />
<br />
<span style="font-size: large;"><b>PowerShell Core</b></span><br />
<br />
Наличие возможности использовать PowerShell в Linux является весьма удобной для тех, кто привык пользоваться этой командной оболочкой в Windows. Например, для тестирования контроллеров API в ASP.NET Core MVC 2 можно воспользоваться привычной командой <b>Invoke-RestMethod</b>.<br />
<br />
Инструкция по установке - на официальном сайте <a href="https://docs.microsoft.com/en-us/powershell/scripting/setup/installing-powershell-core-on-linux?view=powershell-6" target="_blank">здесь</a>.</div>
</div>
<div>
<br />
<b><span style="font-size: large;">UPD</span></b><br />
Ниже написал небольшой скрипт, с помощью которого оперативно установил интересующий меня набор приложений:<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">#!/bin/bash</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"># (c) Андрей Бушман, 2018</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"># Данный скрипт устанавливает набор необходимого мне программного обеспечения.</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get update</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get upgrade</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;"># Remmina</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-add-repository ppa:remmina-ppa-team/remmina-next</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get update</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get install remmina remmina-plugin-rdp remmina-plugin-secret</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;"># VMware Horizon Client v4.7.0-7395152</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">wget -O ./vmware.x64.bundle https://download3.vmware.com/software/view/viewclients/CART18FQ4/VMware-Horizon-Client-4.7.0-7395152.x64.bundle</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">chmod +x ./vmware.x64.bundle</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo ./vmware.x64.bundle</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;"># Skype</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">wget -O skype.deb https://go.skype.com/skypeforlinux-64.deb</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo dpkg --install ./skype.deb</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;"># Git</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo add-apt-repository ppa:git-core/ppa</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt update; apt install git</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">git config --global user.name "Andrey Bushman"</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">git config --global user.email bushman.andrey@gmail.com</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">git config --global core.editor "vim"</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;"># Google Chrome</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo dpkg -i google-chrome-stable_current_amd64.deb</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;"># GCC v7.3.0</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get update && \</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get install build-essential software-properties-common -y && \</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y && \</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get update && \</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get install gcc-snapshot -y && \</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get update && \</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get install gcc-7 g++-7 gcc-6 g++-6 gcc-multilib -y && \</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70 --slave /usr/bin/g++ g++ /usr/bin/g++-7 && \</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-6 && \</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get install gcc-5 g++-5 -y && \</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 50 --slave /usr/bin/g++ g++ /usr/bin/g++-5;</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo update-alternatives --config gcc</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;"># VIM</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">git clone https://github.com/vim/vim.git</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">cd vim</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">git pull</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">cd vim/src</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get install libncurses5-dev libncursesw5-dev</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"># make distclean # if you build Vim before</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">make</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo make install</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;"># .Net Core 2.1.200 SDK</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">wget -q packages-microsoft-prod.deb https://packages.microsoft.com/config/ubuntu/16.04/packages-microsoft-prod.deb</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo dpkg -i packages-microsoft-prod.deb</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get install apt-transport-https</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get update</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get install dotnet-sdk-2.1.200</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;"># Visual Studio Code</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get update</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get install code # or code-insiders</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;"># Sublime Text 3</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key add -</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get install apt-transport-https</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">echo "deb https://download.sublimetext.com/ apt/stable/" | sudo tee /etc/apt/sources.list.d/sublime-text.list</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get update</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get install sublime-text</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;"># Atom</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">curl -L https://packagecloud.io/AtomEditor/atom/gpgkey | sudo apt-key add -</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo sh -c 'echo "deb [arch=amd64] https://packagecloud.io/AtomEditor/atom/any/ any main" > /etc/apt/sources.list.d/atom.list'</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get update</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get install atom</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;"># JDK 10.0.1</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">wget https://download.java.net/java/GA/jdk10/10.0.1/fb4372174a714e6b8c52526dc134031e/10/openjdk-10.0.1_linux-x64_bin.tar.gz</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo tar xvf openjdk-10.0.1_linux-x64_bin.tar.gz -C /opt</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;"># NodeJS v8.11.1</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">wget -O node.tar.gz https://nodejs.org/dist/v8.11.1/node-v8.11.1-linux-x64.tar.xz</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo tar xf ./node.tar.gz -C /opt</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;"># JetBrains Clion 2018.1.2</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">wget -O ./CLion.tar.gz http://download.jetbrains.com/cpp/CLion-2018.1.2.tar.gz</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo tar xvf CLion.tar.gz -C /opt</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;"># JetBrains IntelliJ IDEA 2018.1.3</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">wget -O ./intellij.tar.gz http://download.jetbrains.com/idea/ideaIU-2018.1.3.tar.gz</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo tar xfz ./intellij.tar.gz -C /opt</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;"># JetBrains Rider 2018.1</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">wget -O ./rider.tar.gz http://download.jetbrains.com/rider/JetBrains.Rider-2018.1.tar.gz</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo tar xfz ./rider.tar.gz -C /opt</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;"># JetBrains WebStorm 2018.1.3</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">wget -O ./webstorm.tar.gz http://download.jetbrains.com/webstorm/WebStorm-2018.1.3.tar.gz</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo tar xfz ./webstorm.tar.gz -C /opt</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;"># JetBrains Pycharm 2018.1.2</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">wget -O ./pycharm.tar.gz http://download.jetbrains.com/python/pycharm-professional-2018.1.2.tar.gz</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo tar xfz ./pycharm.tar.gz -C /opt</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;"># JetBrains DataGrip 2018.1.2</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">wget -O ./datagrip.tar.gz http://download.jetbrains.com/datagrip/datagrip-2018.1.2.tar.gz</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo tar xfz ./datagrip.tar.gz -C /opt</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;"># JetBrains GoLand 2018.1.2</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">wget -O ./goland.tar.gz http://download.jetbrains.com/go/goland-2018.1.2.tar.gz</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo tar xfz ./goland.tar.gz -C /opt</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;"># Python v3.6.5</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">wget -O ./python.tar.xz https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tar.xz</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">tar xf ./python.tar.xz</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">cd ./Python-3.6.5</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">./configure</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">make</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">make test</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo make install</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;"># MS SQL Server 2017</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo add-apt-repository "$(curl https://packages.microsoft.com/config/ubuntu/16.04/mssql-server-2017.list)"</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get update</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/16.04/mssql-server-2017.list)"</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get update</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get install -y mssql-server</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo /opt/mssql/bin/mssql-conf setup</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">systemctl status mssql-server </span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;"># MS SQL Server Tools</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get update </span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get install mssql-tools unixodbc-dev</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get update </span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get install mssql-tools</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">source ~/.bashrc</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;"># Docker CE 17.03</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get update</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo add-apt-repository "deb https://download.docker.com/linux/$(. /etc/os-release; echo "") $(lsb_release -cs) stable"</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get update && sudo apt-get install -y docker-ce=$(apt-cache madison docker-ce | sudo grep 17.03 | sudo head -1 | sudo awk '{print }')</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;"># Kibernetes</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get update && sudo apt-get install -y apt-transport-https curl</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">cat <<EOF >/etc/apt/sources.list.d/kubernetes.list</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">deb http://apt.kubernetes.io/ kubernetes-xenial main</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">EOF</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get update</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get install -y kubelet kubeadm kubectl</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">sudo docker info | sudo grep -i cgroup</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">cat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo sed -i "s/cgroup-driver=systemd/cgroup-driver=cgroupfs/g" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">systemctl daemon-reload</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">systemctl restart kubelet</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;"># PowerShell Core</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">sudo apt-get install -y powershell</span><br />
<br />
<br /></div>
</div>
Andrey Bushmanhttp://www.blogger.com/profile/01700238372554577360noreply@blogger.com0tag:blogger.com,1999:blog-5357147933020835692.post-30125915522694408342017-07-21T16:11:00.000+03:002018-12-16T20:07:25.046+03:00Приведение к нужному типу объекта, полученного из JSON<div dir="ltr" style="text-align: left;" trbidi="on">
Комментарий в коде показывает место, в котором порой допускают ошибку в процессе решения обозначенной задачи.<br />
<br />
<a name='more'></a><br />
<span style="font-family: "courier new" , "courier" , monospace;">// JS6</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">class Foo{</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><span style="white-space: pre;"> </span>constructor(name,surname){</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><span style="white-space: pre;"> </span>this.name=name;</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><span style="white-space: pre;"> </span>this.surname=surname;</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><span style="white-space: pre;"> </span>};</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> fullName(){</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> <span style="white-space: pre;"> </span>return this.name + ' ' + this.surname;</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> };</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">};</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">let foo = new Foo('John', 'Smith');</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">console.log(foo.fullName());</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">let json = JSON.stringify(foo);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">let _foo = JSON.parse(json);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">/* ВНИМАНИЕ! Прототип экземпляров класса хранится в его свойстве prototype.</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> * Т.е. пытаться получить нужный прототип через Object.getPrototypeOf(Foo) в данном</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> * случае было бы неправильно. */</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">Object.setPrototypeOf(_foo, Foo.prototype);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">console.log(_foo.fullName());</span></div>
Andrey Bushmanhttp://www.blogger.com/profile/01700238372554577360noreply@blogger.com0tag:blogger.com,1999:blog-5357147933020835692.post-42706154464799377662017-01-10T01:32:00.000+03:002017-01-10T01:38:35.314+03:00Многопоточность и GUI<div dir="ltr" style="text-align: left;" trbidi="on">
Маленький пример использования многопоточности в приложениях, содержащих графический пользовательский интерфейс (GUI). Продемонстрировано два способа обращения к элементам пользовательского интерфейса из рабочего потока в UI-поток. Графический интерфейс при этом не "подвисает".<br />
<a name='more'></a><br />
.Net Framework 4.5 <br />
<br />
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;"> /* Sandbox.cs<br /> * © Andrey Bushman, 2017<br /> * <br /> * Небольшой пример создания дополнительного потока, <br /> * работающего параллельно с потоком пользовательского <br /> * интерфейса (UI) и обновляющего этот интерфейс по мере <br /> * необходимости. Дополнительных потоков можно создавать <br /> * сколько угодно. В данном примере для простоты создаётся <br /> * только один.<br /> * <br /> * В данном примере вместо прямого использоватия потока <br /> * (Thread) я использую задачу (Task), которая в свою очередь<br /> * использует пул потоков.<br /> * <br /> * Рабочий поток (т.е. задача) вычисляет текущую дату и время, <br /> * после чего записывает их в ListBox, находящийся в потоке UI.<br /> * <br /> * Снятие/установка галочки "Do work" управляет <br /> * стартом/завершением рабочего потока. Кнопка "Clear" очищает<br /> * ListBox и заголовок окна.<br /> * <br /> * В консоль выводятся идентификаторы текущих потоков и маркер<br /> * их принадлежности (или не принадлежности) к пулу потоков.<br /> * <br /> * В данном примере для обращения к потоку UI из рабочего <br /> * потока я использую два способа: диспетчер и контекст <br /> * синхронизации.<br /> * <br /> * В примере используется WPF, но всё то же самое применимо к<br /> * WinForms и ASP.NET.<br /> */<br />using System;<br />using System.Threading;<br />using System.Threading.Tasks;<br />using System.Windows;<br />using System.Windows.Controls;<br /><br />namespace Bushman.Sandbox {<br /><br /> class MyWindow : Window {<br /><br /> SynchronizationContext context = null;<br /><br /> public MyWindow() : base() {<br /><br /> Console.Title = "Sandbox";<br /> string prefix = "Main Window";<br /> Title = prefix;<br /> Topmost = true;<br /><br /> Width = 300;<br /> Height = 600;<br /><br /> ResizeMode = ResizeMode.NoResize;<br /><br /> WindowStartupLocation = WindowStartupLocation<br /> .CenterScreen;<br /><br /> Grid grid = new Grid();<br /> grid.RowDefinitions.Add(new RowDefinition());<br /> grid.RowDefinitions.Add(new RowDefinition());<br /> grid.ColumnDefinitions.Add(new ColumnDefinition());<br /> grid.ColumnDefinitions.Add(new ColumnDefinition());<br /><br /> grid.ColumnDefinitions[1].Width = new GridLength(0,<br /> GridUnitType.Auto);<br /> grid.RowDefinitions[1].Height = new GridLength(0,<br /> GridUnitType.Auto);<br /><br /> Content = grid;<br /><br /> Thickness margin = new Thickness(5, 5, 5, 5);<br /><br /> ListBox listbox = new ListBox();<br /> listbox.Margin = margin;<br /> grid.Children.Add(listbox);<br /> listbox.SetValue(Grid.RowProperty, 0);<br /> listbox.SetValue(Grid.ColumnProperty, 0);<br /> listbox.SetValue(Grid.ColumnSpanProperty, 2);<br /><br /> CheckBox chBox = new CheckBox();<br /> chBox.Margin = margin;<br /> chBox.Content = "Do work";<br /> grid.Children.Add(chBox);<br /> chBox.SetValue(Grid.ColumnProperty, 0);<br /> chBox.SetValue(Grid.RowProperty, 1);<br /><br /> Task task = null;<br /> long i = 0;<br /><br /> chBox.Checked += (s, e) => {<br /><br /> task = new Task(() => {<br /> using (task) {<br /> i = 0;<br /> while (Dispatcher.Invoke(<br /> () => chBox.IsChecked == true) &&<br /> i < long.MaxValue) {<br /><br /> // В рабочем потоке выполняем <br /> // некоторую работу. Например - <br /> // формируем строку текущих даты и <br /> // времени.<br /> string value = DateTime.Now<br /> .ToString("yyyy-MM-dd hh:mm:ss"<br /> );<br /><br /> // В данном примере мы мы можем <br /> // имитировать длительную работу, <br /> // либо заблокировать эту строку <br /> // кода, если такая имитация нам не<br /> // нужна:<br /> //Thread.Sleep(TimeSpan.FromSeconds<br /> // (1));<br /><br /> Console.WriteLine(<br /> "Current thread Id: {0}. " +<br /> "Is pull thread: {1}",<br /> Thread.CurrentThread<br /> .ManagedThreadId.ToString(),<br /> Thread.CurrentThread<br /> .IsThreadPoolThread);<br /><br /> // Результат наших "вычислений" <br /> //записываем в поток UI<br /> context.Post(_ => {<br /> listbox.Items.Add(value);<br /> Title = string.Format(<br /> "{0}. Items Count: {1}",<br /> prefix, i++.ToString());<br /><br /> Console.WriteLine(<br /> "Current thread Id: {0}. " +<br /> "Is pull thread: {1}",<br /> Thread.CurrentThread<br /> .ManagedThreadId.ToString(),<br /> Thread.CurrentThread<br /> .IsThreadPoolThread);<br /> }, null);<br /> }<br /> }<br /> });<br /><br /> task.Start();<br /> };<br /><br /> chBox.IsChecked = false;<br /><br /> Button button = new Button();<br /> button.Content = "Clear";<br /> button.Margin = margin;<br /> button.Padding = margin;<br /> grid.Children.Add(button);<br /> button.SetValue(Grid.ColumnProperty, 1);<br /> button.SetValue(Grid.RowProperty, 1);<br /> button.Click += (s, e) => {<br /> listbox.Items.Clear();<br /> Title = prefix;<br /> i = 0;<br /> };<br /><br /> EventHandler action = null;<br /><br /> action = (s, e) => {<br /> context = SynchronizationContext.Current;<br /> Activated -= action;<br /> };<br /><br /> Activated += action;<br /><br /> NameScope.SetNameScope(this, new NameScope());<br /> RegisterName(nameof(listbox), listbox);<br /> RegisterName(nameof(chBox), chBox);<br /> RegisterName(nameof(button), button);<br /> }<br /> }<br /><br /> class Sandbox {<br /> [STAThread]<br /> static void Main(string[] args) {<br /><br /> MyWindow win = new MyWindow();<br /> Application app = new Application();<br /> app.Run(win);<br /> }<br /> }<br />}</span></span><br />
<br />
Результат работы кода выглядит следующим образом:<br />
<br />
<img alt="" height="398" src="data:image/png;base64,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" width="640" /></div>
Andrey Bushmanhttp://www.blogger.com/profile/01700238372554577360noreply@blogger.com1tag:blogger.com,1999:blog-5357147933020835692.post-77278158995222753662016-11-20T02:28:00.001+03:002016-11-20T18:20:51.391+03:00О том, как можно генерировать локализованные версии справки<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="text-align: justify;">
Данная заметка рассказывает о том, как можно генерировать локализованные версии справочной системы на основе нашего программного кода (в данном случае написанном на C#). Если кто-то знает более удобный способ - с интересом почитаю о нём в комментариях к этой заметке.</div>
<br />
<a name='more'></a><b> Введение</b><br />
<div style="text-align: justify;">
Как известно, исходными данными для генерации справки являются XML-файлы, генерируемые MS Visual Studio. Эти файлы создаются в том случае, если в настройках нашего проекта, на вкладке <span style="font-family: "courier new" , "courier" , monospace;"><b>Build</b></span> установлена галочка <b><span style="font-family: "courier new" , "courier" , monospace;">XML documentation file</span></b>. Эти же файлы используются технологией <b><span style="font-family: "courier new" , "courier" , monospace;">IntelliSense</span></b> для того, чтобы выдавать всплывающие подсказки в редакторе кода, являясь весьма удобной и всеми нами любимой особенностью. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Обозначенные выше XML-файлы генерируются на основе специально оформленных комментариев, присутствующих в нашем коде. Такими комментариями обычно помечаются классы, свойства, методы, делегаты, события, структуры и перечисления. Полный перечень допустимых XML-тегов с примерами их использования опубликован в <a href="https://msdn.microsoft.com/en-us/library/5ast78ax.aspx" target="_blank">MSDN</a>.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Для того, чтобы иметь возможность генерировать документацию для разных локализаций (например для русской и английской), XML-комментарии следует выносить во внешние файлы, вместо того, чтобы размещать их непосредственно в наших файлах исходного кода. Более того, для каждой интересующей нас локализации в составе нашего решения следует создавать отдельный проект. Такой способ, помимо прочего, способствует разделению процесса разработки приложения от разработки документации. Т.е. в то время пока один разработчик пишет программный код, другой в это же время может параллельно заниматься составлением русскоязычной документации, а третий - англоязычной.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Например, если целевой проект имеет имя <b><span style="font-family: "courier new" , "courier" , monospace;">HelloDocs</span></b>, то для русской и английской версии справочной системы мы добавим в наш проект два новых решения - <b><span style="font-family: "courier new" , "courier" , monospace;">HelloDocs.Ru</span></b> и <b><span style="font-family: "courier new" , "courier" , monospace;">HelloDocs.En</span></b> (на основе шаблона <b><span style="font-family: "courier new" , "courier" , monospace;">Class Library</span></b>). В этих проектах мы будем размещать все XML-файлы: в <b><span style="font-family: "courier new" , "courier" , monospace;">HelloDocs.En</span></b><span style="font-family: inherit;"> - </span>англоязычная версия, а в <b><span style="font-family: "courier new" , "courier" , monospace;">HelloDocs.Ru</span></b> - русскоязычная. </div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
Затем в настройках обоих проектов следует указать <b>один и тот же</b>(!!!) каталог вывода: в настройках проекта, на вкладке <b><span style="font-family: "courier new" , "courier" , monospace;">Build</span></b> в свойстве <b><span style="font-family: "courier new" , "courier" , monospace;">Output path</span></b>. А <b>для всех</b> добавляемых (в дальнейшем) нами в эти проекты XML-файлов свойству <b><span style="font-family: "courier new" , "courier" , monospace;">Copy to Output Directory</span></b> следует <b>обязательно</b> назначать значение <b><span style="font-family: "courier new" , "courier" , monospace;">copy always</span></b>.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Вот пример исходного кода, определённого в составе файла <b><span style="font-family: "courier new" , "courier" , monospace;">Magic.cs</span></b> проекта <b><span style="font-family: "courier new" , "courier" , monospace;">HelloDocs</span></b>:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
</o:OfficeDocumentSettings>
</xml><![endif]--></div>
<div style="text-align: justify;">
<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>RU</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
<w:DontFlipMirrorIndents/>
<w:OverrideTableStyleHps/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val="Cambria Math"/>
<m:brkBin m:val="before"/>
<m:brkBinSub m:val="--"/>
<m:smallFrac m:val="off"/>
<m:dispDef/>
<m:lMargin m:val="0"/>
<m:rMargin m:val="0"/>
<m:defJc m:val="centerGroup"/>
<m:wrapIndent m:val="1440"/>
<m:intLim m:val="subSup"/>
<m:naryLim m:val="undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="false"
DefSemiHidden="false" DefQFormat="false" DefPriority="99"
LatentStyleCount="374">
<w:LsdException Locked="false" Priority="0" QFormat="true" Name="Normal"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 1"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 2"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 3"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 4"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 5"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 6"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 7"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 8"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 9"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 9"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 1"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 2"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 3"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 4"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 5"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 6"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 7"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 8"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 9"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Normal Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="footnote text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="annotation text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="header"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="footer"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index heading"/>
<w:LsdException Locked="false" Priority="35" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="caption"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="table of figures"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="envelope address"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="envelope return"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="footnote reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="annotation reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="line number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="page number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="endnote reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="endnote text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="table of authorities"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="macro"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="toa heading"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 5"/>
<w:LsdException Locked="false" Priority="10" QFormat="true" Name="Title"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Closing"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Signature"/>
<w:LsdException Locked="false" Priority="1" SemiHidden="true"
UnhideWhenUsed="true" Name="Default Paragraph Font"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Message Header"/>
<w:LsdException Locked="false" Priority="11" QFormat="true" Name="Subtitle"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Salutation"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Date"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text First Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text First Indent 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Heading"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text Indent 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text Indent 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Block Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Hyperlink"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="FollowedHyperlink"/>
<w:LsdException Locked="false" Priority="22" QFormat="true" Name="Strong"/>
<w:LsdException Locked="false" Priority="20" QFormat="true" Name="Emphasis"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Document Map"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Plain Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="E-mail Signature"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Top of Form"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Bottom of Form"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Normal (Web)"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Acronym"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Address"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Cite"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Code"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Definition"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Keyboard"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Preformatted"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Sample"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Typewriter"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Variable"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Normal Table"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="annotation subject"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="No List"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Outline List 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Outline List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Outline List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Simple 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Simple 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Simple 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Colorful 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Colorful 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Colorful 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table 3D effects 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table 3D effects 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table 3D effects 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Contemporary"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Elegant"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Professional"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Subtle 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Subtle 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Web 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Web 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Web 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Balloon Text"/>
<w:LsdException Locked="false" Priority="39" Name="Table Grid"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Theme"/>
<w:LsdException Locked="false" SemiHidden="true" Name="Placeholder Text"/>
<w:LsdException Locked="false" Priority="1" QFormat="true" Name="No Spacing"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading"/>
<w:LsdException Locked="false" Priority="61" Name="Light List"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 1"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 1"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 1"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 1"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 1"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 1"/>
<w:LsdException Locked="false" SemiHidden="true" Name="Revision"/>
<w:LsdException Locked="false" Priority="34" QFormat="true"
Name="List Paragraph"/>
<w:LsdException Locked="false" Priority="29" QFormat="true" Name="Quote"/>
<w:LsdException Locked="false" Priority="30" QFormat="true"
Name="Intense Quote"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 1"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 1"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 1"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 1"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 1"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 1"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 1"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 1"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 2"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 2"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 2"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 2"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 2"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 2"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 2"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 2"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 2"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 2"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 2"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 2"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 2"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 2"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 3"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 3"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 3"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 3"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 3"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 3"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 3"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 3"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 3"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 3"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 3"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 3"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 3"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 3"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 4"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 4"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 4"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 4"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 4"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 4"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 4"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 4"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 4"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 4"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 4"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 4"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 4"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 4"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 5"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 5"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 5"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 5"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 5"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 5"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 5"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 5"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 5"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 5"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 5"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 5"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 5"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 5"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 6"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 6"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 6"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 6"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 6"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 6"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 6"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 6"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 6"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 6"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 6"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 6"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 6"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 6"/>
<w:LsdException Locked="false" Priority="19" QFormat="true"
Name="Subtle Emphasis"/>
<w:LsdException Locked="false" Priority="21" QFormat="true"
Name="Intense Emphasis"/>
<w:LsdException Locked="false" Priority="31" QFormat="true"
Name="Subtle Reference"/>
<w:LsdException Locked="false" Priority="32" QFormat="true"
Name="Intense Reference"/>
<w:LsdException Locked="false" Priority="33" QFormat="true" Name="Book Title"/>
<w:LsdException Locked="false" Priority="37" SemiHidden="true"
UnhideWhenUsed="true" Name="Bibliography"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="TOC Heading"/>
<w:LsdException Locked="false" Priority="41" Name="Plain Table 1"/>
<w:LsdException Locked="false" Priority="42" Name="Plain Table 2"/>
<w:LsdException Locked="false" Priority="43" Name="Plain Table 3"/>
<w:LsdException Locked="false" Priority="44" Name="Plain Table 4"/>
<w:LsdException Locked="false" Priority="45" Name="Plain Table 5"/>
<w:LsdException Locked="false" Priority="40" Name="Grid Table Light"/>
<w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark"/>
<w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful"/>
<w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 1"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 1"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 1"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 1"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 1"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 2"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 2"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 2"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 2"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 2"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 3"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 3"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 3"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 3"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 3"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 4"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 4"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 4"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 4"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 4"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 5"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 5"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 5"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 5"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 5"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 6"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 6"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 6"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 6"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 6"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="46" Name="List Table 1 Light"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark"/>
<w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful"/>
<w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 1"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 1"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 1"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 1"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 1"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 2"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 2"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 2"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 2"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 2"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 3"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 3"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 3"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 3"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 3"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 4"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 4"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 4"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 4"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 4"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 5"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 5"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 5"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 5"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 5"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 6"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 6"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 6"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 6"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 6"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Mention"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Smart Hyperlink"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Hashtag"/>
</w:LatentStyles>
</xml><![endif]--><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Table Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin-top:0cm;
mso-para-margin-right:0cm;
mso-para-margin-bottom:8.0pt;
mso-para-margin-left:0cm;
line-height:107%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri",sans-serif;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-fareast-language:EN-US;}
</style>
<![endif]-->
</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span lang="EN-US" style="color: blue; font-family: "consolas";">namespace</span><span lang="EN-US" style="color: black; font-family: "consolas";"> HelloDocs {</span></span></div>
<span style="font-size: small;">
</span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<br /></div>
<span style="font-size: small;">
</span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span lang="EN-US" style="color: black; font-family: "consolas";"> </span><span lang="EN-US" style="color: grey; font-family: "consolas";">///</span><span lang="EN-US" style="color: green; font-family: "consolas";"> </span><span lang="EN-US" style="color: grey; font-family: "consolas";"><include file='doc/Magic.xml' </span><span lang="EN-US" style="color: black; font-family: "consolas";"></span></span></div>
<span style="font-size: small;">
</span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span lang="EN-US" style="color: black; font-family: "consolas";"> </span><span lang="EN-US" style="color: grey; font-family: "consolas";">///
path='Documentation/Member[@Name="HelloDocs.Magic"]/*'/></span><span lang="EN-US" style="color: black; font-family: "consolas";"></span></span></div>
<span style="font-size: small;">
</span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span lang="EN-US" style="color: black; font-family: "consolas";"> </span><span lang="EN-US" style="color: blue; font-family: "consolas";">public</span><span lang="EN-US" style="color: black; font-family: "consolas";"> </span><span lang="EN-US" style="color: blue; font-family: "consolas";">class</span><span lang="EN-US" style="color: black; font-family: "consolas";">
</span><span lang="EN-US" style="color: #2b91af; font-family: "consolas";">Magic</span><span lang="EN-US" style="color: black; font-family: "consolas";"> {</span></span></div>
<span style="font-size: small;">
</span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span lang="EN-US" style="color: black; font-family: "consolas";"> </span><span lang="EN-US" style="color: grey; font-family: "consolas";">///</span><span lang="EN-US" style="color: green; font-family: "consolas";"> </span><span lang="EN-US" style="color: grey; font-family: "consolas";"><include file='doc/Magic.xml' </span><span lang="EN-US" style="color: black; font-family: "consolas";"></span></span></div>
<span style="font-size: small;">
</span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span lang="EN-US" style="color: black; font-family: "consolas";"> </span><span lang="EN-US" style="color: grey; font-family: "consolas";">///
path='Documentation/Member[@Name="HelloDocs.Magic.Foo()"]/*'/></span><span lang="EN-US" style="color: black; font-family: "consolas";"></span></span></div>
<span style="font-size: small;">
</span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span lang="EN-US" style="color: black; font-family: "consolas";"> </span><span style="color: blue; font-family: "consolas";">public</span><span style="color: black; font-family: "consolas";"> </span><span style="color: blue; font-family: "consolas";">void</span><span style="color: black; font-family: "consolas";"> Foo() { }</span></span></div>
<span style="font-size: small;">
</span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span style="color: black; font-family: "consolas";">
}</span></span></div>
<span style="font-size: small;">
</span><br />
<div class="MsoNormal">
<span style="font-size: small;"><span style="color: black; font-family: "consolas"; line-height: 107%;">}</span></span><br />
<br /></div>
<div style="text-align: justify;">
Соответствующие ему XML-файлы с комментариями будут показаны ниже в данной заметке.</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
Обратите внимание на то, что в атрибутах <b><span style="font-family: "courier new" , "courier" , monospace;">file</span></b> элементов <b><span style="font-family: "courier new" , "courier" , monospace;">include</span></b> следует указывать файлы, размещённые не в каталогах локализованных проектов, созданных нами ранее, но файлы размещённые в директории, которую мы выше указали <i>в качестве выходного каталога</i> для локализованных проектов, добавленных нами. На данный момент в том каталоге ничего нет, но это временно, т.к. в процессе компиляции, нужные XML-файлы будут копироваться в тот каталог и Visual Studio найдёт их там в процессе сборки нашего проекта <b><span style="font-family: "courier new" , "courier" , monospace;">HelloDocs</span></b>.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Поскольку теперь для нас становился важен порядок компиляции проектов, то мы должны указать, что наш целевой проект зависит от локализованных проектов справочной системы. Соответственно они должны собираться раньше него:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<img alt="" height="377" src="data:image/png;base64,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" width="640" /></div>
<br />
<div style="text-align: justify;">
Затем в Менеджере Конфигураций для всех проектов локализованных
справочных систем следует снять галочки, оставив только для одного из
них. Поскольку в нашем примере локализованных версий будет две, то
снимаем галочку только для одного проекта:</div>
<br />
<img alt="" height="402" src="data:image/png;base64,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" width="640" /> <br />
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
В проект <b><span style="font-family: "courier new" , "courier" , monospace;">HelloDocs.En</span></b> добавим файл <b><span style="font-family: "courier new" , "courier" , monospace;">Magic.xml</span></b> с таким содержимым:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span lang="EN-US" style="color: blue; font-family: "consolas";"><?</span><span lang="EN-US" style="color: #a31515; font-family: "consolas";">xml</span><span lang="EN-US" style="color: blue; font-family: "consolas";"> </span><span lang="EN-US" style="color: red; font-family: "consolas";">version</span><span lang="EN-US" style="color: blue; font-family: "consolas";">=</span><span lang="EN-US" style="color: black; font-family: "consolas";">"</span><span lang="EN-US" style="color: blue; font-family: "consolas";">1.0</span><span lang="EN-US" style="color: black; font-family: "consolas";">"</span><span lang="EN-US" style="color: blue; font-family: "consolas";">
</span><span lang="EN-US" style="color: red; font-family: "consolas";">encoding</span><span lang="EN-US" style="color: blue; font-family: "consolas";">=</span><span lang="EN-US" style="color: black; font-family: "consolas";">"</span><span lang="EN-US" style="color: blue; font-family: "consolas";">utf-8</span><span lang="EN-US" style="color: black; font-family: "consolas";">"</span><span lang="EN-US" style="color: blue; font-family: "consolas";"> ?></span><span lang="EN-US" style="color: black; font-family: "consolas";"></span></span></div>
<span style="font-size: small;">
</span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span lang="EN-US" style="color: blue; font-family: "consolas";"><</span><span lang="EN-US" style="color: #a31515; font-family: "consolas";">Documentation</span><span lang="EN-US" style="color: blue; font-family: "consolas";">></span><span lang="EN-US" style="color: black; font-family: "consolas";"></span></span></div>
<span style="font-size: small;">
</span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span lang="EN-US" style="color: blue; font-family: "consolas";"> <</span><span lang="EN-US" style="color: #a31515; font-family: "consolas";">Member</span><span lang="EN-US" style="color: blue; font-family: "consolas";"> </span><span lang="EN-US" style="color: red; font-family: "consolas";">Name</span><span lang="EN-US" style="color: blue; font-family: "consolas";">=</span><span lang="EN-US" style="color: black; font-family: "consolas";">"</span><span lang="EN-US" style="color: blue; font-family: "consolas";">HelloDocs.Magic</span><span lang="EN-US" style="color: black; font-family: "consolas";">"</span><span lang="EN-US" style="color: blue; font-family: "consolas";">></span><span lang="EN-US" style="color: black; font-family: "consolas";"></span></span></div>
<span style="font-size: small;">
</span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span lang="EN-US" style="color: blue; font-family: "consolas";"> <</span><span lang="EN-US" style="color: #a31515; font-family: "consolas";">summary</span><span lang="EN-US" style="color: blue; font-family: "consolas";">></span><span lang="EN-US" style="color: black; font-family: "consolas";"></span></span></div>
<span style="font-size: small;">
</span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span lang="EN-US" style="color: black; font-family: "consolas";"> The </span><span lang="EN-US" style="color: blue; font-family: "consolas";"><</span><span lang="EN-US" style="color: #a31515; font-family: "consolas";">c</span><span lang="EN-US" style="color: blue; font-family: "consolas";">></span><span lang="EN-US" style="color: black; font-family: "consolas";">HelloDocs.Magic</span><span lang="EN-US" style="color: blue; font-family: "consolas";"></</span><span lang="EN-US" style="color: #a31515; font-family: "consolas";">c</span><span lang="EN-US" style="color: blue; font-family: "consolas";">></span><span lang="EN-US" style="color: black; font-family: "consolas";"> is super-class...</span></span></div>
<span style="font-size: small;">
</span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span lang="EN-US" style="color: blue; font-family: "consolas";"> </</span><span lang="EN-US" style="color: #a31515; font-family: "consolas";">summary</span><span lang="EN-US" style="color: blue; font-family: "consolas";">></span><span lang="EN-US" style="color: black; font-family: "consolas";"></span></span></div>
<span style="font-size: small;">
</span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span lang="EN-US" style="color: blue; font-family: "consolas";"> <</span><span lang="EN-US" style="color: #a31515; font-family: "consolas";">remarks</span><span lang="EN-US" style="color: blue; font-family: "consolas";">></span><span lang="EN-US" style="color: black; font-family: "consolas";"></span></span></div>
<span style="font-size: small;">
</span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span lang="EN-US" style="color: black; font-family: "consolas";"> Late it will be very popularly :)</span></span></div>
<span style="font-size: small;">
</span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span lang="EN-US" style="color: blue; font-family: "consolas";"> </</span><span lang="EN-US" style="color: #a31515; font-family: "consolas";">remarks</span><span lang="EN-US" style="color: blue; font-family: "consolas";">></span><span lang="EN-US" style="color: black; font-family: "consolas";"></span></span></div>
<span style="font-size: small;">
</span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span lang="EN-US" style="color: blue; font-family: "consolas";"> </</span><span lang="EN-US" style="color: #a31515; font-family: "consolas";">Member</span><span lang="EN-US" style="color: blue; font-family: "consolas";">></span><span lang="EN-US" style="color: black; font-family: "consolas";"></span></span></div>
<span style="font-size: small;">
</span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span lang="EN-US" style="color: blue; font-family: "consolas";"> <</span><span lang="EN-US" style="color: #a31515; font-family: "consolas";">Member</span><span lang="EN-US" style="color: blue; font-family: "consolas";"> </span><span lang="EN-US" style="color: red; font-family: "consolas";">Name</span><span lang="EN-US" style="color: blue; font-family: "consolas";">=</span><span lang="EN-US" style="color: black; font-family: "consolas";">"</span><span lang="EN-US" style="color: blue; font-family: "consolas";">HelloDocs.Magic.Foo()</span><span lang="EN-US" style="color: black; font-family: "consolas";">"</span><span lang="EN-US" style="color: blue; font-family: "consolas";">></span><span lang="EN-US" style="color: black; font-family: "consolas";"></span></span></div>
<span style="font-size: small;">
</span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span lang="EN-US" style="color: blue; font-family: "consolas";"> <</span><span lang="EN-US" style="color: #a31515; font-family: "consolas";">summary</span><span lang="EN-US" style="color: blue; font-family: "consolas";">></span><span lang="EN-US" style="color: black; font-family: "consolas";"></span></span></div>
<span style="font-size: small;">
</span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span lang="EN-US" style="color: black; font-family: "consolas";"> The super-method...</span></span></div>
<span style="font-size: small;">
</span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span lang="EN-US" style="color: blue; font-family: "consolas";"> </</span><span lang="EN-US" style="color: #a31515; font-family: "consolas";">summary</span><span lang="EN-US" style="color: blue; font-family: "consolas";">></span><span lang="EN-US" style="color: black; font-family: "consolas";"></span></span></div>
<span style="font-size: small;">
</span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span lang="EN-US" style="color: blue; font-family: "consolas";"> <</span><span lang="EN-US" style="color: #a31515; font-family: "consolas";">remarks</span><span lang="EN-US" style="color: blue; font-family: "consolas";">></span><span lang="EN-US" style="color: black; font-family: "consolas";">It
does nothing still... :)</span><span lang="EN-US" style="color: blue; font-family: "consolas";"></</span><span lang="EN-US" style="color: #a31515; font-family: "consolas";">remarks</span><span lang="EN-US" style="color: blue; font-family: "consolas";">></span><span lang="EN-US" style="color: black; font-family: "consolas";"></span></span></div>
<span style="font-size: small;">
</span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span lang="EN-US" style="color: blue; font-family: "consolas";"> </span><span style="color: blue; font-family: "consolas";"></</span><span style="color: #a31515; font-family: "consolas";">Member</span><span style="color: blue; font-family: "consolas";">></span><span style="color: black; font-family: "consolas";"></span></span></div>
<span style="font-size: small;">
</span><br />
<div class="MsoNormal">
<span style="font-size: small;"><span style="color: blue; font-family: "consolas"; line-height: 107%;"></</span><span style="color: #a31515; font-family: "consolas"; line-height: 107%;">Documentation</span><span style="color: blue; font-family: "consolas"; line-height: 107%;">></span></span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
В проект <b><span style="font-family: "courier new" , "courier" , monospace;">HelloDocs.Ru</span></b> добавим файл <b><span style="font-family: "courier new" , "courier" , monospace;">Magic.xml</span></b> с таким содержимым:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;"><span lang="EN-US" style="color: blue;"><?</span><span lang="EN-US" style="color: #a31515;">xml</span><span lang="EN-US" style="color: blue;"> </span><span lang="EN-US" style="color: red;">version</span><span lang="EN-US" style="color: blue;">=</span><span lang="EN-US" style="color: black;">"</span><span lang="EN-US" style="color: blue;">1.0</span><span lang="EN-US" style="color: black;">"</span><span lang="EN-US" style="color: blue;">
</span><span lang="EN-US" style="color: red;">encoding</span><span lang="EN-US" style="color: blue;">=</span><span lang="EN-US" style="color: black;">"</span><span lang="EN-US" style="color: blue;">utf-8</span><span lang="EN-US" style="color: black;">"</span><span lang="EN-US" style="color: blue;"> ?></span><span lang="EN-US" style="color: black;"></span></span></span></div>
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;">
</span></span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;"><span lang="EN-US" style="color: blue;"><</span><span lang="EN-US" style="color: #a31515;">Documentation</span><span lang="EN-US" style="color: blue;">></span><span lang="EN-US" style="color: black;"></span></span></span></div>
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;">
</span></span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;"><span lang="EN-US" style="color: blue;"> <</span><span lang="EN-US" style="color: #a31515;">Member</span><span lang="EN-US" style="color: blue;"> </span><span lang="EN-US" style="color: red;">Name</span><span lang="EN-US" style="color: blue;">=</span><span lang="EN-US" style="color: black;">"</span><span lang="EN-US" style="color: blue;">HelloDocs.Magic</span><span lang="EN-US" style="color: black;">"</span><span lang="EN-US" style="color: blue;">></span><span lang="EN-US" style="color: black;"></span></span></span></div>
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;">
</span></span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;"><span lang="EN-US" style="color: blue;"> <</span><span lang="EN-US" style="color: #a31515;">summary</span><span lang="EN-US" style="color: blue;">></span><span lang="EN-US" style="color: black;"></span></span></span></div>
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;">
</span></span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;"><span lang="EN-US" style="color: black;"> </span><span style="color: black;">Наш </span><span style="color: blue;"><</span><span style="color: #a31515;">c</span><span style="color: blue;">></span><span style="color: black;">HelloDocs.Magic</span><span style="color: blue;"></</span><span style="color: #a31515;">c</span><span style="color: blue;">></span><span style="color: black;"> есть супер-класс...</span></span></span></div>
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;">
</span></span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;"><span style="color: blue;">
</</span><span style="color: #a31515;">summary</span><span style="color: blue;">></span><span style="color: black;"></span></span></span></div>
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;">
</span></span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;"><span style="color: blue;">
<</span><span style="color: #a31515;">remarks</span><span style="color: blue;">></span><span style="color: black;"></span></span></span></div>
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;">
</span></span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;"><span style="color: black;">
Позднее он будет очень популярен! :)</span></span></span></div>
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;">
</span></span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;"><span style="color: blue;">
</span><span lang="EN-US" style="color: blue;"></</span><span lang="EN-US" style="color: #a31515;">remarks</span><span lang="EN-US" style="color: blue;">></span><span lang="EN-US" style="color: black;"></span></span></span></div>
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;">
</span></span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;"><span lang="EN-US" style="color: blue;"> </</span><span lang="EN-US" style="color: #a31515;">Member</span><span lang="EN-US" style="color: blue;">></span><span lang="EN-US" style="color: black;"></span></span></span></div>
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;">
</span></span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;"><span lang="EN-US" style="color: blue;"> <</span><span lang="EN-US" style="color: #a31515;">Member</span><span lang="EN-US" style="color: blue;"> </span><span lang="EN-US" style="color: red;">Name</span><span lang="EN-US" style="color: blue;">=</span><span lang="EN-US" style="color: black;">"</span><span lang="EN-US" style="color: blue;">HelloDocs.Magic.Foo()</span><span lang="EN-US" style="color: black;">"</span><span lang="EN-US" style="color: blue;">></span><span lang="EN-US" style="color: black;"></span></span></span></div>
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;">
</span></span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;"><span lang="EN-US" style="color: blue;"> </span><span style="color: blue;"><</span><span style="color: #a31515;">summary</span><span style="color: blue;">></span><span style="color: black;"></span></span></span></div>
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;">
</span></span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;"><span style="color: black;">
Это супер-метод...</span></span></span></div>
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;">
</span></span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;"><span style="color: blue;">
</</span><span style="color: #a31515;">summary</span><span style="color: blue;">></span><span style="color: black;"></span></span></span></div>
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;">
</span></span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;"><span style="color: blue;">
<</span><span style="color: #a31515;">remarks</span><span style="color: blue;">></span><span style="color: black;">Пока он ничего не делает...
:)</span><span style="color: blue;"></</span><span style="color: #a31515;">remarks</span><span style="color: blue;">></span><span style="color: black;"></span></span></span></div>
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;">
</span></span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;">
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;"><span style="color: blue;">
</</span><span style="color: #a31515;">Member</span><span style="color: blue;">></span><span style="color: black;"></span></span></span></div>
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;">
</span></span><br />
<div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;"><span style="color: blue; line-height: 107%;"></</span><span style="color: #a31515; line-height: 107%;">Documentation</span><span style="color: blue; line-height: 107%;">></span></span></span></div>
<br />
<div style="text-align: justify;">
Не забываем для этих XML-файлов изменить значение свойства <b><span style="font-family: "courier new" , "courier" , monospace;">Copy to Output Directory</span></b>, как было указано выше. Обратите внимание, что эти файлы имеют одинаковые имена и одинаковую XML-структуру. Различие состоит только в содержимом соответствующих XML-элементов (<b>это важно!!!</b>).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Теперь наше решение выглядит следующим образом:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<img alt="" src="data:image/png;base64,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" /> </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
XML-файлы, генерируемые Visual Studio на основе XML-файлов наших локализованных проектов теперь могут использоваться в <a href="https://github.com/EWSoftware/SHFB/releases" target="_blank">Sandcastle</a> для генерации конечной документации.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Если <b><span style="font-family: "courier new" , "courier" , monospace;">Sandcastle</span></b> ещё не установлен на вашей машине, то теперь самое время это сделать. Для установки <b><span style="font-family: "courier new" , "courier" , monospace;">Sancastle</span></b> требуются административные права. После установки, в перечне доступных типов проектов IDE появляется дополнительный тип проекта, при помощи которого можно генерировать справку для интересующего нас проекта. Добавим в наше решение новый проект, созданный на основе нужного нам шаблона и присвоим ему имя <b><span style="font-family: "courier new" , "courier" , monospace;">HelpDocs.Doc</span></b>:</div>
<br />
<img alt="" height="360" src="data:image/png;base64,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" width="640" /><br />
<br />
<br />
Создав проект справки, первым делом мы указываем в его настройках источник, откуда нужно будет получить данные для формирования документации:<br />
<br />
<img alt="" height="348" src="data:image/png;base64,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" width="640" /> <br />
<br />
Интересующий нас формат справки указывается в настройках нашего <b><span style="font-family: "courier new" , "courier" , monospace;">Sandcastle</span></b>-проекта: <br />
<img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPgAAAERCAIAAADZj/2iAAAJEUlEQVR4nO3a3XHbOBSGYXagUlxCSkgJaWE70Mze7O12kBJSiktICUoHzIVmGAY4ODiE+APoe5/xZGQaBEHrlaxInH4BAqarFwCcgdAhgdAhgdAhIRT6tFIdmdwwf+rvu5fghPHjLr8B/zSdHXGVzSm8Uk++sWHmuH1Db3jobpq/GQ+hCEIndAntofsbk5+ar3yS7cu/5jBnS+mFQXDCZM3mbOZSzdP0d1xvyddprsE82Xw2czyPgUX7a3SnFfPGL+v3XgolOKGzvWFCP5GG83V2dI67dT3Ob5jQF4c/o28K3Zyw+hjLB2ya8JWl+uuMn2N88PpY5lKJ2zRA6P6SnPs1OOFeoW9aRuS4Db/h6mJk7RC6/+xoDvNnNncv7UjowTMSFw3d/Lu8bKk+kSfD/EnM3Z0HjLm2TRP6p+nM5kxr7mgOa7idz7D8Dv2Hqyx+EX+QxRvjrv2D0N8Yd+0fhP7GuGshgdAhgdAhgdAhgdAhgdAhgdAhgdAhIRT6v//9zxdfQ3y9GvoMdI/QIYHQIWG30P+JufZsIWvP0KsHM8dM02RumSzm+GSe0gDnWMHBjoZ5Ns3fvAuezgj9fr///PmzNKYaX/6tuctVoa8fhJsmaauW1tscHvqPHz+mabrdbqUxo4fuDyb0Thwb+uPxuN1u0zTd7/fSmIbQk43JlubQk4dQMqHztF06qPkQ9afNN+bHpfUG+4d+v98/Pz+ft79+/TpN08fHRzJmrfRafD0g/7Y59NKx/BvVyauhB/8KlRL3p0LVzqF///59mqbb7fb5+fl80TJN09L9js/oc7nvtmf0SPrO5G2hm8uo7k7oDXYO/fF4fHx8PHNZv2hZj0n0E3rkR4Q+qP1fujwejy9fvjxbX160JGPWmkMv3SZ05I76z+i3b9/WL1rMMU9HhJ68CAkey3npUprQmTk+/7wldCpvc+C7Lknl5pghvNLW7l0SepvrPxnt34tt7ZgmlTfjWpc68noDXL0ICYQOCYQOCYQOCYQOCbzrAgnXv4/e8Jmis2/Dh5eRCU94h7HtEG0nJaiL0M28IpeanBb60ZqPEtyR1gcLPR9W3RL5UWnYaX0Q+tG6CH228mq7ZjB/wZP/aJnfnDZyrdWma7D8UzN3TA6Rj6+eS/5iT7z1MULPv1025pLx5g3nz4Ufel5Y/NvZKjI/or/OavTmSZU26ugl9LkcRz4ysiWSvjlDvpLItPm//hpKZ7HLbULPjRR6vtEPPfKjhtCdwQ2PVWc9zjr9cyH0XEehl25H7m9/r/iE642E/k4GCH22/muVj6nu5byi8FdVXYxfZPWly1wLN1989dDB4+q4PvTzdXivH72kDk/5ZITei+NW1ef5nkzxWhfueEFcvQgJhA4JhA4JhA4JhA4Jiu+6QFAv76NXP6ps439i74yvriT48X4Q73gerYvQqxefvCLyQXq+0V/GEReT0Pqhrg9936dGk3mRFqFL6Tr0JVDzSqlkvPPKxwzd37Lpei/zMq/SskuH9g+KF/Ueeh6BeaPaSt7cvEfo1V6dCZ3isbveQzc3Js+X1VaqT6LOo8hf8Cuh5xsJ/ThDhu7MQOgwXR/6HEhnfiH0eIv+UarjeenSsy5Cn2v/eyttX75d/ygZmR/I2cV5gVSadhmTb3SWnR+Uyg/VS+imbu/7IxbW7cm+B0JvtO/aej7T99D1tS7c/dgLVy9CAqFDAqFDAqFDAqFDQtfvugB7uf599NJ7iMH3Fv1hh75B2TA5H4JepYvQzQ/qOw+9bebItTQ4AqE3IvSxdBH67F7klF8gtR5QurTL3CtyKVgyeeSirmSkczlX6aA42gChJ9tn65pYv1p//tK3zrNv/vgpLSyyNpygl9DnQnDLbefJOH/6LE3uHNE/emnNkduE3oMBQq8+RxI6qjoKvXQ78mKgtGNXoSePSUI/0wChz7H/R5pP884km47uLDu+/tJeOMH1oQ/qxVIJ/WSE3q45Vio/H9e6QAJXL0ICoUMCoUMCoUMCoUMC77pAwsXvozufU+bfVrdvHVPaq/SZ/2SJrNNZjH/dzpx9oJsc2hxcWkOy5tLpvKW3Db1hsNNldZ2lQP01VOfJrykoXWVQnSG+BnPY6K7/ZDS5J7Y+C1aNEro52F9J6afVaf1zMYeNbozQk5LWf3yTqfLZkj/KpT/Q8bxK3zrPvs2h+98eEbozcmgDhG7ecH7qbA8+Z0+W0uB85c65VCeJrK00gzlJ8kurnktptaO7PvT57yzMaPJn5WRf57Y/VXUec4vfaPVBWD2iX3DpFMw5eUZ/GiN0c7z5Uz8y5y48OfR8BucPiDl58CwI/amL0OfWpzdn8CWhl25v/QMyW1k7oZcOVPoz6JyLM3JoA4Q+r57wkm+TvZzg8n2dNRwRen4Kzvma+wYHJ9v9X1r11N5GL6H34LT7uOeYel7bKwj9L+96Nwe98elzrQskcPUiJBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JBA6JOwQOl98DfH1UujA6AgdEggdEggdEggdEggdEggdEggdEggdEggdEn4DX51S3K2tf8MAAAAASUVORK5CYII=" /><br />
Теперь запустив сборку нашего решения мы получим не только наш DLL, но и сгенерированный файл справки:<br />
<br />
<img alt="" height="319" src="data:image/png;base64,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" width="640" /><br />
<br />
На скрине красной линией подчёркнут английский текст нашего XML-файла. Теперь отключим сборку англоязычной справки и включим русскоязычную:<br />
<br />
<img alt="" height="402" src="data:image/png;base64,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" width="640" /><br />
<br />
<br />
Затем в настройках проекта <b><span style="font-family: "courier new" , "courier" , monospace;">HelpDocs.Doc</span></b> меняем свойство <b><span style="font-family: "courier new" , "courier" , monospace;">Help file language</span></b>, выбрав в нём русскую локализацию (чтобы дополнительный текст, присутствующий в документации, был так же на русском языке):<br />
<br />
<img alt="" height="265" src="data:image/png;base64,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" width="640" /><br />
<br />
Теперь снова запускаем сборку нашего решения и проверяем сгенерированный файл справки:<br />
<br />
<img alt="" height="319" src="data:image/png;base64,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" width="640" /><br />
<br />
Как мы видим - теперь мы получили русский вариант справки. Т.о. при желании мы можем реализовать столько локализаций нашей справочной системы, сколько посчитаем нужным.<br />
<br />
<b>P.S.</b><br />
В идеале, конечно же, было бы избавиться от необходимости переключения галочек и правки свойства нашего Sandcastle-проекта, путём создания такого проекта отдельно под каждую локализацию. Но проблема заключается в том, что в нашем исходном коде жёстко прописан каталог, в котором следует искать XML-файл.<br />
<br />
Конечно, можно было бы решить эту проблему при помощи конструкций <span style="font-family: "courier new" , "courier" , monospace;"><b>#if/#elif/#endif</b></span>:<br />
<br />
<pre class="lang-cs prettyprint prettyprinted" style="background-color: #eff0f1; border: 0px; color: #393318; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; margin-bottom: 1em; max-height: 600px; overflow: auto; padding: 5px; width: auto; word-wrap: normal;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; margin: 0px; padding: 0px; white-space: inherit;"><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">namespace </span><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">HelloDocs</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">{</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="com" style="border: 0px; color: #858c93; margin: 0px; padding: 0px;">#if ENU</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="com" style="border: 0px; color: #858c93; margin: 0px; padding: 0px;">/// <include file='Magic.doc.enu.xml' </span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="com" style="border: 0px; color: #858c93; margin: 0px; padding: 0px;">/// path='Documentation/Member[@Name="HelloDocs.Magic"]/*'/></span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="com" style="border: 0px; color: #858c93; margin: 0px; padding: 0px;">#elif</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> RUS
</span><span class="com" style="border: 0px; color: #858c93; margin: 0px; padding: 0px;">/// <include file='Magic.doc.rus.xml' </span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="com" style="border: 0px; color: #858c93; margin: 0px; padding: 0px;">/// path='Documentation/Member[@Name="HelloDocs.Magic"]/*'/></span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="com" style="border: 0px; color: #858c93; margin: 0px; padding: 0px;">#endif</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">public</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">class</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">Magic</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">{</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="com" style="border: 0px; color: #858c93; margin: 0px; padding: 0px;">#if ENU</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="com" style="border: 0px; color: #858c93; margin: 0px; padding: 0px;">/// <include file='Magic.doc.enu.xml' </span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="com" style="border: 0px; color: #858c93; margin: 0px; padding: 0px;">/// path='Documentation/Member[@Name="HelloDocs.Magic.Foo()"]/*'/></span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="com" style="border: 0px; color: #858c93; margin: 0px; padding: 0px;">#elif</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> RUS
</span><span class="com" style="border: 0px; color: #858c93; margin: 0px; padding: 0px;">/// <include file='Magic.doc.rus.xml' </span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="com" style="border: 0px; color: #858c93; margin: 0px; padding: 0px;">/// path='Documentation/Member[@Name="HelloDocs.Magic.Foo()"]/*'/></span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="com" style="border: 0px; color: #858c93; margin: 0px; padding: 0px;">#endif</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">public</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">void</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">Foo</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">()</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">{</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">}</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">}</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">}</span></code></pre>
<br />
Однако писать такие конструкции - процесс весьма трудоёмкий. К тому же, в случае добавления новой локализации придётся везде в коде добавлять дополнительный блок <span style="font-family: "courier new" , "courier" , monospace;"><b>#elif</b></span>, что может оказаться очень затратным по времени для больших и даже средних проектов.<br />
<br />
<b>Дополнительные ресурсы</b><br />
<ul style="text-align: left;">
<li><a href="https://habrahabr.ru/post/102177/" target="_blank">Создание документации в .NET</a> </li>
<li><a href="https://habrahabr.ru/post/243039/" target="_blank">Sandcastle и SHFB</a></li>
</ul>
</div>
Andrey Bushmanhttp://www.blogger.com/profile/01700238372554577360noreply@blogger.com0tag:blogger.com,1999:blog-5357147933020835692.post-17839260742838005962016-11-14T18:11:00.000+03:002016-11-14T18:11:10.555+03:00NuGet-пакет для Revit 2017<div dir="ltr" style="text-align: left;" trbidi="on">
На <a class="bbc_link" href="https://www.nuget.org/" target="_blank">https://www.nuget.org</a> не нашёл от Autodesk NuGet-пакетов для Revit 2017. Соответственно, сделал свой.<br />
<a name='more'></a><br />Результат здесь: <a class="bbc_link" href="https://www.nuget.org/packages/Revit-2017x64.Base/1.0.0" target="_blank">https://www.nuget.org/packages/Revit-2017x64.Base/1.0.0</a><br />
<br />
Пакет подключает к проекту файлы <span class="bbc_font" style="font-family: courier;">RevitAPI.dll, RevitAPIUI.dll, RevitAPIIFC.dll, RevitAPIMacros.dll,</span> и <span class="bbc_font" style="font-family: courier;">RevitAPIUIMacros.dll</span>. В процессе подключения обозначенных сборок, пакет назначает их свойству <span class="bbc_font" style="font-family: courier;">Copy Local</span> значение <span class="bbc_font" style="font-family: courier;">False</span>.</div>
Andrey Bushmanhttp://www.blogger.com/profile/01700238372554577360noreply@blogger.com0tag:blogger.com,1999:blog-5357147933020835692.post-11321629245778210942016-10-10T12:50:00.001+03:002016-10-10T12:59:38.018+03:00CHM: о наименовании каталогов и файлов исходников.<div dir="ltr" style="text-align: left;" trbidi="on">
Недавно столкнулся с проблемой, когда <a href="http://www.helpandmanual.com/" target="_blank">Help and Manual</a> не мог успешно компилировать мой проект в документацию CHM-формата. Причём тот же самый проект успешно опубликовывался в PDF-версию.<br />
<br />
<a name='more'></a>При формировании CHM-файла программа <i>Help and Manual</i> использует "родной" инструмент от Microsoft - утилиту <span style="font-family: "courier new" , "courier" , monospace;">hhc.exe</span>. Мой проблемный проект находился в каталоге "<span style="font-family: "courier new" , "courier" , monospace;">%projects%\MyProjectName.help\</span>" и файл проекта имел имя "<span style="font-family: "courier new" , "courier" , monospace;">MyProjectName.help.hmxp</span>". Любые попытки собрать на его основе CHM-документацию приводили к ошибкам компиляции:<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmZ-8KECVwmchkGnro-gQ_JtZeQAhSVamvEhW8SWQd3eOPKn3G3G1KHiFYYR3ko3_X6CEKuHfJaVUEqxF581OW_e9ncJvOvKDOFyYIpSwGb1QE3vKZEAJRFwnQ6iqgtKt-j6qimOyRwu6j/s1600/0.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmZ-8KECVwmchkGnro-gQ_JtZeQAhSVamvEhW8SWQd3eOPKn3G3G1KHiFYYR3ko3_X6CEKuHfJaVUEqxF581OW_e9ncJvOvKDOFyYIpSwGb1QE3vKZEAJRFwnQ6iqgtKt-j6qimOyRwu6j/s640/0.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7oWgqZ74KBuzocDk1bU4B-AGnPMgiXvWqwHwHhERjtgYPPCJGtU5RrUKSBo7uuVrvVUFmZMPouzRJHOjOUdPHEu6ap6H7xLb51M4fNlTJBkDhqUZkxz2lUkkzX693g5c2eCPB4CEOwyr7/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="172" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7oWgqZ74KBuzocDk1bU4B-AGnPMgiXvWqwHwHhERjtgYPPCJGtU5RrUKSBo7uuVrvVUFmZMPouzRJHOjOUdPHEu6ap6H7xLb51M4fNlTJBkDhqUZkxz2lUkkzX693g5c2eCPB4CEOwyr7/s640/1.png" width="640" /></a></div>
<br />
Группа технической поддержки <i>Help and Manual</i> помогла мне разобраться с причиной возникновения подобных ошибок (за что я им весьма признателен):<br />
<blockquote class="tr_bq">
<i>In your case the error may be caused by the dot and the word "help" in the folder name and CHM file name. The combination of the dot and the letter "h" (and possibly also the word "help") in filenames and folder names is poison for the Microsoft CHM system on some versions of Windows. It is very ancient and has not been updated or bugfixed since it was originally released with Windows 98. </i></blockquote>
<br />
Получив такой ответ, я заменил "." на "_" (перед "<i>help</i>") в имени каталога проекта, а так же в имени HMXP-файла, после чего проблема со сборкой CHM-справки сразу же исчезла.<br />
<br /></div>
Andrey Bushmanhttp://www.blogger.com/profile/01700238372554577360noreply@blogger.com0tag:blogger.com,1999:blog-5357147933020835692.post-85533179157745943932016-08-20T03:14:00.004+03:002016-09-22T22:05:33.437+03:00Динамический вызов функций неуправляемых DLL<div dir="ltr" style="text-align: left;" trbidi="on">
В .NET-атрибутах можно указывать только константные выражения. Т.о. атрибуту <span style="font-family: "courier new" , "courier" , monospace;">DllImport</span> нужно указывать имя библиотеки <i>статически</i>, дабы это имя было известно на этапе компиляции. Порой это порождает уродливые конструкции, разрастающиеся как снежный ком, по мере появления новых версий AutoCAD. Наглядный тому пример можно увидеть <a href="http://adn-cis.org/forum/index.php?topic=7115.msg20716#msg20716" target="_blank">здесь</a> в коде Александра Ривилиса: по мере появления AutoCAD 2018, 2019 и т.д. - этот код придётся каждый раз дописывать.<br />
<br />
<a name='more'></a><br />
Как правило, имя нужной DLL достаточно просто выяснить во время выполнения кода. Например, в обозначенном выше коде Александра Ривилиса нужная функция хранится в файлах <span style="font-family: "courier new" , "courier" , monospace;">acdb17.dll, acdb18.dll, ac1st19.dll, ac1st20.dll, ac1st21.dll</span>. Т.е. мы видим, что каждая библиотека в качестве суффикса использует значение <i>Major</i> версии приложения. Кроме того, мы видим, что начиная с версии 19 (AutoCAD 2013) функция была перенесена в др. библиотеку (т.е. изменился префикс в её имени). Зная обозначенные выше правила, можно динамически вычислить имя DLL файла, в котором находится интересующая нас функция.<br />
<br />
Далее показываю небольшой пример того, как можно <i>динамически</i> вызывать функцию <span style="font-family: "courier new" , "courier" , monospace;">acedSetEnv</span> в разных версиях AutoCAD, <i>не создавая для неё статических обёрток</i>. На всякий случай напоминаю, что до версии AutoCAD 2013 эта функция находилась в файле <span style="font-family: "courier new" , "courier" , monospace;">acad.exe</span>, а начиная с AutoCAD 2013 была перенесена в <span style="font-family: "courier new" , "courier" , monospace;">accore.dll</span>.<br />
<br />
Код проверялся в AutoCAD 2009 и 2016. <br />
<br />
-------------------------------------------------------------<br />
<span style="font-family: "courier new" , "courier" , monospace;"><span style="font-family: "courier new" , "courier" , monospace;">/* Utils.cs */<br />using System;<br />using System.Text;<br />using System.Runtime.InteropServices;<br />using cad = Autodesk.AutoCAD.ApplicationServices.Application;<br /><br />namespace Bushman.AutoCAD.Sandbox {<br /><br /> [UnmanagedFunctionPointer(CallingConvention.Cdecl, CharSet<br /> = CharSet.Auto)]<br /> public delegate int acedSetEnvDelegate(string envName,<br /> StringBuilder NewValue);<br /><br /> public static class Utils {<br /><br /> [DllImport("kernel32.dll")]<br /> public static extern IntPtr LoadLibrary(string<br /> dllToLoad);<br /><br /> [DllImport("kernel32.dll")]<br /> public static extern IntPtr GetProcAddress(IntPtr<br /> hModule, string procedureName);<br /><br /><br /> [DllImport("kernel32.dll")]<br /> public static extern bool FreeLibrary(IntPtr hModule);<br /><br /> const int AutoCAD_2013_Major = 19;<br /><br /> public static string GetDllName() {<br /><br /> if (cad.Version.Major < AutoCAD_2013_Major)<br /> return "acad.exe";<br /> else<br /> return "accore.dll";<br /> }<br /><br /> public static acedSetEnvDelegate acedSetEnv;<br /><br /> static Utils() {<br /> acedSetEnv = GetAcedSetEnv();<br /> }<br /><br /> static acedSetEnvDelegate GetAcedSetEnv() {<br /><br /> string dllName = Utils.GetDllName();<br /> IntPtr pDll = Utils.LoadLibrary(dllName);<br /><br /> if (pDll == IntPtr.Zero) {<br /> return null;<br /> }<br /><br /> string funcName = "acedSetEnv";<br /><br /> IntPtr pAddressOfFunctionToCall = Utils<br /> .GetProcAddress(pDll, funcName);<br /><br /> if (pAddressOfFunctionToCall == IntPtr.Zero) {<br /><br /> return null;<br /> }<br /><br /> acedSetEnvDelegate acedSetEnv = (<br /> acedSetEnvDelegate) Marshal<br /> .GetDelegateForFunctionPointer(<br /> pAddressOfFunctionToCall,<br /> typeof(acedSetEnvDelegate));<br /><br /> bool result = Utils.FreeLibrary(pDll);<br /><br /> return acedSetEnv;<br /> }<br /> }<br />}</span></span><br />
------------------------------------------------------------ <br />
<br />
Далее создадим тестовую команду, которая изменит значение переменной "<span style="font-family: "courier new" , "courier" , monospace;">ACAD</span>":<br />
<br />
------------------------------------------------------------<br />
<span style="font-family: "courier new" , "courier" , monospace;">/* Commands.cs */<br />using System;<br />using System.Runtime.InteropServices;<br />using System.Text;<br />using cad = Autodesk.AutoCAD.ApplicationServices.Application;<br />using Autodesk.AutoCAD.ApplicationServices;<br />using Autodesk.AutoCAD.EditorInput;<br />using Autodesk.AutoCAD.Runtime;<br /><br />namespace Bushman.AutoCAD.Sandbox {<br /><br /> public sealed class Commands {<br /><br /> [CommandMethod("Test", CommandFlags.Modal)]<br /> public void Test() {<br /><br /> Document doc = cad.DocumentManager<br /> .MdiActiveDocument;<br /><br /> if (doc == null)<br /> return;<br /><br /> Editor ed = doc.Editor;<br /><br /> acedSetEnvDelegate acedSetEnv = Utils.acedSetEnv;<br /><br /> if (acedSetEnv == null) {<br /> ed.WriteMessage("acedSetEnv function was " +<br /> "not found.");<br /> return;<br /> }<br /><br /> /* For example, we'll edit the "Support File Search<br /> * Path" value: */<br /> string varName = "ACAD";<br /> StringBuilder sb = new StringBuilder(<br /> @"C:\abc\def");<br /><br /> int theResult = acedSetEnv(varName, sb); // 5100<br /> }<br /> }<br />}</span><br />
---------------------------------------------------------------<br />
<br />
Динамическое связывание и изменение системой переменной <span style="font-family: "courier new" , "courier" , monospace;">ACAD</span> успешно происходит в обоих тестируемых версиях AutoCAD: 2009 и 2016. <br />
<br />
<br />
<br /></div>
Andrey Bushmanhttp://www.blogger.com/profile/01700238372554577360noreply@blogger.com0tag:blogger.com,1999:blog-5357147933020835692.post-67049113738921803522016-08-10T16:34:00.002+03:002016-08-10T17:49:46.736+03:00Работа с реестром в операционных системах Windows (часть 2)<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
Когда-то <a href="http://bushman-andrey.blogspot.ru/2014/02/windows-x64.html" target="_blank">здесь</a> я выкладывал инструменты по работе с реестром для .NET 3.5 SP1. Обнаружилось, что начиная с .NET 4.0 сигнатура нужных для обозначенного кода конструкторов класса <span style="font-family: "courier new" , "courier" , monospace;">RegistryKey</span> была изменена. Как следствие - если наша сборка, скомпилированная под .NET 3.5 SP1 в дальнейшем окажется загруженной в .NET 4.0 (или любую более новую), то мы будем получать исключение времени выполнения при вызове некоторых методов опубликованного кода.</div>
<div style="text-align: justify;">
</div>
<a name='more'></a><br />
<br />
<div style="text-align: justify;">
Я внёс некоторые правки в исходный код класса <span style="font-family: "courier new" , "courier" , monospace;">RegistryExtensions</span> и написал несколько интеграционных тестов, проверяющих корректность работы кода в различных ситуациях (в т.ч. избавился от всех директив препроцессора - теперь они не нужны). Проверял в .NET 3.5 SP1, 4.0 и 4.6.1 для платформ x86|x64|AnyCPU:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyBgktwRbtyCjjTRa5D6WHVnxJ-AHUztnqEBA4q6jcVs8XRktcWIBK4Uc8uOH7e5mawMGIpDuKvhdnLEH-yGV2ZOAF49qDcO8saQJQw5OCOU99wbh_gcJdpO1C33VidK6KimCtszZ1thi5/s1600/RegistryExtensionsTests.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="310" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyBgktwRbtyCjjTRa5D6WHVnxJ-AHUztnqEBA4q6jcVs8XRktcWIBK4Uc8uOH7e5mawMGIpDuKvhdnLEH-yGV2ZOAF49qDcO8saQJQw5OCOU99wbh_gcJdpO1C33VidK6KimCtszZ1thi5/s640/RegistryExtensionsTests.png" width="640" /></a></div>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Обозначенный код я поддерживаю в виду того, что у меня имеется в наработке некоторый объем кода, компилируемого под .NET 3.5 SP1 (<i>т.к. AutoCAD 2009 не поддерживает более новые версии .Net Framework</i>). Этот код должен без проблем компилироваться и успешно работать не только в .NET 3.5 SP1, но и во всех более новых версиях .NET. Кроме того, необходимо, чтобы ранее скомпилированные мною под .NET 3.5 SP1 сборки успешно загружались и работали в .NET 4.0 - 4.6.1.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Итак, ниже - обновлённый вариант кода, устраняющий проблему, упомянутую в начале заметки. Сразу за ним размещён исходный код интеграционных тестов. Пришлось воспользоваться интеграционными тестами, т.к. модульные применительно к данной задаче не подойдут.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
======================================================================</div>
<div style="text-align: justify;">
<span style="font-family: "courier new" , "courier" , monospace;">/* AcProducts<br /> * RegistryExtensions.cs<br /> * © Андрей Бушман, 2014<br /> * <br /> * В файле RegistryExtensions.cs определён дополнительный <br /> * функционал, расширяющий возможности работы с реестром из <br /> * .NET приложений, написанных на .NET 3.5 SP1. <br /> * <br /> * ИЗМЕНЕНИЯ:<br /> * 10-авг-2016<br /> * В код внесены правки для того, чтобы он мог <br /> * использоваться не только в .NET 3.5 SP1, но и во всех <br /> * более новых версиях .NET Framework: например, когда <br /> * сборка, скомпилированная под .NET 3.5 SP1 загружается в <br /> * код .Net 4.6.1. Код не зависит от разрядности (x86|x64|<br /> * AnyCPU).<br /> */<br />using System;<br />using Microsoft.Win32;<br />using System.Reflection;<br />using System.Runtime.InteropServices;<br />using Microsoft.Win32.SafeHandles;<br /><br />namespace Bushman.AcProducts {<br /><br /> /// <summary><br /> /// Данный класс предназначен для предоставления 32-битным <br /> /// приложениям доступа к 64-битным разделам реестра. Класс<br /> /// так же может использоваться для предоставления <br /> /// 64-битным приложениям ветке реестра, предназначенной<br /> /// для 32-битных. За основу взят код, опубликованный в <br /> /// блоге http://clck.ru/96A9U<br /> /// </summary><br /><br /> public static class RegistryExtensions {<br /><br /> /// <summary><br /> /// Открытие ключа реестра, с указанием того, какую <br /> /// именно часть следует открывать: записи для <br /> /// 32-битных приложений, или же записи для 64-битных.<br /> /// <br /> /// ВНИМАНИЕ<br /> /// У данного метода имеется побочный эффект: свойство <br /> /// `Name` у возвращаемого объекта `RegistryKey` даёт <br /> /// пустую строку. Однако это не страшно, т.к. имя нам <br /> /// известно - первую часть можно получить из родителя,<br /> /// а вторую часть этого имени мы и так знаем, <br /> /// поскольку передаём её в виде параметра.<br /> /// </summary><br /> /// <param name="parentKey">Родительский элемент <br /> /// RegistryKey, в котором следует выполнить открытие <br /> /// подраздера.</param><br /> /// <param name="subKeyName">Name of the key to be <br /> /// opened</param><br /> /// <param name="writable">true - открывать для чтения <br /> /// и записи; false - открывать только для чтения.<br /> /// </param><br /> /// <param name="options">Какую именно часть реестра <br /> /// следует открывать: относящуюся к 32-битным <br /> /// приложениям или же относящуюся к 64-битным.<br /> /// </param><br /> /// <returns>Возвращается RegistryKey или null, если по<br /> /// каким-либо причинам получить RegistryKey не <br /> /// удалось.</returns><br /> public static RegistryKey OpenSubKey(this RegistryKey<br /> parentKey, String subKeyName, Boolean writable,<br /> RegWow64Options options) {<br /><br /> // Проверка работоспособности<br /> if (parentKey == null || GetPtr(<br /> parentKey) == IntPtr.Zero) {<br /><br /> return null;<br /> }<br /><br /> // Назначение прав<br /> Int32 rights = (Int32) (writable ? RegistryRights<br /> .WriteKey : RegistryRights.ReadKey);<br /><br /> // Вызов функций неуправляемого кода<br /> Int32 subKeyHandle, result = RegOpenKeyEx(<br /> GetPtr(parentKey), subKeyName, 0,<br /> rights | (Int32) options, out subKeyHandle);<br /><br /> // Если мы ошиблись - возвращаем null<br /> if (result != 0) {<br /><br /> return null;<br /> }<br /><br /> /* Получаем ключ, представленный указателем, <br /> * возвращённым из RegOpenKeyEx */<br /> RegistryKey subKey = PtrToRegistryKey((IntPtr)<br /> subKeyHandle, writable, false, options);<br /><br /> return subKey;<br /> }<br /><br /> /// <summary><br /> /// Получить указатель на ключ реестра.<br /> /// </summary><br /> /// <param name="registryKey">Ключ реестра, указатель <br /> /// на который нужно получить.<br /> /// </param><br /> /// <returns>Возвращается объект IntPtr. Если не <br /> /// удалось получить указатель на обозначенный объект <br /> /// RegistryKey, то возвращается IntPtr.Zero.</returns><br /> public static IntPtr GetPtr(this RegistryKey<br /> registryKey) {<br /><br /> if (registryKey == null)<br /> return IntPtr.Zero;<br /><br /> /* The `RegistryKey.Handle` property appears since <br /> * .Net 4.0, therefore for .Net 3.5 I get it <br /> * through reflection. */<br /> Type registryKeyType = typeof(RegistryKey);<br /><br /> FieldInfo fieldInfo = registryKeyType.GetField(<br /> "hkey", BindingFlags.NonPublic | BindingFlags<br /> .Instance);<br /><br /> SafeHandle handle = (SafeHandle) fieldInfo.GetValue<br /> (registryKey);<br /><br /> IntPtr unsafeHandle = handle.DangerousGetHandle(<br /> );<br /><br /> return unsafeHandle;<br /> }<br /><br /> /// <summary><br /> /// Получить ключ реестра на основе его указателя.<br /> /// </summary><br /> /// <param name="hKey">Указатель на ключ реестра<br /> /// </param><br /> /// <param name="writable">true - открыть для записи; <br /> /// false - для чтения.</param><br /> /// <param name="ownsHandle">Владеем ли мы <br /> /// дескриптором: true - да, false - нет.</param><br /> /// <returns>Возвращается объект RegistryKey, <br /> /// соответствующий полученному указателю.</returns><br /> public static RegistryKey PtrToRegistryKey(IntPtr<br /> hKey, Boolean writable, Boolean ownsHandle,<br /> RegWow64Options opt) {<br /><br /> if (IntPtr.Zero == hKey) {<br /> return null;<br /> }<br /><br /> Type safeRegistryHandleType =<br /> typeof(SafeHandleZeroOrMinusOneIsInvalid)<br /> .Assembly.GetType("Microsoft.Win32." +<br /> "SafeHandles.SafeRegistryHandle");<br /><br /> /* Получаем массив типов, соответствующих <br /> * аргументом конструктора, который нам нужен. */<br /> Type[] argTypes = new Type[] { typeof(IntPtr),<br /> typeof(Boolean) };<br /><br /> BindingFlags flags = default(BindingFlags);<br /><br /> if (Environment.Version.Major < 4) {<br /> flags = BindingFlags.Instance | BindingFlags<br /> .NonPublic;<br /> }<br /> else {<br /> flags = BindingFlags.Instance | BindingFlags<br /> .Public;<br /> }<br /><br /> // Получаем ConstructorInfo для нашего объекта<br /> ConstructorInfo safeRegistryHandleCtorInfo =<br /> safeRegistryHandleType.GetConstructor(flags,<br /> null, argTypes, null);<br /><br /> /* Вызываем конструктор для SafeRegistryHandle. <br /> * Класс SafeRegistryHandle появился начиная с .NET<br /> * 4.0. */<br /> Object safeHandle = safeRegistryHandleCtorInfo<br /> .Invoke(new Object[] { hKey, ownsHandle });<br /><br /> Type registryKeyType = typeof(RegistryKey);<br /> Type registryViewType = null;<br /><br /> /*Получаем массив типов, соответствующих аргументом<br /> * конструктора, который нам нужен */<br /> Type[] registryKeyConstructorTypes = null;<br /><br /> if (Environment.Version.Major < 4) {<br /> registryKeyConstructorTypes = new Type[] {<br /> safeRegistryHandleType, typeof(bool) };<br /> }<br /> else {<br /> registryViewType = typeof(<br /> SafeHandleZeroOrMinusOneIsInvalid).Assembly<br /> .GetType("Microsoft.Win32.RegistryView");<br /><br /> registryKeyConstructorTypes = new Type[] {<br /> safeRegistryHandleType, typeof(bool),<br /> registryViewType };<br /><br /> flags = BindingFlags.Instance | BindingFlags<br /> .NonPublic;<br /> }<br /><br /> // Получаем ConstructorInfo для нашего объекта<br /> ConstructorInfo registryKeyCtorInfo =<br /> registryKeyType.GetConstructor(flags, null,<br /> registryKeyConstructorTypes, null);<br /><br /> RegistryKey resultKey = null;<br /><br /> if (Environment.Version.Major < 4) {<br /> // Вызываем конструктор для RegistryKey<br /> resultKey = (RegistryKey) registryKeyCtorInfo<br /> .Invoke(new Object[] {<br /> safeHandle, writable });<br /> }<br /> else {<br /> // Вызываем конструктор для RegistryKey<br /> resultKey = (RegistryKey) registryKeyCtorInfo<br /> .Invoke(new Object[] {<br /> safeHandle, writable, (int) opt});<br /> }<br /><br /> // возвращаем полученный ключ реестра<br /> return resultKey;<br /> }<br /><br /> /// <summary><br /> /// Получение числового значения указателя на искомый <br /> /// подраздел реестра.<br /> /// </summary><br /> /// <param name="hKey">Указатель на родительский раздел<br /> /// реестра.</param><br /> /// <param name="subKey">Имя искомого подраздела.<br /> /// </param><br /> /// <param name="ulOptions">Этот параметр <br /> /// зарезервирован и всегда должен быть равным 0.<br /> /// </param><br /> /// <param name="samDesired">Права доступа (чтение\<br /> /// запись) и указание того, как именно следует <br /> /// открывать реестр. Значение этого параметра <br /> /// формируется путём применения операции логического <br /> /// "И" для объектов перечислений RegistryRights и <br /> /// RegWow64Options.</param><br /> /// <param name="phkResult">Ссылка на переменную, в <br /> /// которую следует сохранить полученное числовое <br /> /// значение указателя на искомый подраздел.</param><br /> /// <returns>В случае успеха возвращается 0.</returns><br /> [DllImport("advapi32.dll", CharSet = CharSet.Auto)]<br /> static extern Int32 RegOpenKeyEx(IntPtr hKey,<br /> String subKey, Int32 ulOptions, Int32 samDesired,<br /> out Int32 phkResult);<br /> }<br /><br /> /// <summary><br /> /// Перечисление указывает, какую именно часть реестра <br /> /// следует открывать: относящуюся к 32-битным приложениям <br /> /// или же относящуюся к 64-битным.<br /> /// </summary><br /> public enum RegWow64Options {<br /><br /> /// <summary><br /> /// Открывать ту часть реестра, которая хранит <br /> /// информацию приложений, разрядность которых <br /> /// соответствует разрядности текущего приложения<br /> /// (x86\x64).</summary><br /> None = 0,<br /> /// <summary><br /> /// Открывать часть реестра, относящуюся к 64-битным <br /> /// приложениям.<br /> /// </summary><br /> KEY_WOW64_64KEY = 0x0100,<br /> /// <summary><br /> /// Открывать часть реестра, относящуюся к 32-битным <br /> /// приложениям.<br /> /// </summary><br /> KEY_WOW64_32KEY = 0x0200<br /> }<br /><br /> /// <summary><br /> /// Перечисление, указывающее на то, с каким уровнем <br /> /// доступа следует открывать ветку реестра: для чтения, <br /> /// или же для чтения\записи.<br /> /// </summary><br /> public enum RegistryRights {<br /><br /> /// <summary><br /> /// Открыть только для чтения.<br /> /// </summary><br /> ReadKey = 131097,<br /> /// <summary><br /> /// Открыть для чтения и записи.<br /> /// </summary><br /> WriteKey = 131078<br /> }<br />}</span></div>
<div style="text-align: justify;">
<span style="font-family: "courier new" , "courier" , monospace;">==================================================================</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: "courier new" , "courier" , monospace;">Интеграционные тесты:</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: "courier new" , "courier" , monospace;">==================================================================</span></div>
<div style="text-align: justify;">
<span style="font-family: "courier new" , "courier" , monospace;">/* AcProducts.IntegrationTests<br /> * RegistryExtensionsTests.cs<br /> * © Andrey Bushman, 2016<br /> * <br /> * Integration tests of Bushman.AcProducts.RegistryExtensions<br /> * class. <br /> */<br />using System;<br />using Microsoft.Win32;<br />using NUnit.Framework;<br /><br />namespace Bushman.AcProducts.IntegrationTests {<br /><br /> [TestFixture]<br /> public class RegistryExtensionsTests {<br /><br /> [Test]<br /> public void GetPtr_Returns_ValidPtr() {<br /><br /> // `Registry.LocalMachine` key always exists.<br /> RegistryKey rk = Registry.LocalMachine;<br /> IntPtr rkPtr = rk.Handle.DangerousGetHandle();<br /><br /> /* The `RegistryKey.Handle` property appears since <br /> * .Net 4.0, therefore for .Net 3.5 in the code <br /> * under test I get it through reflection. */<br /> IntPtr rkPtr2 = RegistryExtensions.GetPtr(rk);<br /><br /> Assert.AreEqual(rkPtr, rkPtr2);<br /> }<br /><br /> [Test]<br /> public void GetPtr_ReturnsZero_ForNull() {<br /><br /> /* The `RegistryKey.Handle` property appears since <br /> * .Net 4.0, therefore for .Net 3.5 in the code <br /> * under test I get it through reflection. */<br /> IntPtr ptr = RegistryExtensions.GetPtr(null);<br /><br /> Assert.AreEqual(IntPtr.Zero, ptr);<br /> }<br /><br /> [TestCase(@"SOFTWARE\7-Zip", RegWow64Options<br /> .KEY_WOW64_64KEY, false)]<br /><br /> [TestCase(@"SOFTWARE\7-Zip", RegWow64Options<br /> .KEY_WOW64_32KEY, true)]<br /><br /> [TestCase(@"SOFTWARE\Notepad++",<br /> RegWow64Options.KEY_WOW64_64KEY, true)]<br /><br /> [TestCase(@"SOFTWARE\Notepad++",<br /> RegWow64Options.KEY_WOW64_32KEY, false)]<br /><br /> [Description("7-Zip and Notepad++ are to be installed"<br /> )]<br /> public void OpenSubKey_ReturnsValidValue(string subkey,<br /> RegWow64Options opt, bool isNull) {<br /><br /> RegistryKey rk = Registry.LocalMachine;<br /><br /> RegistryKey rk2 = RegistryExtensions.OpenSubKey(rk,<br /> subkey, false, opt);<br /><br /> if (isNull) {<br /> Assert.IsNull(rk2);<br /> }<br /> else {<br /> Assert.IsNotNull(rk2);<br /> }<br /> }<br /><br /> [Test]<br /> public void OpenSubKey_ReturnsNull_ForInvalidSubkey() {<br /><br /> string subkey =<br /> "{F28A3464-0A5D-48FB-AFF6-B07F058D3EFC}";<br /><br /> RegistryKey rk = RegistryExtensions.OpenSubKey(<br /> Registry.LocalMachine, subkey, false,<br /> RegWow64Options.None);<br /><br /> Assert.IsNull(rk);<br /> }<br /><br /> [Test]<br /> public void PtrToRegistryKey_Returns_ValidValie() {<br /><br /> RegistryKey rk = Registry.LocalMachine;<br /> IntPtr rkPtr = rk.Handle.DangerousGetHandle();<br /><br /> RegistryKey rk2 = RegistryExtensions<br /> .PtrToRegistryKey(rkPtr, false, false,<br /> RegWow64Options.None);<br /> IntPtr rkPtr2 = rk2.Handle.DangerousGetHandle();<br /><br /> Assert.AreEqual(rkPtr, rkPtr2);<br /> }<br /><br /> [Test]<br /> public void PtrToRegistryKey_ReturnsNull_ForZero() {<br /><br /> RegistryKey rk = RegistryExtensions<br /> .PtrToRegistryKey(IntPtr.Zero, false, false,<br /> RegWow64Options.None);<br /><br /> Assert.IsNull(rk);<br /> }<br /> }<br />}</span></div>
<div style="text-align: justify;">
<span style="font-family: "courier new" , "courier" , monospace;">================================================================== </span></div>
</div>
Andrey Bushmanhttp://www.blogger.com/profile/01700238372554577360noreply@blogger.com0tag:blogger.com,1999:blog-5357147933020835692.post-90814277668432421562016-07-22T00:54:00.003+03:002016-12-19T16:17:04.665+03:00NuGet пакеты для AutoCAD .NET API<div dir="ltr" style="text-align: left;" trbidi="on">
Пару лет назад, компания Autodesk начала (<i>наконец-то!</i>) <a href="https://www.nuget.org/packages/AutoCAD.NET/" target="_blank">опубликовывать</a> NuGet-пакеты для AutoCAD .NET API. Об этом так же было радостно сообщено <a href="http://adndevblog.typepad.com/autocad/2014/12/autocadnet-api-is-now-on-nugetorg.html" target="_blank">в блоге</a> ADN. Однако, как это обычно и бывает у Autodesk, тестированием пакетов перед их публикацией в Autodesk не заморачиваются (как собственно и тестированием самого AutoCAD, ибо длительная, печальная практика показывает, что группа тестирования даже самого AutoCAD в компании Autodesk <i>в принципе</i> нарисована только "<i>для галочки</i>" - примеров, доказывающих это - множество, в т.ч. и в моём блоге). <br />
<a name='more'></a><br />
Пробежавшись по комментариям, оставленным пользователями в обозначенной выше записи блога ADN можно сразу заметить, что пакеты работают криво. Т.е. их тестированием себя никто не утруждал. С тех пор Autodesk выпустил ещё две версии AutoCAD. Казалось бы, что за два года можно было вполне довести до ума пакеты, на создание которых (с нуля) уходит не более получаса (причём сразу под все версии AutoCAD от 2009 и выше)... Но печальная практика <i>в который раз</i> демонстрирует обратное...<br />
<br />
Я попробовал установить самую свежую на сегодняшний день версию пакета <a href="https://www.nuget.org/packages/AutoCAD.NET/" target="_blank">AutoCAD.NET</a> (version 21.0.1). В душе теплилась надежда, что за два года проблему с<span style="font-family: "courier new" , "courier" , monospace;"> CopyLocal</span> в Autodesk всё же победили, тем более что её решение находится в Google <a href="http://stackoverflow.com/questions/11105286/create-nuget-package-which-installs-references-with-copy-local-set-to-false" target="_blank">за пару секунд</a> по элементарной фразе: "<i>NuGet CopyLocal false</i>". Однако, как оказалось, воз и поныне там - ни одна сборка, подключенная путём установки NuGet пакета не имеет свойства <span style="font-family: "courier new" , "courier" , monospace;">CopyLocal</span> установленного в <span style="font-family: "courier new" , "courier" , monospace;">false</span>.<br />
<br />
Я не верю в то, что в Autodesk работают настолько глупые люди (глупых бы не взяли на работу, <i>как мне кажется</i>). То, что я систематически вижу, всякий раз подтверждает моё давно сформировавшееся убеждение в том, что в Autodesk работают люди, многим из которых просто наплевать на качество своей работы (это ещё хуже, чем первый вариант)... К таким людям (ИМХО) на все 100% относится группа тестирования (во главе с Михаилом Белиловским, насколько я помню), которая выполняет свою работу (если вообще выполняет) из рук вон плохо - достаточно посмотреть на качество работы того же <span style="font-family: "courier new" , "courier" , monospace;">accoreconsole.exe</span>. Подобным отношением к своей работе страдает и тот сотрудник Autodesk, которому поручили собирать и опубликовывать NuGet пакеты AutoCAD.NET. Можно сколько угодно с умным видом разъезжать по различным конференциям, изображая бурную радость и воодушевление в процессе разговоров о программировании в AutoCAD, но если ты не выполняешь <b>свою прямую, первостепенную обязанность</b> - <i>отвечать за качество тестирования продукта</i>, то грош цена таким разговорам, улыбкам... да и самим специалистам (ИМХО). <br />
<br />
Ладно, не буду более трепать себе понапрасну нервы из-за качества работы обозначенных выше персонажей (моих нервов они не стоят :) ) - давайте лучше вернёмся к их злосчастным NuGet пакетам...<br />
<br />
Отсутствие нужного значения в свойстве <span style="font-family: "courier new" , "courier" , monospace;">CopyLocal</span> не является единственной проблемой. Текущая реализация пакетов подразумевает, что каждый раз, запуская команду <span style="font-family: "courier new" , "courier" , monospace;">Update-Package</span> (без опции <span style="font-family: "courier new" , "courier" , monospace;">-Version</span>) вы тем самым будете обновлять все сборки AutoCAD, подключенные в вашем проекте, до самой последней версии AutoCAD (для которой имеется соответствующий NuGet пакет).<br />
<br />
Однако вовсе не факт, что разработчик захочет именно такое поведение. Лично я хочу, чтобы если я в своём проекте указал использование сборок от AutoCAD 2016, то и все обновления должны происходить только в рамках <b>интересующей меня</b> версии AutoCAD. Мне не нужно, чтобы происходило автоматическое обновление сборок до версии AutoCAD 2017, 2018 или 2020 -<i> не надо за меня принимать подобных решений(!!!)</i>...<br />
<br />
Если мне понадобится создать отдельную сборку для более новой версии AutoCAD, то я сам создам дополнительный проект в составе своего решения, и уже в него подключу NuGet пакет более новой, нужной мне версии AutoCAD, с последующим добавлением файлов исходного кода из предыдущего проекта (добавленных посредством ссылок на оригиналы).<br />
<br />
Для того, чтобы избежать обозначенной выше проблемы, созданной Autodesk'ом, нужно для каждой версии AutoCAD формировать (<i>всего лишь!</i>) уникальное имя пакета (т.е. его <span style="font-family: "courier new" , "courier" , monospace;">Id</span>). Значения <span style="font-family: "courier new" , "courier" , monospace;">Minor</span> и <span style="font-family: "courier new" , "courier" , monospace;">Major</span> для версий этих пакетов можно брать либо из соответствующий значений версий AutoCAD, либо начинать с 1 (это не имеет значения, но <i>выбрав стиль нумерации версий, следует придерживаться его и в др. пакетах во избежание путанницы</i>).<br />
<br />
Autodesk предоставляет NuGet пакеты только начиная с версии AutoCAD 2015. Для более поздних версий пакеты не предоставляются.<br />
<br />
Поскольку NuGet пакеты компани Autodesk не пригодны к полноценному использованию в том виде, в котором они <i>уже который год</i> поставляются пользователям (ИМХО), а так же поскольку отсутствуют пакеты <i>для интересующих меня</i> версий AutoCAD, то я <a href="https://www.nuget.org/profiles/Bush" target="_blank">создал свои</a> NuGet пакеты, предоставляющие AutoCAD .NET API, в которых отсутствуют обозначеные мною выше проблемы.<br />
<br />
Чаще всего я компилирую код своих проектов под AutoCAD 2009 и 2013. Результат компиляции первого из них может затем успешно загружаться в AutoCAD 2009-2012, а второго - в AutoCAD 2013 и во все более новые версии. В виду этого, в первую очередь я создал NuGet пакеты именно для AutoCAD 2009 и 2013.<br />
<br />
В ближайшее время я, <i>на всякий случай</i>, создам аналогичные NuGet пакеты для всех остальных версий AutoCAD из диапазона AutoCAD 2009-2017 (на тот случай, если мне в каком-то проекте, по какой-то причине, понадобится иная версия API).<br />
<br />
<b>UPD</b><br />
Опубликовал NuGet пакеты для AutoCAD 2009-2017 (на каждую версию AutoCAD по три пакета).<br />
<br /></div>
Andrey Bushmanhttp://www.blogger.com/profile/01700238372554577360noreply@blogger.com4tag:blogger.com,1999:blog-5357147933020835692.post-68046342393830424982016-06-27T14:03:00.002+03:002016-06-27T14:15:23.452+03:00Прокси в AutoCAD<div dir="ltr" style="text-align: left;" trbidi="on">
Обновлена <a href="https://bitbucket.org/Andrey-Bushman/cadproxy/wiki/Home" target="_blank">утилита по работе с прокси в AutoCAD</a>.<br />
<br />
<a name='more'></a><h3 class="p_Heading3" style="page-break-after: avoid;">
<span class="f_Heading3">Что нового...</span></h3>
<div style="margin: 0px 0px 0px 0.281in; padding-bottom: 0px; padding-left: 0.208in; padding-right: 0px; padding-top: 0px; text-align: left; text-indent: 0px;">
<span style="color: black; display: inline-block; font-family: "segoe ui"; font-size: 11pt; margin-left: -0.208in; width: 0.208in;">1.
</span><span style="font-style: italic;">CadProxy</span> был переименован в <span style="font-style: italic;">Proxy Tools for AutoCAD</span> (т.е. в <span style="font-style: italic;">Прокси-инструменты для AutoCAD</span>).</div>
<div style="margin: 0px 0px 0px 0.281in; padding-bottom: 0px; padding-left: 0.208in; padding-right: 0px; padding-top: 0px; text-align: left; text-indent: 0px;">
<span style="color: black; display: inline-block; font-family: "segoe ui"; font-size: 11pt; margin-left: -0.208in; width: 0.208in;">2.
</span>Теперь это <span style="font-style: italic;">бесплатное программное
обеспечение</span> вместо <span style="font-style: italic;">открытого
программного обеспечения</span>.</div>
<div style="margin: 0px 0px 0px 0.281in; padding-bottom: 0px; padding-left: 0.208in; padding-right: 0px; padding-top: 0px; text-align: left; text-indent: 0px;">
<span style="color: black; display: inline-block; font-family: "segoe ui"; font-size: 11pt; margin-left: -0.208in; width: 0.208in;">3.
</span>Добавлены русская и английская лицензии.</div>
<div style="margin: 0px 0px 0px 0.281in; padding-bottom: 0px; padding-left: 0.208in; padding-right: 0px; padding-top: 0px; text-align: left; text-indent: 0px;">
<span style="color: black; display: inline-block; font-family: "segoe ui"; font-size: 11pt; margin-left: -0.208in; width: 0.208in;">4.
</span>Добавлена русская локализация.</div>
<div style="margin: 0px 0px 0px 0.281in; padding-bottom: 0px; padding-left: 0.208in; padding-right: 0px; padding-top: 0px; text-align: left; text-indent: 0px;">
<span style="color: black; display: inline-block; font-family: "segoe ui"; font-size: 11pt; margin-left: -0.208in; width: 0.208in;">5.
</span><b>Для AutoCAD 2009-2011</b>: в процессе загрузки приложения в AutoCAD,
родительский каталог приложения будет добавлен в <span style="font-style: italic;">Путь доступа к вспомогательным файлам</span> (если
это ещё не было сделано ранее).* Это необходио для работы справочной системы
приложения.</div>
<div style="margin: 0px 0px 0px 0.281in; padding-bottom: 0px; padding-left: 0.208in; padding-right: 0px; padding-top: 0px; text-align: left; text-indent: 0px;">
<span style="color: black; display: inline-block; font-family: "segoe ui"; font-size: 11pt; margin-left: -0.208in; width: 0.208in;">6.
</span><b>Для AutoCAD 2009-2011</b>: в реестре будет выполнена регистрация приложения
(<span style="font-style: italic;">загрузка по требованию</span>), если это не
было сделано ранее.* В виду этого, вызов команды <span class="f_CodeExample">_NETLOAD</span> для этих версий AutoCAD потребуется только
один раз.</div>
<div style="margin: 0px 0px 0px 0.281in; padding-bottom: 0px; padding-left: 0.208in; padding-right: 0px; padding-top: 0px; text-align: left; text-indent: 0px;">
<span style="color: black; display: inline-block; font-family: "segoe ui"; font-size: 11pt; margin-left: -0.208in; width: 0.208in;">7.
</span>Операция <span class="f_CodeExample">ПРОВЕРИТЬ (_AUDIT)</span> будет
выполняться <span style="font-style: italic;">каждый раз</span> перед
расчленением или удалением прокси, если команды <span class="f_CodeExample">ВЗПРОКСИ (_XPROXY)</span> или <span class="f_CodeExample">УДПРОКСИ (_RMPROXY)</span> не являются предыдущей
выполненной командой. Так же команда <span class="f_CodeExample">ПРОВЕРИТЬ
(_AUDIT)</span> будет автоматически выполняться и после работы этих команд.</div>
<div style="margin: 0px 0px 0px 0.281in; padding-bottom: 0px; padding-left: 0.208in; padding-right: 0px; padding-top: 0px; text-align: left; text-indent: 0px;">
<span style="color: black; display: inline-block; font-family: "segoe ui"; font-size: 11pt; margin-left: -0.208in; width: 0.208in;">8.
</span>Если файлы меню CUI\CUIX были ранее загружены пользователем в AutoCAD
непосредственно из каталога расширения, тогда они будут выгружены, скопированы в
Windows-профиль пользователя и затем в AutoCAD будут загружены эти копии.*</div>
<div style="margin: 0px 0px 0px 0.281in; padding-bottom: 0px; padding-left: 0.208in; padding-right: 0px; padding-top: 0px; text-align: left; text-indent: 0px;">
<span style="color: black; display: inline-block; font-family: "segoe ui"; font-size: 11pt; margin-left: -0.208in; width: 0.208in;">9.
</span>Изображения в файлах меню CUI\CUIX были заменены. Теперь эти изображения
используют ICO формат вместо BMP (новые изображения используют
прозрачность).</div>
<div style="margin: 0px 0px 0px 0.281in; padding-bottom: 0px; padding-left: 0.208in; padding-right: 0px; padding-top: 0px; text-align: left; text-indent: 0px;">
<span style="color: black; display: inline-block; font-family: "segoe ui"; font-size: 11pt; margin-left: -0.208in; width: 0.208in;">10.
</span>MNR-файлы были удалены из MSI-инсталлятора.</div>
<div style="margin: 0px 0px 0px 0.281in; padding-bottom: 0px; padding-left: 0.208in; padding-right: 0px; padding-top: 0px; text-align: left; text-indent: 0px;">
<span style="color: black; display: inline-block; font-family: "segoe ui"; font-size: 11pt; margin-left: -0.208in; width: 0.208in;">11.
</span>MSI-инсталлятор был полностью переписан. Теперь он показывает лицензию,
устанавливаемые наборы компонентов, а так же предоставляет <span style="font-style: italic;">фиксированный набор </span>каталогов, в которые может
быть выполнена установка приложения.</div>
<div style="margin: 0px 0px 0px 0.281in; padding-bottom: 0px; padding-left: 0.208in; padding-right: 0px; padding-top: 0px; text-align: left; text-indent: 0px;">
<span style="color: black; display: inline-block; font-family: "segoe ui"; font-size: 11pt; margin-left: -0.208in; width: 0.208in;">12.
</span>Имеется две версии локализации MSI-установщика: английская и русская.</div>
<div style="margin: 0px 0px 0px 0.281in; padding-bottom: 0px; padding-left: 0.208in; padding-right: 0px; padding-top: 0px; text-align: left; text-indent: 0px;">
<span style="color: black; display: inline-block; font-family: "segoe ui"; font-size: 11pt; margin-left: -0.208in; width: 0.208in;">13.
</span>Инсталлятор добавляет пункты меню в <span style="font-style: italic;">Пуск
-> Все программы</span>. Локализация этих пунктов меню совпадает с
локализацией использованного MSI-инсталлятора.</div>
<div style="margin: 0px 0px 0px 0.281in; padding-bottom: 0px; padding-left: 0.208in; padding-right: 0px; padding-top: 0px; text-align: left; text-indent: 0px;">
<span style="color: black; display: inline-block; font-family: "segoe ui"; font-size: 11pt; margin-left: -0.208in; width: 0.208in;">14.
</span>Теперь 32-битная версия MSI-инсталлятора не может использоваться для
Windows x64 (ограничение добавлено намеренно).</div>
<div style="margin: 0px 0px 0px 0.281in; padding-bottom: 0px; padding-left: 0.208in; padding-right: 0px; padding-top: 0px; text-align: left; text-indent: 0px;">
<span style="color: black; display: inline-block; font-family: "segoe ui"; font-size: 11pt; margin-left: -0.208in; width: 0.208in;">15.
</span>Теперь расширение может быть установлено как с административными правами,
<span style="font-style: italic;">так и без них</span>. Это зависит от выбора,
который сделает пользователь в процессе установки приложения.</div>
<div style="margin: 0px 0px 0px 0.281in; padding-bottom: 0px; padding-left: 0.208in; padding-right: 0px; padding-top: 0px; text-align: left; text-indent: 0px;">
<span style="color: black; display: inline-block; font-family: "segoe ui"; font-size: 11pt; margin-left: -0.208in; width: 0.208in;">16.
</span>Файл справки полностью переписан.</div>
<div style="margin: 0px 0px 0px 0.281in; padding-bottom: 0px; padding-left: 0.208in; padding-right: 0px; padding-top: 0px; text-align: left; text-indent: 0px;">
<span style="color: black; display: inline-block; font-family: "segoe ui"; font-size: 11pt; margin-left: -0.208in; width: 0.208in;">17.
</span>Исправлены некоторые ошибки в программном коде.</div>
<div style="margin: 0px 0px 0px 0.26in;">
<br /></div>
<hr style="background-color: black; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; color: black; height: 1px;" />
<div style="margin: 0px 0px 0px 0.26in;">
* - Проверка будет выполняться каждый раз
при загрузке приложения в AutoCAD.</div>
<div style="margin: 0px 0px 0px 0.26in;">
<br /></div>
<div style="margin: 0px 0px 0px 0.26in;">
Пользовательское меню: </div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtWlD0f_TArwHRDpsNVtaXPVslb5CAKpPZuEz46PlqSZVEkWscpcGkk4rAGtVHPd0ZPz9AZ3jz5_RGqt_RgzeGX5ODAtMxSC600cebDN96podtvYoLruX0A6A3qa3UCMoeaYhVaT_1LPmN/s1600/acad_menu_dark.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtWlD0f_TArwHRDpsNVtaXPVslb5CAKpPZuEz46PlqSZVEkWscpcGkk4rAGtVHPd0ZPz9AZ3jz5_RGqt_RgzeGX5ODAtMxSC600cebDN96podtvYoLruX0A6A3qa3UCMoeaYhVaT_1LPmN/s1600/acad_menu_dark.png" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqjlZl7WTPTSUpbB7sk7dTb6LF0EgD9jqSRcuxoZ7O78p_YPb0bzyZBT-xya29DfoergifwMIsGnCZCb-Rh-bxjmHt8WikV-nA-nqhXWkwG5V2Je0Rd-gj8aC1Qz6P_nmsrJB0_nv_v-sY/s1600/acad_menu_light.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqjlZl7WTPTSUpbB7sk7dTb6LF0EgD9jqSRcuxoZ7O78p_YPb0bzyZBT-xya29DfoergifwMIsGnCZCb-Rh-bxjmHt8WikV-nA-nqhXWkwG5V2Je0Rd-gj8aC1Qz6P_nmsrJB0_nv_v-sY/s1600/acad_menu_light.png" /></a></div>
<br />
Меню в <i>Пуск -> Все программы</i>:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKMba4QfKra8St2V1yXo_Bz7ZAqW8-kNN2ifFAbjM7QkSjpMy6i_evgr83YpXQC3IbBE9hioEoSRusaljHkSdXonYUrLLZMkdeUBpkCgZ88_Mx9IASgJTx7JT00r8pEffNQ0JRY7kL6Y6u/s1600/menu_enu.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKMba4QfKra8St2V1yXo_Bz7ZAqW8-kNN2ifFAbjM7QkSjpMy6i_evgr83YpXQC3IbBE9hioEoSRusaljHkSdXonYUrLLZMkdeUBpkCgZ88_Mx9IASgJTx7JT00r8pEffNQ0JRY7kL6Y6u/s1600/menu_enu.png" /></a></div>
<br />
Дополнительная информация, размещаемая в реестре:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQebyM9DE-Wp4k6nsmeqYaIONsOP9I55TSKgutikrRPUF9UJZshKP_YRDpfSJfoypVkvHD0-YoONq9Xm7Q-r-Z30fjg5E1WjTno8R4s6SUSkT6FFGMKR90XKquiMy_ZsM0HK0zejNOb53G/s1600/registry.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="228" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQebyM9DE-Wp4k6nsmeqYaIONsOP9I55TSKgutikrRPUF9UJZshKP_YRDpfSJfoypVkvHD0-YoONq9Xm7Q-r-Z30fjg5E1WjTno8R4s6SUSkT6FFGMKR90XKquiMy_ZsM0HK0zejNOb53G/s640/registry.png" width="640" /></a></div>
<br />
Возможность выбрать целевой каталог установки: <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6A4MxSVRnPJy8uvP1iWFRFE5pc01T31aYCWnfHeab6-7ijkXKYX8U8IOBqXTvKlvPyOn5vHOJxsGX7GeOykFT7iFPECeH38KH7yNoTyOQ-NCD0b_qdcdjleozN0HOaK5J2FjwiQiAZF_O/s1600/select_dir.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6A4MxSVRnPJy8uvP1iWFRFE5pc01T31aYCWnfHeab6-7ijkXKYX8U8IOBqXTvKlvPyOn5vHOJxsGX7GeOykFT7iFPECeH38KH7yNoTyOQ-NCD0b_qdcdjleozN0HOaK5J2FjwiQiAZF_O/s1600/select_dir.png" /></a></div>
<br />
Локализованная справка:<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcJeu8OWmTHaxg7eEn4l0OpsPhWr-1UpJ53SIbb85VkwhVASg5M0lGF8EZlJV1rutIzRMLDOpkaClH-wz656DZTNo0Clyq138FxPir7Os_kOV9CY4yfggKBH1wqS3Bq_HUUE_8-G1BPKtU/s1600/0.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="432" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcJeu8OWmTHaxg7eEn4l0OpsPhWr-1UpJ53SIbb85VkwhVASg5M0lGF8EZlJV1rutIzRMLDOpkaClH-wz656DZTNo0Clyq138FxPir7Os_kOV9CY4yfggKBH1wqS3Bq_HUUE_8-G1BPKtU/s640/0.png" width="640" /></a></div>
<br />
<br /></div>
Andrey Bushmanhttp://www.blogger.com/profile/01700238372554577360noreply@blogger.com2tag:blogger.com,1999:blog-5357147933020835692.post-42109999750714704582016-05-08T17:54:00.004+03:002016-05-08T17:54:56.211+03:00Изменение серийного номера для MS Office 2016<div dir="ltr" style="text-align: left;" trbidi="on">
Порой, производя очередную активацию MS Office, можно получить сообщение о том, что лимит количества активаций с этим ключом уже исчерпан... В этом случае можно выполнить активацию переписав ключ новым значением. Возникает вопрос: <i>как заменить ранее указанный ключ продукта на более новый?</i><br />
<br />
<br />
<a name='more'></a>Ответ на обозначенный вопрос я <a href="http://answers.microsoft.com/en-us/office/forum/office_2016-office_install/is-there-a-way-i-change-the-product-key-for-office/331f0e68-89dc-4885-8095-6fe733d61ba6?auth=1" target="_blank">нашёл</a> на форуме Майкрософт (спасибо <i>Faruk Ekiz</i>). Копирую ответ <i>Faruk Ekiz</i> в своей записи в качестве шпаргалки, дабы позднее всегда мог быстро находить его.<br /><br /><br />
1. Open a command prompt. For instance via: <br />
<ul>
<li>Start-> All Programs-> Accessories-> Command Prompt </li>
<li>Windows XP <br />
Start-> Run: <code>cmd</code> </li>
<li>Windows Vista, Windows 7 and Windows 8 <br />
Start-> type: <code>cmd</code> </li>
</ul>
2. In the command prompt, type the following: <br />
<ul>
<li>Office 2016 (32-bit) on a 32-bit version of Windows <br />
<code>cscript "C:\Program Files\Microsoft Office\Office16\OSPP.VBS" /dstatus</code></li>
<li>Office 2016 (32-bit) on a 64-bit version of Windows <br />
<code>cscript "C:\Program Files (x86)\Microsoft Office\Office16\OSPP.VBS" /dstatus</code></li>
<li>Office 2016 (64-bit) on a 64-bit version of Windows <br />
<code>cscript "C:\Program Files\Microsoft Office\Office16\OSPP.VBS" /dstatus</code></li>
</ul>
3. You should now get a screen with some license details such as the
license name, type and the last 5 characters of the Product Key.<br />
<br />
<img alt="Image" src="http://fud.community.services.support.microsoft.com/Fud/FileDownloadHandler.ashx?fid=a5a6d7ca-b1f0-4dee-84b6-441677010abe" /><br />
<br />
<br />
You can also change the Product Key via the <span style="font-family: "Courier New",Courier,monospace;">OSPP.VBS</span> script. Instead of using the
<code>/dstatus</code> switch, you must use the <code>/inpkey:<em>value</em></code> switch where you should replace
<code><em>value</em></code> for your Product Key.<br />
<br />
For example:<br />
<span style="font-family: "Courier New",Courier,monospace;">cscript "C:\Program Files (x86)\Microsoft Office\Office16\ospp.vbs" /inpkey:XXXXX-XXXXX-XXXXX-XXXXX-XXXXX</span><br />
<br /></div>
Andrey Bushmanhttp://www.blogger.com/profile/01700238372554577360noreply@blogger.com1tag:blogger.com,1999:blog-5357147933020835692.post-52472043284345825682016-05-02T17:10:00.002+03:002016-05-02T17:10:54.645+03:00ODA обновила свой сайт<div dir="ltr" style="text-align: left;" trbidi="on">
Компания ODA обновила внешний вид <a href="https://www.opendesign.com/" target="_blank">своего сайта</a>. Теперь он смотрится гораздо лучше. Кроме того, в обновлённой версии сайта появилась группа <i>Blog</i>, с категорией <i>Guide</i> (помимо прочих), что даёт некоторую надежду на то, что в этой категории в дальнейшем будут появляться записи.</div>
Andrey Bushmanhttp://www.blogger.com/profile/01700238372554577360noreply@blogger.com0tag:blogger.com,1999:blog-5357147933020835692.post-88784864543810936582016-04-28T18:19:00.002+03:002016-04-28T18:25:00.831+03:00Импорт конфигурационных настроек сервисами и клиентами WCF<div dir="ltr" style="text-align: left;" trbidi="on">
<div>
<div style="text-align: justify;">
В некоторых случаях службы и клиенты удобно реализовывать в виде отдельных DLL, которые затем могут быть использованы различными приложениями. Например: <span style="font-family: "courier new" , "courier" , monospace;">MyService.dll</span> и <span style="font-family: "courier new" , "courier" , monospace;">MyClient.dll</span>. Предполагается, что они будут находиться в подкаталогах <span style="font-family: "courier new" , "courier" , monospace;">./Extensions/MyExtensionName/</span> хостовых приложений, дабы при необходимости оный контент всегда можно было бы просто удалить даже вручную, не зацепив при этом случайно ресурсы основного приложения.</div>
<a name='more'></a><br />
<div style="text-align: justify;">
Однако, будучи подгруженными в хостовое приложение они, <i>как и любые другие DLL</i>, по умолчанию будут искать свои настройки в составе конфигурационного файла этого приложения. Всё же мне бы не хотелось в чужой <span style="font-family: "courier new" , "courier" , monospace;">config</span>-файл вносить правки, необходимые для работы моих сервисов или клиентов, ну или хотелось бы, по крайней мере, минимизировать объём таких корректировок настолько, насколько это возможно... На мой взгляд, предпочтительным способом была бы возможность сохранения нужных мне настроек в отдельных конфигурационных файлах, находящихся рядом с соответствующей DLL моего сервиса или клиента, т.е. в файлах <span style="font-family: "courier new" , "courier" , monospace;">MyService.dll.config</span> и <span style="font-family: "courier new" , "courier" , monospace;">MyClient.dll.config</span>.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>Экспорт конфигурационных настроек на стороне сервиса</b></div>
<div style="text-align: justify;">
Начиная с .NET 4.5 в классе реализации сервиса можно определить метод <span style="font-family: "courier new" , "courier" , monospace;">Configure</span> со следующей сигнатурой:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]--></div>
<div style="text-align: justify;">
<!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" LatentStyleCount="156">
</w:LatentStyles>
</xml><![endif]--><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Обычная таблица";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]-->
</div>
<div class="MsoNormal">
<span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">public</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">static</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">void</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> Configure(</span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">ServiceConfiguration</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> config)</span><span lang="EN-US" style="mso-ansi-language: EN-US;"></span></div>
<br />
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
Этот метод будет вызван WCF перед началом использования нашей службы. В нём можно выполнить загрузку конфигурационных настроек из внешнего файла, например так:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]--></div>
<div style="text-align: justify;">
<!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" LatentStyleCount="156">
</w:LatentStyles>
</xml><![endif]--><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Обычная таблица";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]-->
</div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">public</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">static</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">void</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> Configure(</span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">ServiceConfiguration</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> config) {</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">ExeConfigurationFileMap</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> configMap = </span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">new</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">ExeConfigurationFileMap</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">();</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>configMap.ExeConfigFilename = </span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">typeof</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">(</span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">MyService</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">).Assembly.Location + </span><span lang="EN-US" style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">".config"</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">;</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">Configuration</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> dll_config = </span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">ConfigurationManager</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">.OpenMappedExeConfiguration(configMap,</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">ConfigurationUserLevel</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">.None);</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;">
</span>config.LoadFromConfiguration(dll_config);</span></div>
<div class="MsoNormal">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">}</span></div>
<br />
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
Однако в бочке мёда имеется и ложка дёгтя: <i>в процессе импорта настроек WCF будет игнорировать все базовые адреса, обозначенные в импортируемом файле</i>. Соответственно, либо эти базовые адреса нужно будет предварительно указать в конфигурационном файле самого хостового приложения (чего делать не очень хотелось бы, хотя это и не смертельно), либо в составе импортируемого файла настроек для конечных точек подключения и для метаданных использовать только полные адреса. Какой из вариантов выбрать - это уже нужно будет смотреть по ситуации.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Например, если расширение хранится в каталоге <span style="font-family: "courier new" , "courier" , monospace;">%AppData%/CompanyName/ApplicationName/Extensions/MyExtensionName/</span> с тем, чтобы предоставлять пользователю возможность править конфигурационные настройки или вовсе удалять расширение, то нужным вариантом будет второй.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
А если пользователь не имеет административных прав и расширение хранится в каталоге <span style="font-family: "courier new" , "courier" , monospace;">%ProgramFiles%/CompanyName/ApplicationName/Extensions/MyExtensionName/</span>, то в данном случае вариант использования - это дело вкуса администратора.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>Экспорт конфигурационных настроек на стороне клиента</b></div>
<div style="text-align: justify;">
На стороне клиента использовать метод <span style="font-family: "courier new" , "courier" , monospace;">Configure</span> в коде наших прокси не получится, но начиная с WCF 4.0 нам в помощь появился класс <span style="font-family: "courier new" , "courier" , monospace;">ConfigurationChannelFactory</span>. Его можно создать в конструкторе создаваемого нами прокси и использовать в процессе работы например так:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]--></div>
<div style="text-align: justify;">
<!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" LatentStyleCount="156">
</w:LatentStyles>
</xml><![endif]--><!--[if !mso]><img src="//img2.blogblog.com/img/video_object.png" style="background-color: #b2b2b2; " class="BLOGGER-object-element tr_noresize tr_placeholder" id="ieooui" data-original-id="ieooui" />
<style>
st1\:*{behavior:url(#ieooui) }
</style>
<![endif]--><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Обычная таблица";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]-->
</div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">[</span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">ServiceBehavior</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">(IncludeExceptionDetailInFaults
= </span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">true</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">)]</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">public</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">class</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">Drawing</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> : </span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">IDisposable</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">, </span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">IDrawing</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> {</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">IDrawing</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> Channel;</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">ConfigurationChannelFactory</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><</span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">IDrawing</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">>
channelFactory;</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">public</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">void</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> Open() {</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">if</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> (channelFactory.State != </span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">CommunicationState</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">.Opened &&</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>channelFactory.State
!= </span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">CommunicationState</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">.Opening)</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>channelFactory.Open();</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>}</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">public</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">void</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> Close() {</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">if</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> (channelFactory.State == </span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">CommunicationState</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">.Opened)</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>channelFactory.Close();</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>}</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">public</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">CommunicationState</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> State</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>{</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">get</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> { </span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">return</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> channelFactory.State; }</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>}</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">public</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> Drawing(</span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">string</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> endpointName) {</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">ExeConfigurationFileMap</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> configMap = </span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">new</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">ExeConfigurationFileMap</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">();</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;">
</span>configMap.ExeConfigFilename = </span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">typeof</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">(</span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">Drawing</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">).Assembly.Location
+ </span><span lang="EN-US" style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">".config"</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">;</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">Configuration</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> dll_config = </span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">ConfigurationManager</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">.OpenMappedExeConfiguration(configMap,</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">ConfigurationUserLevel</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">.None);</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>channelFactory =</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">new</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">ConfigurationChannelFactory</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><</span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">IDrawing</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">>(endpointName,
dll_config, </span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">null</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">);</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>Channel =
channelFactory.CreateChannel();</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>}</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">public</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">void</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> Dispose() {</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">if</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> (channelFactory != </span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">null</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">
&& channelFactory.State == </span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">CommunicationState</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">.Opened)</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>channelFactory.Close();</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>}</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: white; color: green; font-family: "consolas"; font-size: 9.5pt;">//
here is other members...</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;">
</span></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">}</span></div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
Обратите внимание на то, что в процессе реализации нужного нам прокси мы обошлись без наследования от класса <a href="https://msdn.microsoft.com/en-us/library/ms576141%28v=vs.110%29.aspx" target="_blank"><span style="font-family: "courier new" , "courier" , monospace;">ClientBase</span></a>.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>Ссылки:</b></div>
<ul style="text-align: left;">
<li><a href="http://blog.learningtree.com/en/manage-wcf-4-5-service-configurations-from-one-location/" target="_blank">Manage WCF 4.5 Service Configurations from One Location</a></li>
<li><a href="https://blogs.msdn.microsoft.com/youssefm/2010/09/02/loading-wcf-client-configuration-from-different-files-with-configurationchannelfactory/" target="_blank">Loading WCF Client Configuration from Different Files with ConfigurationChannelFactory</a></li>
</ul>
</div>
</div>
Andrey Bushmanhttp://www.blogger.com/profile/01700238372554577360noreply@blogger.com0tag:blogger.com,1999:blog-5357147933020835692.post-19505554990808205492016-04-27T12:58:00.000+03:002016-04-28T10:48:20.180+03:00Об использовании событий pre-build и post-build в Visual Studio<div dir="ltr" style="text-align: left;" trbidi="on">
В некоторых проектах, создаваемых при помощи Visual Studo, возникает необходимость выполнения различного рода <i>дополнительных</i> операций в <span style="font-family: "courier new" , "courier" , monospace;">pre-build</span> [<i>и | или</i>] <span style="font-family: "courier new" , "courier" , monospace;">post-build</span>. <br />
<a name='more'></a><br />
Если исходный код проекта находится <i>в сети</i>, а не на локальном диске, то <i>открывать</i> его следует в Visual Studio через предварительно подключенный <i>сетевой диск</i>. Т.е. например, если исходный код проекта находится в каталоге <span style="font-family: "courier new" , "courier" , monospace;">"\\hyprostr\dfs\groups\developers\src\DwgSaveAs\"</span>, то следует предварительно создать сетевой диск при помощи команды <span style="font-family: "courier new" , "courier" , monospace;">NET ADD</span>: <br />
<span style="font-family: "courier new" , "courier" , monospace;"></span><br />
<div style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace;">net add Y: "\\hyprostr\dfs\groups\developers"</span></div>
<br />
После этого, открывать в IDE проект, находящийся в сети, всегда следует путём указания каталога <span style="font-family: "courier new" , "courier" , monospace;">"Y:\src\DwgSaveAs\"</span>, вместо его сетевого имени <span style="font-family: "courier new" , "courier" , monospace;">"\\hyprostr\dfs\groups\developers\src\DwgSaveAs"</span>. В этом случае значения переменных <span style="font-family: "courier new" , "courier" , monospace;">ProjectDir</span>, <span style="font-family: "courier new" , "courier" , monospace;">TargetDir</span> и т.п. будут так же содержать значения, начинающиеся с <span style="font-family: "courier new" , "courier" , monospace;">"Y:\"</span>, а не с <span style="font-family: "courier new" , "courier" , monospace;">"\\hyprostr\"</span>. Это позволит в <span style="font-family: "courier new" , "courier" , monospace;">pre-build</span> и <span style="font-family: "courier new" , "courier" , monospace;">post-build</span> использовать команды такие как <span style="font-family: "courier new" , "courier" , monospace;">COPY</span>, т.е. такие, которые обычно не могут работать с <i><span style="font-family: "courier new" , "courier" , monospace;">UNC</span>-путями</i>.<br />
<br />
Предположим, что в событии <span style="font-family: "courier new" , "courier" , monospace;">post-build</span> нашего проекта размещена такая команда:<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">COPY /Y "$(ProjectDir)teigha_vc11_amd64dll\*" "$(TargetDir)*"</span><br />
<br />
Если проект будет открыт в IDE с использованием сетевого пути (<span style="font-family: "courier new" , "courier" , monospace;">"\\hyprostr\...")</span>, а не сетевого диска <span style="font-family: "courier new" , "courier" , monospace;">"Y:\..."</span>, то попытка выполнить операцию, обозначенную в <span style="font-family: "courier new" , "courier" , monospace;">post-build</span> будет неудачной. Если же проект будет открыть с использованием сетевого диска, то обозначенная в команде операция будет выполнена успешно.<br />
<br />
<b>Циклы в <span style="font-family: "courier new" , "courier" , monospace;">pre-build</span> и <span style="font-family: "courier new" , "courier" , monospace;">post-build</span></b><br />
<br />
Обозначенная выше команда, размещённая в <span style="font-family: "courier new" , "courier" , monospace;">post-build</span>, может оказаться нецелесообразной в использовании, если выполняется копирование большого количества файлов. В подобных случаях процесс сборки проекта может занимать времени больше, чем нам бы того хотелось. Да и вообще, каждый раз выполнять копирование файлов, <i>не подвергавшихся изменению</i>, не целесообразно...<br />
<br />
Порой нам нужно копировать только такие файлы, которых ещё нет целевом каталоге. Например, это могут быть файлы библиотек сторонних разработчиков. Чтобы копировать <i>только отсутствующие</i> в целевом каталоге файлы, в нашем <span style="font-family: "courier new" , "courier" , monospace;">post-build</span> предыдущий вариант команды можно заменить таким:<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">For <span style="color: red;">%</span>%F In ("$(ProjectDir)teigha_vc11_amd64dll\*.*") Do If Not Exist "$(TargetDir)<span style="color: red;">%</span>%~nxF" Copy "<span style="color: red;">%</span>%F" "$(TargetDir)<span style="color: red;">%</span>%~nxF"</span><br />
<b><br /></b>
<b>Внимание! </b><br />
Обратите внимание на то, что все символы <span style="font-family: "courier new" , "courier" , monospace;">%</span> в данном случае <b>должны</b> быть продублированы. В этом нет необходимости в <span style="font-family: "courier new" , "courier" , monospace;">BAT</span>-файлах, но при использовании подобных выражений в составе <span style="font-family: "courier new" , "courier" , monospace;">pre-build</span> или <span style="font-family: "courier new" , "courier" , monospace;">post-build</span> проектов Visual Studio такая потребность имеется.<br />
<br />
<b>Примечание</b><br />
Несмотря на то, что решения открываемые через <i>сетевой диск</i> отображаются в группе <span style="font-family: "courier new" , "courier" , monospace;">Recent</span> вкладки <span style="font-family: "courier new" , "courier" , monospace;">Start Page</span>, тем не менее <i>Visual Studio 2015 Update 2</i> не умеет их открывать через соответствующую ссылку, <i>если пытаться сделать это сразу после запуска IDE</i>. При попытке сделать это, появляется такое окошко:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhh0NuA53CpTDkQIp4EHKY85FTEN7-O8mDIWLHJxwgtVWz1uPOxPl_mtEel4x85VZr7-v6W0rIyhjGRX33p8cUG0GP10_6kS4Nzanl4RZLpv08VIsRaOWq0kEbMcKLqffW-PAZqJ-WjoPi8/s1600/start_page2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhh0NuA53CpTDkQIp4EHKY85FTEN7-O8mDIWLHJxwgtVWz1uPOxPl_mtEel4x85VZr7-v6W0rIyhjGRX33p8cUG0GP10_6kS4Nzanl4RZLpv08VIsRaOWq0kEbMcKLqffW-PAZqJ-WjoPi8/s1600/start_page2.png" /></a></div>
<br />
Чтобы открыть решение через сетевой диск, <i>сразу после запуска Visual Studio</i>, придётся выбирать пункт <span style="font-family: "courier new" , "courier" , monospace;">Open Project</span> на вкладке <span style="font-family: "courier new" , "courier" , monospace;">Start Page</span>, или же сделать это через меню<span style="font-family: "courier new" , "courier" , monospace;"> File -> Open Project/Solution</span>. Кроме того, работает и способ открытия <span style="font-family: "courier new" , "courier" , monospace;">sln</span>-файла решения (<i>из сетевого диска</i>) в Проводнике Windows.<br />
<br />
Если затем закрыть решение, не завершая при этом работу IDE (т.е. при помощи пункта меню <span style="font-family: "courier new" , "courier" , monospace;">File -> Close Solution</span>), то соответствующая ссылка на решение в группе <span style="font-family: "courier new" , "courier" , monospace;">Recent</span> будет работать. Причём работать будет и в том случае, если выбрав пункт меню <span style="font-family: "courier new" , "courier" , monospace;">File -> Open Project/Solution</span> затем перейти в каталог решения и нажать кнопку <span style="font-family: "Courier New",Courier,monospace;">Cancel</span> - после этого, соответствующая ссылка в <span style="font-family: "courier new" , "courier" , monospace;">Recent</span> сможет открывать решение. Правда всё это работает только до перезапуска IDE...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_IeMeb80oINSnMkHc2DBqoVLsjbyzc-FziXjQYWT6bFv2jp7fxN48KtCFeyq1m-fhHekboMpGrLAwkOUTX7LdM5Z2h7cIEz-QFJSVw3tnMuEe5vDguSQ51cPiAoM7V1F8oALoYA8eLgDN/s1600/start_page.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_IeMeb80oINSnMkHc2DBqoVLsjbyzc-FziXjQYWT6bFv2jp7fxN48KtCFeyq1m-fhHekboMpGrLAwkOUTX7LdM5Z2h7cIEz-QFJSVw3tnMuEe5vDguSQ51cPiAoM7V1F8oALoYA8eLgDN/s1600/start_page.png" /></a></div>
<br /></div>
Andrey Bushmanhttp://www.blogger.com/profile/01700238372554577360noreply@blogger.com0tag:blogger.com,1999:blog-5357147933020835692.post-8372485805877080942016-04-22T12:04:00.003+03:002016-04-22T12:04:58.207+03:00Книги в PDF формате, доступные для скачивания<div dir="ltr" style="text-align: left;" trbidi="on">
На ресурсе <a href="http://www.allitebooks.com/">http://www.allitebooks.com/</a> выкладываются книги в формате PDF, доступные для свободного скачивания. Библиотека пополняется ежедневно (ну или почти ежедневно). Пользуюсь давно. По указанной ссылке книги не испорчены (<i>как это зачастую бывает в наше время</i>) переводом с английского на русский язык. Я редко встречал качественный перевод, в виду чего с некоторых пор предпочитаю читать на языке оригинала.<br />
<a name='more'></a><br />
Если кто-то знает адреса подобных (<i>качественных!</i>) ресурсов - обозначение их в комментариях темы приветствуется. </div>
Andrey Bushmanhttp://www.blogger.com/profile/01700238372554577360noreply@blogger.com0tag:blogger.com,1999:blog-5357147933020835692.post-89585584317684811672016-04-21T16:39:00.001+03:002016-04-21T20:45:31.441+03:00И снова о хостинге WCF-сервисов в 2016-м accoreconsole.exe...<div dir="ltr" style="text-align: left;" trbidi="on">
Подумал тут... Вполне возможно, что Autodesk <i>умышленно</i> <a href="http://bushman-andrey.blogspot.ru/2016/04/wcf-accoreconsoleexe-autocad-2016.html" target="_blank">прикрыла</a>
возможность хостинга сервисов в 2016-м <span style="font-family: "courier new" , "courier" , monospace;">accoreconsole.exe</span>, дабы если не
полностью пресечь (<i>т.к. это не возможно</i>), то <i>хотя бы максимально
усложнить</i> возможность использования инструмента <i>в системе распределённых
приложений взаимодействующих через сервисы</i>... <br />
<a name='more'></a><br />
Наличие возможности хостинга WCF-сервисов в <span style="font-family: "courier new" , "courier" , monospace;">accoreconsole.exe</span> <i>для ряда случаев</i> может
существенно сократить потребность в количестве приобретаемых лицензий AutoCAD на
предприятиях, где выполнение <i>некоторого</i> (<i>если даже не всего</i>) объёма
работ можно автоматизировать (т.е. сделать <i>программно</i>). Одним сервисом
или набором сервисов (читать как "<i>одной лицензией AutoCAD</i>") в таком случае сможет пользоваться <i>неограниченное количество сотрудников</i> компании <i>одновременно</i>. Для компании клиента это, безусловно, экономия... Но вот для компании Autodesk - это потеря денег... Т.е. налицо явный конфликт интересов и вполне очевидно, кто в данной ситуации имеет на руках "<i>все козыри</i>".<br />
<br />
Кроме того, не стоит забывать,
что теперь в Autodesk хотят одних и тех же овец стричь каждый год (новая
ценовая политика) в виду чего даже сама по себе <i>потенциальная возможность</i> сокращения лицензий вряд ли будет воспринята ими положительно. Т.о., как я уже писал выше: <i>не исключено</i>, что в 2016-м AutoCAD "кислород" сервисам был перекрыт преднамеренно...<br />
<br />
<b>Резюме</b> <br />
Я не удивлюсь, если в более новых версиях AutoCAD приложение <span class="bbc_font" style="font-family: "courier";">accoreconsole.exe</span> будет вовсе тихо изъято, мол "<i>за ненадобностью</i>"... </div>
Andrey Bushmanhttp://www.blogger.com/profile/01700238372554577360noreply@blogger.com0tag:blogger.com,1999:blog-5357147933020835692.post-43962490672661244012016-04-19T16:25:00.000+03:002016-04-19T17:07:01.150+03:00О хостинге WCF-сервисов в accoreconsole.exe (продолжение)<div dir="ltr" style="text-align: left;" trbidi="on">
В продолжение <a href="http://bushman-andrey.blogspot.ru/2016/04/wcf-accoreconsoleexe-autocad-2016.html" target="_blank">предыдущей записи</a> по обозначенной теме...<br />
<br />
<a name='more'></a>Экспериментальным путём выяснил, что проблема хостинга WCF сервисов в <span style="font-family: "courier new" , "courier" , monospace;">accoreconsole.exe</span> присутствует в AutoCAD 2016, но отсутствует во всех более ранних версиях (2013-2015). Проверялось на AutoCAD 2016 x64 SP1 English с установленным <a href="https://knowledge.autodesk.com/support/autocad/downloads/caas/downloads/content/autodesk-C2-AE-autocad-C2-AE-2016-hotfix-3.html?v=2016" target="_blank">Hotfix 3</a>. Проверить наличие обозначенной проблемы в AutoCAD 2017 нет возможности за неимением оного, но очень даже не исключено, что обозначенный баг будет теперь и в нём и во всех последующих версиях...<br />
<br />
<b>Примечание:</b><br />
Во всех без исключениях версиях <span style="font-family: "courier new" , "courier" , monospace;">accoreconsole.exe</span> наблюдал ещё и такую проблему: то, что программно отправляется в консоль AutoCAD через <span style="font-family: "courier new" , "courier" , monospace;">Editor.WriteLine(...)</span> по факту в консоли не появляется... Можно вместо этого воспользоваться <span style="font-family: "courier new" , "courier" , monospace;">Application.ShowAlertDialog(...)</span> - в этом случае текст попадает в консоль, но это очень похоже на выдёргивание зубов плоскогубцами через зад...</div>
Andrey Bushmanhttp://www.blogger.com/profile/01700238372554577360noreply@blogger.com0tag:blogger.com,1999:blog-5357147933020835692.post-42740927012803515112016-04-14T15:14:00.000+03:002016-04-19T17:37:24.935+03:00О хостинге WCF-сервисов в accoreconsole.exe (AutoCAD 2016)<div dir="ltr" style="text-align: left;" trbidi="on">
Как известно, WCF-сервисы могут в качестве хостинга использовать не только IIS и WAS, но так же и произвольные приложения (консольные или GUI). Как показывает практика, в качестве хоста можно использовать <span style="font-family: "courier new" , "courier" , monospace;">acad.exe</span>. В идеале хотелось бы иметь возможность хостить службы в <span style="font-family: "courier new" , "courier" , monospace;">accoreconsole.exe</span>, но не забываем, что это <i>Autodesk</i>, а это означает, что скучать не придётся...<br />
<br />
<a name='more'></a><br />
<b>Когда это может оказаться интересным?</b><br />
<br />
Как известно, в параметрах запуска <span style="font-family: "courier new" , "courier" , monospace;">accoreconsole.exe</span> можно указывать набор ключей, в т.ч. и ключ <span style="font-family: "courier new" , "courier" , monospace;">/s</span>, при помощи которого разрешено передавать имя файла скрипта (<span style="font-family: "courier new" , "courier" , monospace;">SCR</span>-файла). По завершению работы скрипта приложение так же автоматически завершит свою работу. Однако порой может возникнуть потребность <i>интерактивного</i> использования <i>функционала</i>, предоставляемого <span style="font-family: "courier new" , "courier" , monospace;">accoreconsole.exe</span> (<i>т.е. само по себе консольное окно при этом не требуется</i>) не закрывая приложение столько времени, сколько потребуется (можно просто скрыть консольное окошко).<br />
<br />
Хостинг службы в AutoCAD позволяет другим приложениям (т.н. <i>клиентам</i>) взаимодействовать с ним не прибегая к использованию AutoCAD COM API и при этом получая возможность задействовать возможности AutoCAD .NET API. Кроме того, в любой момент служба может быть перемещена на любой др. компьютер абсолютно прозрачно для клиентов.<br />
<br />
В случае необходимости, клиент так же сможет отправлять службе произвольный набор команд, которые будут выполняться в AutoCAD на локальной или удалённо расположенной машине. Например с планшета, работающего под управлением <i>OS Android</i> пользователь сможет отправлять команды пакетной обработки чертежей (очистка, аудит, пересохранение и т.п.).<br />
<br />
Это не означает, что на удалённой или локальной машинке обязательно должен быть постоянно запущен AutoCAD. Нет. Клиент может обратиться к службе, которая хостится в IIS или WAS с требованием что-то сделать в AutoCAD. Эта служба запускает AutoCAD (устанавливая видимость его окна в False) и в свою очередь является клиентом для другой службы, хостящейся в AutoCAD, передавая ей ваши запросы, а вам - её ответы. После того, как необходимый вам набор операций в AutoCAD будет выполнен служба, хостящаяся в IIS или WAS завершает работу AutoCAD и ждёт следующих обращений. В случае необходимости, параллельно может быть запущено несколько экземпляров AutoCAD, выполняющих каждый свою задачу, полученную от клиента. Для упрощения в данной теме я не использую промежуточную службу.<br />
<br />
Сервис может, к примеру, проверять наличие обновлений (для AutoCAD и его расширений) на сервере компании и в случае их обнаружения сообщать об этом пользователю (или выполнять обновление - это на откуп администраторов CAD).<br />
<br />
В идеале, конечно же, лучше всего на роль хоста службы подошёл бы <span style="font-family: "courier new" , "courier" , monospace;">accoreconsole.exe</span>...<br />
<br />
<br />
<b>Служба</b><br />
<br />
Предположим, что служба, предназначенная для хостинга в AutoCAD, реализует такой интерфейс:<br />
<br />
<span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">namespace</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> Bushman.CAD.Services {</span>
<br />
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>[</span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">ServiceContract</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">(Namespace = </span><span lang="EN-US" style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">"www.gpsm.ru"</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">)]</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">interface</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">IMyContract</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> {</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>[</span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">OperationContract</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">]</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">void</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> Write(</span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">string</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> msg); </span><span lang="EN-US" style="background: white; color: green; font-family: "consolas"; font-size: 9.5pt;">//
Write message into AutoCAD command console.</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>[</span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">OperationContract</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">]</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">string</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> GetVersion(); </span><span lang="EN-US" style="background: white; color: green; font-family: "consolas"; font-size: 9.5pt;">// Get AutoCAD version</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">}</span></div>
<div class="MsoNormal">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">}</span></div>
<br />
Реализуем обозначенный интерфейс как-то так:<br />
<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]--><br />
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" LatentStyleCount="156">
</w:LatentStyles>
</xml><![endif]--><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Обычная таблица";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]--><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">using</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">cad</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> =
Autodesk.AutoCAD.ApplicationServices.Core.</span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">Application</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">;</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">using</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> Autodesk.AutoCAD.ApplicationServices;</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">namespace</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> Bushman.CAD.Services {</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">class</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">MyService</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> : </span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">IMyContract</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> {</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">public</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">string</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> GetVersion() {</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">return</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">cad</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">.Version.ToString();</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>}</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">public</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">void</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> Write(</span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">string</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> msg) {</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">Document</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> doc = </span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">cad</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">.DocumentManager.MdiActiveDocument;</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">if</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> (</span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">null</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> !=
doc) {</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;">
</span>doc.Editor.WriteMessage(msg);</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">}</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>}</span></div>
<div class="MsoNormal">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>}</span></div>
<br />
Никаких команд определять не будем, а инициализацию расширения выполним следующим образом:<br />
<br />
<span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">using</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> System;</span>
<br />
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">using</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> System.ServiceModel;</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">using</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">cad</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> =
Autodesk.AutoCAD.ApplicationServices.Core.</span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">Application</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">;</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">using</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">
Autodesk.AutoCAD.ApplicationServices;</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">using</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> Autodesk.AutoCAD.Runtime;</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">[</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">assembly</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">: </span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">ExtensionApplication</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">(</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">typeof</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">(Bushman.CAD.Services.</span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">ExtensionApplication</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">))]</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">namespace</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> Bushman.CAD.Services {</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">public</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">class</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">ExtensionApplication</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> : </span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">IExtensionApplication</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> {</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">static</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">ServiceHost</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> host = </span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">null</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">;</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">static</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> ExtensionApplication() {</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">try</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">
{</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>host = </span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">new</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">ServiceHost</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">(</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">typeof</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">(</span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">MyService</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">));</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>host.Open();</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>host.UnknownMessageReceived +=
Host_UnknownMessageReceived;</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">AppDomain</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">.CurrentDomain.ProcessExit +=
ProcessExit;</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>}</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">catch</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">
(System.</span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">Exception</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> ex) {</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">Document</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> doc = </span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">cad</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">.DocumentManager.MdiActiveDocument;</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">if</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> (</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">null</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> != doc)
doc.Editor.WriteMessage(ex.Message);</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>}</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>}</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">private</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">static</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">void</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> Host_UnknownMessageReceived(</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">object</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> sender,</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">UnknownMessageReceivedEventArgs</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> e) {</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">Document</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> doc = </span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">cad</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">.DocumentManager.MdiActiveDocument;</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">if</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">
(</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">null</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> != doc)
doc.Editor.WriteMessage(e.Message.ToString());</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>}</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">private</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">static</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">void</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> ProcessExit(</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">object</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> sender, </span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">EventArgs</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> e) {</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">if</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">
(</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">null</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> != host) host.Close();</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>}</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">public</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">void</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> Initialize() {</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">string</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> status = </span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">null</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> == host ? </span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">"null"</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> : host.State.ToString();</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">Document</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> doc = </span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">cad</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">.DocumentManager.MdiActiveDocument;</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">if</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">
(</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">null</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> != doc)
doc.Editor.WriteMessage(</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">"\nHost status: {0}.\n"</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">, status);</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>}</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">public</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">void</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> Terminate() {</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: green; font-family: "consolas"; font-size: 9.5pt;">// Nothing is here.</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>}</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>}</span></div>
<div class="MsoNormal">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">}</span></div>
<br />
<br />
<b>Клиент</b><br />
<br />
Клиента реализуем следующим образом:<br />
<br />
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">using</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> System;</span>
<br />
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">using</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> System.ServiceModel;</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">using</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">
Bushman.MyClient.ServiceReference1;</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">namespace</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> Bushman.MyClient {</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">class</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">
</span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">Program</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> {</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">static</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">void</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> Main(</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">string</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">[] args) {</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">Console</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">.Title = </span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">"CAD client"</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">;</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">try</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">
{</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">using</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> (</span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">MyContractClient</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> client = </span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">new</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">MyContractClient</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">(</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">"http"</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">)) {</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">if</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> (client.InnerChannel.State
!= </span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">CommunicationState</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">.Faulted) {</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>client.Open();</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">string</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> version =
client.GetVersion();</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">Console</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">.WriteLine(</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">"CAD version: {0}"</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">, version);</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>client.Write(</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">"Client said: Hello,
AutoCAD.\n"</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">);</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>}</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>}</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>}</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">catch</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">
(</span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">Exception</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> ex) {</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">Console</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">.WriteLine(ex.Message);</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>}</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">Console</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">.WriteLine(</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">"Press any key for exit..."</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">);</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">Console</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">.ReadKey();</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>}</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>}</span></div>
<div class="MsoNormal">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">}</span></div>
<br />
<br />
Конфигурационные файлы <span style="font-family: "courier new" , "courier" , monospace;">acad.exe.config</span> и <span style="font-family: "courier new" , "courier" , monospace;">accoreconsole.exe.config</span> настраиваю на работу с обозначенной выше службой:<br />
<br />
<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]--><br />
<!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" LatentStyleCount="156">
</w:LatentStyles>
</xml><![endif]--><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Обычная таблица";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]--><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">configuration</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span>
<br />
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">startup</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">useLegacyV2RuntimeActivationPolicy</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">true</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">supportedRuntime</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">version</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">v4.0</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">/></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">startup</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><!--</span><span style="background: white; color: green; font-family: "consolas"; font-size: 9.5pt;">All assemblies in AutoCAD are fully trusted so there's no
point generating publisher evidence</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">--></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">runtime</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">generatePublisherEvidence</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">enabled</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">false</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">/></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">runtime</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">system.serviceModel</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">services</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">service</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">name</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">Bushman.CAD.Services.MyService</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">behaviorConfiguration</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">MEXGET</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">host</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">baseAddresses</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">add</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">baseAddress</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">http://win7x64ac2:8001</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">/></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">baseAddresses</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">host</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">endpoint</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">name</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">http</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">binding</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">wsHttpBinding</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">address</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">MyService</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">bindingConfiguration</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">MyContract</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">contract</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> =</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">Bushman.CAD.Services.IMyContract</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">endpoint</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">service</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">services</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">bindings</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">wsHttpBinding</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">binding</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">name</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">MyContract</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">/></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">wsHttpBinding</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">bindings</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">behaviors</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">serviceBehaviors</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">behavior</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">name</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">MEXGET</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">serviceMetadata</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">httpGetEnabled</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">true</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">/></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">behavior</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">serviceBehaviors</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">behaviors</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">diagnostics</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">wmiProviderEnabled</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">true</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">messageLogging</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">logEntireMessage</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">true</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">logMalformedMessages</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">true</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">logMessagesAtServiceLevel</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">true</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">logMessagesAtTransportLevel</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">true</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">maxMessagesToLog</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">3000</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>/></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">diagnostics</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">system.serviceModel</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">system.diagnostics</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">sources</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">source</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">name</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">System.ServiceModel</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">switchValue</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">Information, ActivityTracing</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">propagateActivity</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">true</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> ></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">listeners</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">add</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">name</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">xml</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">/></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">listeners</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">source</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">source</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">name</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">System.ServiceModel.MessageLogging</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">listeners</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">add</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">name</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">xml</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">/></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">listeners</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">source</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">source</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">name</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">myUserTraceSource</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">switchValue</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">Information, ActivityTracing</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">listeners</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">add</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">name</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">xml</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">/></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">listeners</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">source</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">sources</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">sharedListeners</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">add</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">name</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">xml</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">type</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">System.Diagnostics.XmlWriterTraceListener</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">initializeData</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">\\hyprostroy\dfs\Обмен\Бушман\logs\Service-Traces.svclog</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> /></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">sharedListeners</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">system.diagnostics</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">configuration</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span></div>
<br />
<br />
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
Конфигурационный файл клиента выглядит так:<br />
<br />
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><?</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">xml</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">version</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">1.0</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">encoding</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">utf-8</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> ?></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<br />
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">configuration</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">startup</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">supportedRuntime</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">version</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">v4.0</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">sku</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">.NETFramework,Version=v4.6.1</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> /></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">startup</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">system.serviceModel</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">bindings</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">wsHttpBinding</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">binding</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">name</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">http</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> /></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">wsHttpBinding</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">bindings</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">client</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">endpoint</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">address</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">http://win7x64ac2:8001/MyService</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">binding</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">wsHttpBinding</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">bindingConfiguration</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">http</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">contract</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">ServiceReference1.IMyContract</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">name</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">http</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">identity</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><!--</span><span style="background: white; color: green; font-family: "consolas"; font-size: 9.5pt;"> WARNING: change the value according your
user principal name. </span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">--></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">userPrincipalName</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">value</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">admin@hyprostr</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> /></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">identity</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">endpoint</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">client</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">diagnostics</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">wmiProviderEnabled</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">true</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">messageLogging</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">logEntireMessage</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">true</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">logMalformedMessages</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">true</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">logMessagesAtServiceLevel</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">true</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">logMessagesAtTransportLevel</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">true</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">maxMessagesToLog</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">3000</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>/></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">diagnostics</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">system.serviceModel</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">system.diagnostics</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">sources</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">source</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">name</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">System.ServiceModel</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">switchValue</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">Information, ActivityTracing</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">propagateActivity</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">true</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> ></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">listeners</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">add</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">name</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">xml</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">/></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">listeners</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">source</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">source</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">name</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">System.ServiceModel.MessageLogging</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">listeners</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">add</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">name</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">xml</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">/></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">listeners</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">source</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">source</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">name</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">myUserTraceSource</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">switchValue</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">Information, ActivityTracing</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">listeners</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">add</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">name</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">xml</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">/></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">listeners</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">source</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">sources</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">sharedListeners</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">add</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">name</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">xml</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">type</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">System.Diagnostics.XmlWriterTraceListener</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">initializeData</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">\\hyprostroy\dfs\Обмен\Бушман\logs\Client-Traces.svclog</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> /></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">sharedListeners</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">system.diagnostics</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"></span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"></</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">configuration</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">></span></div>
<br />
<br />
<b>Запускаем службу и клиента</b><br />
Служба и клиент могут находится как на одном компьютере, так и на разных компьютерах в сети (или в Интернет). Если в качестве хоста использовать <span style="font-family: "courier new" , "courier" , monospace;">acad.exe</span>, то всё нормально работает:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD0HzuthmHKWqb83wjIXwkkoRHlLpRoyfARAtwumqa-Sj5Z8yfrLLTCrwVUNMXZCHRrFAlkl5R_sPVrNJp_6XjstTJ029oVVGRlBaQngqlyiIQ4jflGw4MoIKZOk6Aex7QmJPe5aaa-0Iv/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="560" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD0HzuthmHKWqb83wjIXwkkoRHlLpRoyfARAtwumqa-Sj5Z8yfrLLTCrwVUNMXZCHRrFAlkl5R_sPVrNJp_6XjstTJ029oVVGRlBaQngqlyiIQ4jflGw4MoIKZOk6Aex7QmJPe5aaa-0Iv/s640/2.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKZFHiyRbHALMw6MTLqs5gS1Iw64aPrP1T3g3E_wXalqRLym_-nBPWbRa7DAm_5VL9mlqMZLF7yXlzHM7j-f0imAUYcYcdsn44suCgmYl6WhDNIjvmTVw7udwZBL9Pjf6lsz4Rouc9jcg7/s1600/0.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="578" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKZFHiyRbHALMw6MTLqs5gS1Iw64aPrP1T3g3E_wXalqRLym_-nBPWbRa7DAm_5VL9mlqMZLF7yXlzHM7j-f0imAUYcYcdsn44suCgmYl6WhDNIjvmTVw7udwZBL9Pjf6lsz4Rouc9jcg7/s640/0.png" width="640" /></a></div>
<br />
Но вот если в качестве хоста использовать <span style="font-family: "courier new" , "courier" , monospace;">accoreconsole.exe</span>, то достучаться до сервиса не удастся даже с локального компьютера, на котором запущен хост сервиса. При этом сервис успешно запускается, но не доступен:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguN-bOvtLfKR2UikjACKpNEy_ToaN63P6riq_erUlXbeUSYM0RnEUVHT6p36F19oanpDiK8XCW6yGITWUyhygzBPV2vuysyz_z5Tmw7fqiQwCWNl8Qk7ZGYHyOxTCahGo5mlK19wmVVshY/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="324" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguN-bOvtLfKR2UikjACKpNEy_ToaN63P6riq_erUlXbeUSYM0RnEUVHT6p36F19oanpDiK8XCW6yGITWUyhygzBPV2vuysyz_z5Tmw7fqiQwCWNl8Qk7ZGYHyOxTCahGo5mlK19wmVVshY/s640/1.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhk3vHsMKpOKaqFTc4nI5vAj_bH7rm3o2hNBFwwMQsxphn5UrCe-JoAVOPoGOuBwcrzadRQ_7eGfocVXRzYeFAJqlKkLRCu5d8P6V87FqunmlUTozJncmHKEcsVmUb1R6DWJr4MQRe1aLHS/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="322" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhk3vHsMKpOKaqFTc4nI5vAj_bH7rm3o2hNBFwwMQsxphn5UrCe-JoAVOPoGOuBwcrzadRQ_7eGfocVXRzYeFAJqlKkLRCu5d8P6V87FqunmlUTozJncmHKEcsVmUb1R6DWJr4MQRe1aLHS/s640/3.png" width="640" /></a></div>
<br />
<br />
В логах клиента можно посмотреть описание проблемы:<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFooghLQ3m0sg1rcjHIaRbDV1eB-8ogRXKO801j4Ks_r5bi85fDeOg01jr50GcA4TiKjlb1IGtm7TgAlppx5R-88MMras4KhgUkP_aC-yIw_ljhR_b-sUupnXUPynBroXzCcHLdxv49GOY/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="490" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFooghLQ3m0sg1rcjHIaRbDV1eB-8ogRXKO801j4Ks_r5bi85fDeOg01jr50GcA4TiKjlb1IGtm7TgAlppx5R-88MMras4KhgUkP_aC-yIw_ljhR_b-sUupnXUPynBroXzCcHLdxv49GOY/s640/4.png" width="640" /></a></div>
<br />
По обозначенной теме мне ответил Августо Гонсалес:<br />
<blockquote class="tr_bq">
<b>Augusto Goncalves (API Evangelist at Autodesk):</b><br />
<i>As far as I remember trying, <span style="font-family: "courier new" , "courier" , monospace;">accoreconsole.exe</span> doesn't accept new calls (from automation) after is open (but I haven't tried with WCF). <span style="font-family: "courier new" , "courier" , monospace;">Acad.exe</span> is a little different... I don't believe <span style="font-family: "courier new" , "courier" , monospace;">accoreconsole</span> will remain receiving calls after it was launched, it was designed to launch with a list of commands on the <span style="font-family: "courier new" , "courier" , monospace;">.scr</span> file.</i></blockquote>
Если Августо прав, то это будет очередной, весьма досадный недостаток <span style="font-family: "courier new" , "courier" , monospace;">accoreconsole.exe</span>...<br />
<br />
Продолжение темы - <a href="http://bushman-andrey.blogspot.ru/2016/04/wcf-accoreconsoleexe.html" target="_blank">здесь</a>...</div>
Andrey Bushmanhttp://www.blogger.com/profile/01700238372554577360noreply@blogger.com0tag:blogger.com,1999:blog-5357147933020835692.post-24188968710374882632016-04-08T17:00:00.002+03:002016-04-12T15:03:14.682+03:00Блокировка кнопки и контекстного меню закрытия консольного окна<div dir="ltr" style="text-align: left;" trbidi="on">
Как известно, <span class="bbc_font" style="font-family: "courier";">accoreconsole.exe</span>
всегда был и до сих пор остаётся достаточно кривым... Один из неприятных
аспектов его поведения, присутствующий по сей день, заключается в том,
что если завершать работу приложения кликом мышки по кнопке закрытия
консольного окна в верхнем правом углу, либо выбирая соответствующий
пункт из контекстного меню консольного окна, то приложение завершает свою работу через
задницу - не выполняя код методов <span class="bbc_font" style="font-family: "courier";">Terminate()</span>, а так же код зарегистрированных событий, таких например, как <span class="bbc_font" style="font-family: "courier";">AppDomain.CurrentDomain.ProcessExit</span>.<br />
<a name='more'></a><br />
Однако обозначенная проблема <i>гораздо</i> глубже и не ограничивается рамками кода<i> ваших расширений:</i> при таком способе закрытия AutoCAD так же не выполняет <i>и свой собственный</i> код, который он обычно выполняет при завершении работы приложения (<i>код корректного освобождения ресурсов, сохранения настроек и т.п.</i>). Например, не происходит восстановление настроек в реестре, которые <i>временно </i>были изменены <span style="font-family: "courier new" , "courier" , monospace;">accoreconsole.exe</span> <i>под свои нужды</i>. Это сразу бросается в глаза на напримере переменной <span style="font-family: "courier new" , "courier" , monospace;">FILEDIA</span>, на время работы консольного приложения устанавливается в <span style="font-family: "courier new" , "courier" , monospace;">0</span>: при очередном запуске <span style="font-family: "courier new" , "courier" , monospace;">acad.exe</span> для неё приходится вручную восстанавливать значение <span style="font-family: "courier new" , "courier" , monospace;">1</span> (в противном случае вместо диалоговых окон AutoCAD будет использовать свою консоль).<br />
<br />
Если завершать работу <span class="bbc_font" style="font-family: "courier";">accoreconsole.exe</span> путём вызова команд <span class="bbc_font" style="font-family: "courier";">quit</span> и <span class="bbc_font" style="font-family: "courier";">exit</span>,
то завершение работы приложения происходит так, как это должно было
происходить (т.е. выполняется весь необходимый код). Однако никто не
застрахован от клика мышкой по обозначенной выше кнопке, а пользователи с
вероятностью 100% будут клацать как раз именно по ней, когда
потребуется завершить работу приложения, потому как такой способ
завершения работы - самый простой.<br />
<br />
В качестве "лекарства" против
обозначенной выше проблемы я блокирую кнопку закрытия консольного окна и
соответствующий её пункт контекстного меню:<br />
<br />
<div class="codeheader">
<br />
<a class="codeoperation" href="https://www.blogger.com/null"></a></div>
<div class="csharp geshi" style="font-family: monospace;">
<ol>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
<span style="color: #0600ff; font-weight: bold;">const</span> <span style="color: #6666cc; font-weight: bold;">uint</span> MF_BYCOMMAND <span style="color: green;">=</span> 0x00000000<span style="color: green;">;</span></div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
<span style="color: #0600ff; font-weight: bold;">const</span> <span style="color: #6666cc; font-weight: bold;">uint</span> MF_GRAYED <span style="color: green;">=</span> 0x00000001<span style="color: green;">;</span></div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
<span style="color: #0600ff; font-weight: bold;">const</span> <span style="color: #6666cc; font-weight: bold;">uint</span> SC_CLOSE <span style="color: green;">=</span> 0xF060<span style="color: green;">;</span></div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
<span style="color: #0600ff; font-weight: bold;">const</span> <span style="color: #6666cc; font-weight: bold;">uint</span> MF_DISABLED <span style="color: green;">=</span> 0x00000002<span style="color: green;">;</span></div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
</div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
<span style="color: green;">[</span>DllImport<span style="color: green;">(</span><span style="color: #666666;">"kernel32.dll"</span><span style="color: green;">)</span><span style="color: green;">]</span></div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
<span style="color: #0600ff; font-weight: bold;">static</span> <span style="color: #0600ff; font-weight: bold;">extern</span> IntPtr GetConsoleWindow<span style="color: green;">(</span><span style="color: green;">)</span><span style="color: green;">;</span></div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
</div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
<span style="color: green;">[</span>DllImport<span style="color: green;">(</span><span style="color: #666666;">"user32.dll"</span><span style="color: green;">)</span><span style="color: green;">]</span></div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
<span style="color: #0600ff; font-weight: bold;">static</span> <span style="color: #0600ff; font-weight: bold;">extern</span> IntPtr GetSystemMenu<span style="color: green;">(</span>IntPtr hWnd, <span style="color: #6666cc; font-weight: bold;">bool</span> bRevert<span style="color: green;">)</span><span style="color: green;">;</span></div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
</div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
<span style="color: green;">[</span>DllImport<span style="color: green;">(</span><span style="color: #666666;">"User32.dll"</span>, SetLastError <span style="color: green;">=</span> <span style="color: #0600ff; font-weight: bold;">true</span><span style="color: green;">)</span><span style="color: green;">]</span></div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
<span style="color: #0600ff; font-weight: bold;">static</span> <span style="color: #0600ff; font-weight: bold;">extern</span> <span style="color: #6666cc; font-weight: bold;">uint</span> EnableMenuItem<span style="color: green;">(</span>IntPtr hMenu, <span style="color: #6666cc; font-weight: bold;">uint</span> itemId, <span style="color: #6666cc; font-weight: bold;">uint</span> uEnable<span style="color: green;">)</span><span style="color: green;">;</span></div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
</div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
<span style="color: green;">[</span>DllImport<span style="color: green;">(</span><span style="color: #666666;">"user32.dll"</span><span style="color: green;">)</span><span style="color: green;">]</span></div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
<span style="color: #0600ff; font-weight: bold;">static</span> <span style="color: #0600ff; font-weight: bold;">extern</span> <span style="color: #6666cc; font-weight: bold;">bool</span> DeleteMenu<span style="color: green;">(</span>IntPtr hMenu, <span style="color: #6666cc; font-weight: bold;">uint</span> uPosition, <span style="color: #6666cc; font-weight: bold;">uint</span> uFlags<span style="color: green;">)</span><span style="color: green;">;</span></div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
</div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
<span style="color: green;">...</span></div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
</div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
<span style="color: teal; font-style: italic;">// Disable the Close ("X") button and "Close" context menu item of the Console window</span></div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
IntPtr hwnd <span style="color: green;">=</span> GetConsoleWindow<span style="color: green;">(</span><span style="color: green;">)</span><span style="color: green;">;</span></div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
IntPtr hmenu <span style="color: green;">=</span> GetSystemMenu<span style="color: green;">(</span>hwnd, <span style="color: #0600ff; font-weight: bold;">false</span><span style="color: green;">)</span><span style="color: green;">;</span></div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
<span style="color: #6666cc; font-weight: bold;">uint</span> hWindow <span style="color: green;">=</span> EnableMenuItem<span style="color: green;">(</span>hmenu, SC_CLOSE, MF_BYCOMMAND <span style="color: green;">|</span> MF_DISABLED <span style="color: green;">|</span> MF_GRAYED<span style="color: green;">)</span><span style="color: green;">;</span></div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
</div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
<span style="color: teal; font-style: italic;">// Also it is possible to delete "Close" context menu item </span></div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
<span style="color: teal; font-style: italic;">// instead of disabling it.</span></div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
<span style="color: teal; font-style: italic;">// DeleteMenu(hmenu, SC_CLOSE, MF_BYCOMMAND);</span></div>
</li>
</ol>
</div>
<br />
Однако
по факту я вижу, что кнопка закрытия окна заблокирована, а вот
контекстное меню - нет... Конечно, можно попросту вовсе удалить этот
пункт из контекстного меню и не заморачиваться на эту тему (в обозначенном
выше примере кода это успешно делает последняя закомментированная
строчка).<br />
<br />
Однако мне всё же интересно: <i>почему не блокируется пункт меню?</i> <br />
<br />
Оказалось,
что обозначенная проблема свойственна не только <span style="font-family: "courier new" , "courier" , monospace;">accoreconsole.exe</span>, но и
любому консольному приложению в Windows 7 x64, а так же в Windows Server
2003. А вот в Windows 10 x64 всё работает корректно...<br />
<br />
Т.о. то, что
контекстное меню не блокируется в некоторых версиях Windows - очень
похоже на баг WinAPI.<br />
<br />
В этой же теме сразу размещаю код примера того, как можно скрывать или отображать консольное окно (например всё тот же <span style="font-family: "courier new" , "courier" , monospace;">accoreconsole.exe</span>):<br />
<div class="csharp geshi" style="font-family: monospace;">
<ol>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
<span style="color: green;">[</span>DllImport<span style="color: green;">(</span><span style="color: #666666;">"kernel32.dll"</span><span style="color: green;">)</span><span style="color: green;">]</span></div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
<span style="color: #0600ff; font-weight: bold;">static</span> <span style="color: #0600ff; font-weight: bold;">extern</span> IntPtr GetConsoleWindow<span style="color: green;">(</span><span style="color: green;">)</span><span style="color: green;">;</span></div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
</div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
<span style="color: green;">[</span>DllImport<span style="color: green;">(</span><span style="color: #666666;">"user32.dll"</span><span style="color: green;">)</span><span style="color: green;">]</span></div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
<span style="color: #0600ff; font-weight: bold;">static</span> <span style="color: #0600ff; font-weight: bold;">extern</span> <span style="color: #6666cc; font-weight: bold;">bool</span> ShowWindow<span style="color: green;">(</span>IntPtr hWnd, <span style="color: #6666cc; font-weight: bold;">int</span> nCmdShow<span style="color: green;">)</span><span style="color: green;">;</span></div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
</div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
<span style="color: #0600ff; font-weight: bold;">const</span> <span style="color: #6666cc; font-weight: bold;">int</span> SW_HIDE <span style="color: green;">=</span> <span style="color: red;">0</span><span style="color: green;">;</span></div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
<span style="color: #0600ff; font-weight: bold;">const</span> <span style="color: #6666cc; font-weight: bold;">int</span> SW_SHOW <span style="color: green;">=</span> <span style="color: red;">5</span><span style="color: green;">;</span></div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
</div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
IntPtr hwnd <span style="color: green;">=</span> GetConsoleWindow<span style="color: green;">(</span><span style="color: green;">)</span><span style="color: green;">;</span></div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
</div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
<span style="color: teal; font-style: italic;">// Hide window</span></div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
ShowWindow<span style="color: green;">(</span>hwnd, SW_HIDE<span style="color: green;">)</span><span style="color: green;">;</span></div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
</div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
<span style="color: teal; font-style: italic;">// Show window</span></div>
</li>
<li style="background-color: white; border-bottom: 1px solid #efefef; border-left: 1px solid #999; line-height: 1.5em; padding: 0 5px;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">
ShowWindow<span style="color: green;">(</span>hwnd, SW_SHOW<span style="color: green;">)</span><span style="color: green;">;</span></div>
</li>
</ol>
</div>
<br />
Длительная, нередко печальная практика показывает, что лозунг Autodesk касательно данного продукта, к сожалению, выглядит как-то так:<br />
<blockquote class="tr_bq">
<i><span style="font-family: "courier new" , "courier" , monospace;">`accoreconsole.exe`</span> - мы заставим Вас работать через задницу!</i></blockquote>
</div>
Andrey Bushmanhttp://www.blogger.com/profile/01700238372554577360noreply@blogger.com0tag:blogger.com,1999:blog-5357147933020835692.post-21754361308748420612016-04-04T14:26:00.004+03:002016-04-04T14:37:58.173+03:00C#: скачиваем файлы из Интернет<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
Пример кода для простого скачивания файлов из Интернет (например файла <a href="http://stroustrup.com/Programming/PPP2code/std_lib_facilities.h">http://stroustrup.com/Programming/PPP2code/std_lib_facilities.h</a>). Сетевые настройки при этом считываются из настроек <i>Internet Explorer</i>.<br />
<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]--><br />
<a name='more'></a><br /><br />
<!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" LatentStyleCount="156">
</w:LatentStyles>
</xml><![endif]--><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Обычная таблица";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]-->
<br />
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">static</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">void</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">
Main(</span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">string</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">[] args) {</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">String</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> file_name = </span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">Path</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">.GetRandomFileName();</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">String</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> full_path = </span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">Environment</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">.ExpandEnvironmentVariables(</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">Path</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">.Combine(</span><span lang="EN-US" style="background: white; color: maroon; font-family: "consolas"; font-size: 9.5pt;">@"%LocalAppData%\Temp"</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">, file_name));</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">using</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> (</span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">WebClient</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">
client = </span><span lang="EN-US" style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">new</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">WebClient</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">()) {</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">String</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> uri = </span><span lang="EN-US" style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">"http://stroustrup.com/Programming/PPP2code/std_lib_facilities.h"</span><span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">;</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">var</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> proxyUri = </span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">WebRequest</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">.GetSystemWebProxy()</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>.GetProxy(</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">new</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">Uri</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">(uri));</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>client.Proxy = </span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">new</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">WebProxy</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">(proxyUri);</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>client.Proxy.Credentials = </span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">CredentialCache</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">.DefaultCredentials;</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">try</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">
{</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>client.DownloadFile(uri,
full_path);</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>}</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">catch</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">
(</span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">Exception</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"> ex) {</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">Console</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">.WriteLine(ex.Message);</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>}</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>}</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">Console</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">.WriteLine(</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">"The result file: </span><span style="background: white; color: mediumseagreen; font-family: "consolas"; font-size: 9.5pt;">{0}</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">"</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">, full_path);</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">Console</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">.WriteLine(</span><span style="background: white; color: #a31515; font-family: "consolas"; font-size: 9.5pt;">"Press any key for exit."</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">);</span></div>
<div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="background: white; color: #2b91af; font-family: "consolas"; font-size: 9.5pt;">Console</span><span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">.ReadKey();</span></div>
<div class="MsoNormal">
<span style="background: white; color: black; font-family: "consolas"; font-size: 9.5pt;">}</span></div>
<br />
<br />
<br /></div>
Andrey Bushmanhttp://www.blogger.com/profile/01700238372554577360noreply@blogger.com2tag:blogger.com,1999:blog-5357147933020835692.post-79113371737205213192016-03-11T15:33:00.001+03:002016-03-11T15:36:12.489+03:00Тренажёр для развития навыков счёта в восьмеричной и шестнадцатеричной системах исчислений<div dir="ltr" style="text-align: left;" trbidi="on">
Написал простую программку для тренировки навыков счёта в восьмеричной и шестнадцатеричной системе. Выложил <a href="https://bitbucket.org/Andrey-Bushman/xcalc/wiki/Home" target="_blank">здесь</a> (доступ на скачивание исходников и exe-версии открыт). Программа генерирует выражения, использующие заданные операторы для выбранной пользователем системы (или систем, если выбрано несколько) исчисления. Значения операндов берутся из указанных пользователем диапазонов.<br />
<br />
<a name='more'></a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://bytebucket.org/Andrey-Bushman/xcalc/raw/dea04ef78f72b4c0d666502af4fcac7a187ca80a/xcalc.ru.png?token=5a5732343a747934ffc30fa28fd9a96c44ddf356" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://bytebucket.org/Andrey-Bushman/xcalc/raw/dea04ef78f72b4c0d666502af4fcac7a187ca80a/xcalc.ru.png?token=5a5732343a747934ffc30fa28fd9a96c44ddf356" width="524" /></a></div>
<br />
<br />
В случае операции деления принцип работы немного отличается: вряд ли представляет интерес процесс деления чисел из диапазона от 03 до 07 (в восьмеричной системе), но скорее был бы полезнее запрашивать результат деления произведения этих чисел на одно из них (т.е. например, результат деления 025 на 03 или 07). Так и реализовал.</div>
Andrey Bushmanhttp://www.blogger.com/profile/01700238372554577360noreply@blogger.com0tag:blogger.com,1999:blog-5357147933020835692.post-57399319566349198952016-03-04T13:27:00.002+03:002016-03-04T13:36:46.728+03:00Об отображении нажимаемых клавиш в Autodesk ScreenCast<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="text-align: justify;">
Autodesk <a href="https://knowledge.autodesk.com/community/screencast" target="_blank">ScreenCast</a> в своей работе использует <a href="https://www.techsmith.com/snagit.html" target="_blank">Snagit</a>, о чём Autodesk информирует пользователя в сообщении, когда просит его подождать некоторое время до окончания публикации видео на сайте. Если записываемый пользователем набор операций выполняется на локальном компьютере, то в конечном видеоролике эти нажатия показываются текстом. Но возможны и другие варианты записи...</div>
<br />
<a name='more'></a>Например, возможны ситуации, когда Autodesk ScreenCast установлен на
физической машинке, но в видеоролике пользователь, помимо прочего, демонстрирует ещё и некоторый набор действий, выполняемых им на произвольном виртуальном компьютере, работающем под управлением VMWare или Virtual Box. Либо ещё один вариант: часть демонстрируемых операций происходит на
удалённом компьютере, к которому выполнено подключение по RDP (при помощи <span style="font-family: "courier new" , "courier" , monospace;">mstsc.exe</span>).<br />
<br />
Обозначенные выше два сценария могут возникать тогда, когда на локальной машине установлен Visual Studio, а целевые приложения, под которые пишется код (AutoCAD, Revit, NanoCAD, BricsCAD, SharePoint, и т.д. и т.п.) установлены на отдельных тестовых виртуальных машинках, часть из которых работает на локальном компьютере под управлением VMWare, а др. часть - тоже под управлением VMWare, но на сервере и подключение к ним выполняется по RDP. Т.е. например, когда программист пишет видео, в котором присутствует использование <a href="http://bushman-andrey.blogspot.ru/2014/03/blog-post.html" target="_blank">удалённой отладки кода</a>.<br />
<br />
В первом из обозначенных выше случаев, информация о нажимаемых клавишах отображаться не будет (от слова "совсем").<br />
<br />
Во втором - результат будет почти таким же как и в первом, за исключением того, что в случае нажатия комбинаций клавиш, например <span style="font-family: "courier new" , "courier" , monospace;">Ctrl + A</span>, всё же будет выводиться информация о нажатии функциональной клавиши <span style="font-family: "courier new" , "courier" , monospace;">Ctrl </span>(что, наверняка, будет сбивать зрителя с толку).<br />
<br />
<br /></div>
Andrey Bushmanhttp://www.blogger.com/profile/01700238372554577360noreply@blogger.com0tag:blogger.com,1999:blog-5357147933020835692.post-77269041153838108352016-02-10T16:08:00.002+03:002016-02-10T16:08:47.025+03:00Об обновлении справки в PowerShell через Update-Help.<div dir="ltr" style="text-align: left;" trbidi="on">
В PowerShell 4.0 при запуске <span style="font-family: "Courier New",Courier,monospace;">Update-help</span> (<i>с административными правами и доступом в Интернет</i>) я получаю сообщение об ошибке - мол не удаётся подключиться к серверу. Поиск по Интернету сразу же показал, что с обозначенной проблемой столкнулся не только я...<br />
<br />
<a name='more'></a><br />К счастью, <i>Jason Stangroome</i> в своём блоге <a href="https://blog.stangroome.com/2013/08/02/powershell-update-help-and-an-authenticating-proxy/" target="_blank">показал</a> способ решения этой проблемы. Этот вариант у меня успешно сработал. Спасибо Джейсону!<br /></div>
Andrey Bushmanhttp://www.blogger.com/profile/01700238372554577360noreply@blogger.com0tag:blogger.com,1999:blog-5357147933020835692.post-73424357883814403142016-02-03T20:50:00.003+03:002016-02-07T20:24:47.829+03:00Хостинг PowerShell в AutoCAD<div dir="ltr" style="text-align: left;" trbidi="on">
На <a href="https://bitbucket.org/Andrey-Bushman/cad-via-powershell/wiki/Home" target="_blank">Bitbucket</a> опубликовал пример хостинга PowerShell в AutoCAD. Такой хостинг позволяет программировать в AutoCAD на PowerShell путём использования AutoCAD .NET API. Демонстрационное видео <a href="http://www.youtube.com/watch?v=EV_t_vJMGaM&feature=em-upload_owner" target="_blank">здесь</a>. Откомпилированная под AutoCAD 2016 версия проекта <a href="https://bitbucket.org/Andrey-Bushman/cad-via-powershell/downloads" target="_blank">тут</a>.<br />
<br />
<a name='more'></a><br />
<br />
В проекте продемострировано использования двух подходов в программировании под AutoCAD:<br />
<br />
1. Программирование на PowerShell.<br />
2. Динамическая компиляция исходников C# с автоматической загрузкой и возможностью последующего выполнения скомпилированного кода. Аналогичный пример на VB.NET показывать не буду, т.к. там всё происходит аналогичным образом.<br />
<br />
Дополнительная информация для размышления: хостинг PowerShell в AutoCAD
может оказаться полезным в т.ч. и для программистов, пишущих на
AutoLISP\Visual LISP, т.к. помимо доступа к различным технологиям и
платформам от Майкрософт, дополнительно предосталяет им возможность в
Lisp-коде пользоваться .NET-библиотеками, в т.ч. выполнять динамическую
компиляцию произвольного .NET-кода с последующим его исполнением.<br />
<br />
Рассказывать о том, что такое <a href="https://msdn.microsoft.com/en-us/powershell/mt173057.aspx" target="_blank">PowerShell</a> и зачем он нужен не буду - желающие смогут без труда сами найти информацию на эту тему в Интернете.</div>
Andrey Bushmanhttp://www.blogger.com/profile/01700238372554577360noreply@blogger.com0