рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рдПрдкреНрд▓реАрдХреЗрд╢рди рдирд╛рдо рдХрд╛ рдЖрд╕рд╛рди рд╕реНрдерд╛рдиреАрдпрдХрд░рдг



рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдмрд╛рдЬрд╛рд░ рд╡реИрд╢реНрд╡рд┐рдХ рд╣реИ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреНрд░рдЪрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЙрдкрд▓рдмреНрдз рднрд╛рд╖рд╛рдУрдВ рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЧреБрдгрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдиреАрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЯрд╛рдЗрд▓ рдХреЗ рд╣реЗрдбрд░ рдФрд░ рд╢реАрд░реНрд╖рдХреЛрдВ рдХреЛ рд╕реНрдерд╛рдиреАрдпрдХреГрдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрд╡реЗрджрди рдХреЗ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддреА рд╣реИ рдФрд░ рдЕрдХреНрд╕рд░ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдирддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╕рдВрд╕рд╛рдзрди рдлрд╝рд╛рдЗрд▓ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдХрдИ рд╕рдВрд╕рд╛рдзрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдмрдирд╛рдИрдВ, рдЬреЛ рдПрдХ рд╕рдлрд▓ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж, рдЖрд╡реЗрджрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХреА рдирдХрд▓ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдиреЗ рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓ рдмрдирд╛ рджрд┐рдпрд╛, рдЬрдмрдХрд┐ рдореЗрд░реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдиреЗ рддреАрди рд╕реЗ рдЕрдзрд┐рдХ рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдЕрдзрд┐рдХ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╕реНрдерд╛рдиреАрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмреЛрдЭ рдмрди рдЧрдпрд╛ред

рдЦреЛрдЬ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдХрдИ рд▓реЛрдЧ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЦреБрдж рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛, рдЗрд╕рд╕реЗ рдореБрдЭреЗ рдПрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдирд┐рд░реНрдгрдп рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЬреЛ рдЖрдкрдХреЛ рд╕рдВрд╕рд╛рдзрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдореЗрд░реЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рдПрдХ XML рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реЗрдбрд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдерд╛ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрд╡рд╢реНрдпрдХ рдлрд╛рдЗрд▓реЗрдВ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдерд╛ред


рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реЗрдбрд░ рд╡рд┐рд╡рд░рдг рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

<Localization> <Application> <Name /> <Description /> </Application> <Languages> <Default inactive="false"> <Title /> <TileTitle /> </Default> <Albanian inactive="true"> <Title /> <TileTitle /> </Albanian> тАж </Languages> </Localization> 


рдореИрдВрдиреЗ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рдЯреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛



рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХрд╕реНрдЯрдо рдЯреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ IVsSingleFileGenerator рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

 interface IVsSingleFileGenerator { int DefaultExtension(out string); int Generate(string, string, string, IntPtr[], out uint, IVsGeneratorProgress); } 


рдЬреИрд╕рд╛ рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдирд╛рдо рдФрд░ рд╡рд┐рд╡рд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреА рдорджрдж рд╕реЗ рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд╛рд░реНрдп рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдзреНрдпрдпрди рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреА рдкреАрдврд╝реА рдХреЗ рджреМрд░рд╛рди, рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕рдВрджрд░реНрдн рд╕реБрд▓рдн рд╣реИ, рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ ProjectItem рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд▓рд┐рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реА XML рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╕рдВрдмрджреНрдз рд╣реИ

 var dte = (EnvDTE.DTE)Package.GetGlobalService(typeof(EnvDTE.DTE)); var sourceControl = dte.SourceControl; var projectItem = dte.Solution.FindProjectItem(sourceFilePath); if (projectItem == null) { throw new ApplicationException("Unable to locate a ProjectItem associated to the file"); } 


рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдЗрд╕ рддрддреНрд╡ рдХреЗ ProjectItems рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдмрд╛рд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЬреЛрдбрд╝ рдФрд░ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред

 private static void UpdateNestedProjectItems(ProjectItem projectItem, HashSet<string> generatedFiles) { foreach (ProjectItem item in projectItem.ProjectItems) { if (item.Properties != null) { var property = item.Properties.Item("FullPath"); if (property != null) { var value = property.Value as string; if (value != null) { if (generatedFiles.Contains(value)) { item.Properties.Item("BuildAction").Value = 2; generatedFiles.Remove(value); } else { if(value.EndsWith("txt", StringComparison.CurrentCultureIgnoreCase)) { item.Properties.Item("BuildAction").Value = 0; } else { item.Remove(); } } } } } } foreach (var file in generatedFiles) { var item = projectItem.ProjectItems.AddFromFile(file); item.Properties.Item("BuildAction").Value = 2; } } 


рдирд┐рд░реНрдорд┐рдд рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рджреВрд╕рд░рд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рд╕рдВрд╕рд╛рдзрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реИ, рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЦрд╛рд▓реА dll рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ рдЧрдИ рдФрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдореЗрдВ рдкреЗрд╢ рдХреА рдЧрдИред рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди, рдЗрд╕ рдлрд╛рдЗрд▓ рдХрд╛ рдирд╛рдордХрд░рдг рдФрд░ рдирд╛рдордХрд░рдг рд░рд┐рд╕реЛрд░реНрд╕ рдлрд╛рдЗрд▓реНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, WIN API рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрд╕рд╛рдзрди рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ: BeginUpdateResource , UpdateResource , EndUpdateResource ред

 internal static class APIHelper { public const int RT_STRING = 6; [DllImport("kernel32.dll", SetLastError = true)] public static extern IntPtr BeginUpdateResource(string pFileName, bool bDeleteExistingResources); [DllImport("kernel32.dll", SetLastError = true)] public static extern bool UpdateResource(IntPtr hUpdate, int lpType, int lpName, ushort wLanguage, IntPtr lpData, uint cbData); [DllImport("kernel32.dll", SetLastError = true)] public static extern bool EndUpdateResource(IntPtr hUpdate, bool fDiscard); } 


рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдВрд╕рд╛рдзрди рдмрдирд╛рддреЗ рд╕рдордп, рдереЛрдбрд╝реА рд╕реА рдЪрд╛рд▓ рд╣реЛрддреА рд╣реИ, рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдореЗрдВ рддрд╛рд░ 16 рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдмреНрд▓реЙрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдкреВрд░реЗ рдмреНрд▓реЙрдХ рдХреЛ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╢рд╛рдорд┐рд▓ рд╣реИред рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд╣рдо рдХреЗрд╡рд▓ рдЙрд╕ рдбреЗрдЯрд╛ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рд╣реИ, рдФрд░ рдмреНрд▓реЙрдХ рдХреА рдЕрдиреНрдп рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИред

рдкрдВрдХреНрддрд┐ рдмреНрд▓реЙрдХ рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдирд┐рдореНрди рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ:

N = STRID / 16 + 1

рдЬрд╣рд╛рдВ N рд▓рд╛рдЗрди рдмреНрд▓реЙрдХ рдирдВрдмрд░ рд╣реИ, STRID рд╕рдВрд╕рд╛рдзрди рд▓рд╛рдЗрди рдЖрдИрдбреА рд╣реИ (рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдпрд╣ рдЖрд╡реЗрджрди рд╢реАрд░реНрд╖рдХ 100 рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЯрд╛рдЗрд▓ рд╢реАрд░реНрд╖рдХ 200 рдХреЗ рд▓рд┐рдП)

рддреИрдпрд╛рд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рдЬреАрдПрд╕реА рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рд╛рде рд╣реА рдХрд╕реНрдЯрдо рдЯреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдХреНрд╖рд╛ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЬреЛрдбрд╝реЗрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ

рдЫрд╡рд┐

рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП, рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд▓рд┐рдП рдПрдХ рддрддреНрд╡ рдЯреЗрдореНрдкрд▓реЗрдЯ рднреА рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрдВрдЬреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЙрдкрд▓рдмреНрдз рд╕реНрд░реЛрдд рдХреЛрдб: http://wptitlelocalizationtool.codeplex.com/
рд╕реНрдерд╛рдкрдирд╛ рдкреИрдХреЗрдЬ рдЙрдкрд▓рдмреНрдз: http://visualstudiogallery.msdn.microsoft.com/527c7d79-55f7-4ff2-9ab8-d6122bf6e75d

Source: https://habr.com/ru/post/In199498/


All Articles