Slides a dema z přednášky na konferenci TechEd Praha 2012:
Záznam z přednášky nebyl pořizován.
Slides a dema z přednášky na konferenci TechEd Praha 2012:
Záznam z přednášky nebyl pořizován.
Slides a dema z přednášky na konferenci TechEd DevCon Praha 2012:
Záznam z přednášky nebyl pořizován.
Krásný nový Diff-tool z Visual Studio 11 se dá vyvolávat i externě z příkazové řádky a dá se tak použít například i přímo z TortoiseSVN.
Obecná syntaxe je:
devenv /diff sourceFile targetFile [sourceDisplayName] [targetDisplayName]
Pokud již nějaká instance Visual Studia běží, použije se, jinak se spustí nové.
Pro TortoiseSVN v Settings/Diff Viewer stačí přepnout na „External“ a použít:
C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe /diff %base %mine %bname %yname
(Cestu si samozřejmě upravte podle sebe.)
…teď už jenom zajistit, jestli se dá takhle vyvolat i merge. Z výpisu devenv /? to zatím nevypadá.
Pár mých poznámek z přednášky o NuGet (Package Manager ve VS od Microsoftu), které zřejmě nebudu dále zpracovávat.
(Microsoft MVP Summit 2012 Seattle)
Zajímavá novinka v C# 5 poslouží například k logování. Následující příklad funguje ve Visual Studio 11 Beta
class Program
{
static void Main(string[] args)
{
Log("Message");
}
static void Log(string message,
[CallerMemberName] string callerMemberName = "",
[CallerFilePath] string callerFilePath = "",
[CallerLineNumber] int callerLineNumber = 0)
{
Console.WriteLine(message);
Console.WriteLine(callerMemberName);
Console.WriteLine(callerFilePath);
Console.WriteLine(callerLineNumber);
}
}
Výstupem je např:
Message Main d:\Development\CallerAttributes\CallerAttributes\Program.cs 14
Na první dnešní přednášce ASP.NET 4.5 na Microsoft MVP Summitu byla prezentována zajímavá nová knihovna, která přináší jQuery UI Widgets do prostředí ASP.NET WebForms – Juice UI. Protože je to jedna z mála věcí, které nejsou pod NDA, mohu se s Vámi o tento poznatek podělit.
Juice UI aspiruje na náhradu AJAX Control Toolkitu a zahrnuje například tyto controly:
Použití je přímočaré a nijak nekomplikované, např.:
<Juice:Tabs ID="_Default" runat="server">
<Juice:TabPage Title="Tab 1" ID="_Tab1">
<TabContent>
...
</TabContent>
</Juice:TabPage>
<Juice:TabPage Title="Tab 2" ID="_Tab2">
<TabContent>
...
</TabContent>
</Juice:TabPage>
</Juice:Tabs>
…uvidíme, jak se vypořádají s porodními bolestmi, které AJAX ControlToolkit měl. Jedná se o open-source knihovnu použitelnou pod licencemi MIT nebo GPLv2.
Pokud je v LinkButtonu „statické html“, ASP.NET control a LinkButtonu změníme nějakou vlastnost, která se ukládá do ViewState, dojde po postbacku ke ztrátě obsahu LinkButtonu (je vyčištěna vlastnost Controls).
Nahlášeno na connect včetně dema, jak chybu zreprodukovat.
Workaround nemám, takže nezbývá, než v LinkButtonu nepoužívat vnitřní obsah – což je poměrně rozumný přístup :-).
Slides z přednášky pro MS Fest Praha 2011:
Záznam z přednášky najdete na našem YouTube Channel:
Leckoho možná překvapí chování validátorů (RegularExpressionValidatoru, CompareValidatoru a dalších) v jednoduchém případě:
<asp:TextBox ID="MyTB" runat="server" /> <asp:RegularExpressionValidator ValidationExpression="\d+" ControlToValidate="MyTB" Text="x" runat="server" /> <asp:Button Text="OK" runat="server" />
Co se děje:
Jak jsem již popisoval v předchozím články, nevýhodou jinak šikovného mechanizmu Health Monitoringu je, že nesbírá chyby z aynchronních requestů a z webových služeb ASP.NET. Jak se vypořádat s prvním problémem u AJAX requestů bylo již naznačeno, podívejme se teď na problematiku webových služeb ASP.NET (.asmx). V zásadě jde opět o zachycení problémové výjimky a předání WebRequestErrorEvent.
Elegantní metodou jak se dostat k odběru výjimek během zpracování webových služeb a jak je předávat mechanizmu Health Monitoringu je požití SoapExtension. Uvádím opět kód kolegy Jiřího Kandy (pomocná třída WebRequestErrorEventExt byla již definována v předchozím článku):
/// <summary>
/// V případě chyby ve zpracování web metody (webové služby) zajistí oznámení chyby health monitoringem.
/// Pozor, toto nefunguje (a chyby healthmonitoringu tak nejsou oznamovány),
/// pokud se webové služby testují v browseru!!! Pro testování nutno použít skutečného klienta webové služby (třeba service reference v konzolovce).
/// </summary>
public class SoapExceptionHealthMonitoringHandler : System.Web.Services.Protocols.SoapExtension
{
#region ProcessMessage
public override void ProcessMessage(System.Web.Services.Protocols.SoapMessage message)
{
try
{
if ((message != null) && (message.Stage == SoapMessageStage.AfterSerialize))
{
if (message.Exception != null)
{
Exception exception = message.Exception;
if ((exception is SoapException) && (exception.InnerException != null))
{
exception = exception.InnerException;
}
if ((exception is HttpUnhandledException) && (exception.InnerException != null))
{
exception = exception.InnerException;
}
new WebRequestErrorEventExt(exception.Message, message, exception).Raise();
}
}
}
catch // pokud by zde nedejbože došlo k nějaké další výjimce, tak ji zamaskujeme
{
// NOOP
}
}
#endregion
#region GetInitializer
public override object GetInitializer(Type serviceType)
{
return null;
}
public override object GetInitializer(LogicalMethodInfo methodInfo, SoapExtensionAttribute attribute)
{
return null;
}
#endregion
#region Initialize
public override void Initialize(object initializer)
{
}
#endregion
}
…a zapojení ve web.configu potom v elementu configuration/system.web/webServices:
<webServices>
<soapExtensionTypes>
<add type="MyNamespace.SoapExceptionHealthMonitoringHandler, MyAssembly" priority="0" group="0" />
</soapExtensionTypes>
</webServices>
A JE TO.