Hungry Mind , Blog about everything in IT - C#, Java, C++, .NET, Windows, WinAPI, ...

Дефект DataBinding

Если в методе установки значения свойства оно сохраняется не в изначальном виде (изменяется), то измененное значение не будет мгновенно отражено в элементе управления после потери фокуса (а лишь после того, как пользователь изменит данные в контроле).

Это признанный Microsoft дефект биндинга.

Устраняется вызовом Binding.ReadValue() по событию Binding.BindingComplete.

"Прозрачные" .NET сборки

В .NET 2.0 Security появилась возможность отмечать код, как "прозрачный". На такой код накладываются следующие правила и ограничения:
  • Не может выполнять permissions Assert;
  • Не может удовлетворять LinkDemand-ам. Все LinkDemand-ы автоматически становятся обычными Demand-ами;
  • Не может использовать непроверяемый код просто так, даже если установлено разрешение SkipVerification. В местах вызова такого кода автоматически добавляется проверка разрешения UnmanagedCode. Соответственно все P/Invoke-методы, даже отмеченные атрибутом SuppressUnmanagedCode, проходят предварительно проверку на UnmanagedCodePermission Demand.
Необходимые атрибуты - SecurityTransparent (прозрачный код), SecurityCritical (обычный код). Можно устанавливать на уровне всей сборки, на уровне отдельным методов\классов и пр.

Проблема с MSBuild CallTarget - созданные properties & items не существуют

Если пользоваться инструкцией <CallTarget Targets="..."/> то внутри ее не будут видны properties и items, которые были созданы с помощью <CreateProperty...> и <CreateItem...>

MSBuild properties & items

Долго мучался, пока до меня не дошло: Property и Item - не взаимозаменяемые!!!

Например, если Task имеет
[Output]
String XXX {
get { ... }
}
То конструкция <Output TaskParameter="XXX" ItemName="MyItem"/> тихонько запихнет в MyItem пустое значение! Правильно: <Output TaskParameter="XXX" PropertyName="MyProperty"/>

Анологично с
[Output]
ITaskItem XXX {
get { ... }
}
<Output TaskParameter="XXX" ItemName="MyItem"/>

Кстати, для того, чтобы создать property или item динамически, можно воспользоваться CreateItem или CreateProperty

<CreateItem Include="$(MSBuildProjectDirectory)\**\*.*">
<Output TaskParameter="Include" ItemName="AllFilesUnderProjectFolder"/>
</CreateItem>

<CreateProperty Value="$(XXX).$(YYY)">
<Output TaskParameter="Value" PropertyName="XXX_YYY"/>
</CreateProperty>

Как создать Task в MSBuild

  • Создать Class Library проект, к примеру MyMSBuildTasks;
  • Добавить Assembly Reference на Microsoft.Build.Framework;
  • Создать public class MyTask, который наследует и реализует интерфейс Microsoft.Build.Framework.ITask;
  • Реализовать метод public override bool Execute(), вернуть true в случае успеха;
  • Подключить его в проект MSBuild следующим образом: <UsingTask TaskName="MyMSBuildTasks.MyTask" AssemblyFile="...\MyMSBuildTasks.dll"/>
  • Пользоваться: <MyTask MyParameter="Something here">...</MyTask>
Для того, чтобы передать в Task параметр, необходимо создать public property: public String MyParameter { get { ... } set { ... } } <MyTask MyParameter="Something here">...</MyTask> Для указания, что параметр является обязательным, - можно пометить атрибутом [Required]: [Required] public String MyParameter { get { ... } set { ... } } Результат работы Task-а можно "отдать" в виде Output-переменных, пометив нужные свойства атрибутом [Output]: [Output] public String MyOutParameter { get { ... } set { ... } }
<MyTask MyParameter="Something here"> <Output TaskParameter="MyOutParameter" ItemName="MyItem"/> </MyTask> <Message Text="MyTask returned $(MyItem) to me!"/> Для упрощения жизни с MSBuild существует сборка Microsoft.Build.Utilities, в которой существуют простейшие реализации классов Task, TaskItem и пр.

Примеры Flex 2 приложений

Вот тут можно посмотреть. Некоторые даже с исходниками.

Adobe Flex

Недавно пообщался с сотрудником, который пишет на Java. Он занимается разработкой серверного J2EE-приложения (сервер - JBoss) и клиентского на Adobe Flex Builder. Я уже много раз видел упоминания технологии Flex 2, но, в силу своей нелюбви к Web-приложениям, не решался посмотреть, что это такое.

Скачал Adobe Flex Builder (порадовался, что он построен на платформе Eclipse), пару книжек и приступил к поверхностному изучению, попутно узнав, что Macromedia теперь является частью Adobe.

Первые впечатления - шок! Дизайнер, язык разметки mxml (который до боли напоминает XAML, Microsoft и тут, видимо, притырила достояние), объектно-ориентированный ActionScript 3.0 (похож на JavaScript, C# - даже атрибуты есть, даже встроенная поддержка биндинга!), отладка, работа с веб-службами и много всего прочего. Flex предлагает концепцию RIA - Rich Internet Applications, и это существенный шаг вперед. Если я буду делать браузер-ориентированные интернет приложения, это будет, несомненно, Flex 2.

Вот сама книга: The Essential Guide to Flex 2 with ActionScript 3.0 - Charles E. Brown, Apress

Завел себе блог[х]

Никогда не понимал, зачем существуют эти дурные блогхи. Пришло время попробовать и понять наконец-то!!! Буду постить сюда всякую всячину о программинге, вместо того, чтобы тупить в аську :)
Copyright 2007-2011 Chabster