-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
History.txt
370 lines (342 loc) · 24.2 KB
/
History.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
LvS - Learning via Subtitling
-----------------------------
* Resources
www.codeplex.com/LvS
levis.cti.gr
* Authors
[birbilis] - George Birbilis ([email protected] / www.zoomicon.com)
[mitropoulos] - Kostas Mitropoulos (www.eap.gr)
* 2006
[mitropoulos]
+ Protyping using Visual Basic 6 (Win32)
-> version 1.x released
* 2007
[birbilis]
+ Redesign & implementation in Visual Basic.net 2005 (Microsoft .NET 2.0 framework), using Visual Studio .NET 2005
-> version 2.0 released
+ Feature additions
+ GUI enchancements
-> version 2.1 released
* 2008
[birbilis]
+ using newer IDE (Integrated Development Environment)
- using Visual Studio .NET 2008 (VB.net 2008), for .NET 2.0 framework
* 20080328
[birbilis]
+ GUI enhancements
- add subtitle and remove subtitle buttons moved to left handside of subtitles toolbar
- subtitle grid's column headers now show tooltip with their text !!![do at all grids]
- using border at subtitle rows' edit boxes when editing a subtitle row to make it obvious there are two rows
- stretched subtitles toolbar contents
- using line border at subtitles toolbar (at toolstrip container panel)
+ Support for more document filetypes
- added support for pdf files at documents pane (have to allow PDFs to show inside browser window at Acrobat Reader's Preferences dialog) !!![have the installer edit this option at the registry or at any .ini file acrobat may be using]
- added support for swf files at documents pane
* 20080411
[birbilis]
+ GUI enhancements
- (re)play selection button at player controller placed after play and pause
- when no subtitles exist, disabling set subtitle start, set subtitle end and remove subitle buttons
* 20080413
[birbilis]
+ GUI enchancements
- at Subtitle class, not allowing start time to get a value greater than end time
- at SubtitlesGrid class:
- if Start time provided by the user is rejected, restoring previous cell value
- showing cell editor exception messages to the user
+ Source code organization
- renamed "SubtitlePairEditor" class to "TextLinePairEditor"
- renamed "SubtitlePair" class to "TextLinePair" and moved to package LvS.objects.grid from LvS.objects.subtitles
* 20080414
[birbilis]
+ Localization
- added full translation for Portuguese, Hungarian and Romanian (missing Spanish prompts to be added later on [note: added at 20080420])
-> version 2.2-alpha released
+ changes to version 2.2-alpha:
+ GUI enhancements
- at Comments class, using border at rows' edit boxes when editing a comment to make it obvious there are two rows (and for consistency with Subtitle rows editor)
* 20080415
[birbilis]
+ Localization
- at MainForm class, added missing localization strings for mnuImportVideo, mnuImportAudio, mnuImportSubtitles and mnuImportDocument
- added various missing strings to MainForm localized resources (see Translation/excel folder)
-> version 2.3-alpha released
* 20080418
[birbilis]
+ Localization
- included localized resources for MyProject (had to set the Solution Explorer to show all files and include the Resources.es.resx etc. files in the project)
+ Source code organization
- at Subtitle class, made all properties public
- at FileUtils class, added "CreateTextFile" and "RemoveTrailingDirectorySeparator" methods
+ GUI enhancements
- at SubtitlesGrid class, changed RemoveSelected method to remove all selected rows, not just the focused one
+ Timing fix
- at Subtitle class, added constructor to initialize the subtitle in one step (to set startTime and endTime in a single step instead of setting them sequentially to avoid timing constraint exceptions that can be thrown in that case)
- at Subtitles class, added NewSubtitle method with parameters to initialize the new subtitle
- at SubtitlesGrid class, changed InsertSubtitle to call NewSubtitle with StartTime and EndTime parameters instead of setting them sequentially to avoid timing constraint exceptions that could be thrown in that case
+ Application customization (settings)
- at MainForm and OpenActivityDialog2 classes, removed ACTIVITY_MARKER constant and using ActivityMarker application setting (My.Settings.ActivityMarker)
+ Activity folder marking
- at MainForm class:
- at NewActivity method, the activity folder marker file is now non zero-byte sized, so that archivers like WinZip do include the marker file if user pack the activity folder themselves
- removed constants and created respective application settings PackedActivityExtension, PortalURL and FeedbackURL
- at LoadActivity method, removing any trailing directory separator char that would cause wrong parsing of the activity folder path
- at MainForm and ActivityView classes, at respective LoadActivity methods, now also accepting activity folder marker files to open the respective activity folder
- at installer, registering ".activity" (folder marker file) file extension with LvS application
+ Installation
- at installer, added various information
+ Versioning
- at installer:
- changed version to 2.4.1
- set to remove previous versions
-> version 2.4.1 released
* 20080420
[birbilis]
+ Security
- at UAC settings ("app.manifest" file), changed "Unrestricted" to "false"
+ Localization
- added missing spanish localization strings
- removed STR_ACTIVITY_NOPARENT_FOLDER localization string and using STR_PARENT_FOLDER_IS_ACTIVITY instead (had similar text)
- at MainForm, changed Hungarian word used for welcome
- at MainForm, localized some missing strings to Greek and copied localized resources to Translation\resources subfolder (since the Greek resources act as the source that is used to create other languages' resource files)
- various updates to translation .XLS files at Translation\excel subfolder
+ Versioning
- set both application and installer version to 2.4.2
+ Launching
- set the application to be multiple instance, since with single instance we couldn't change the application language and restart the application (it was trying to reconnect to itself) [!!! we maybe need a launcher app]
-> version 2.4.2 released
* 20080421
[birbilis]
+ Exception handling
- at SubtitlesGrid class, at LoadSubtitles method, now catching exceptions and showing exception message (returning false)
+ Timing fix
- at ISubtitle interface and Subtitle class, added "SetTimes" method to set StartTime and EndTime at a single step (cause setting the times separately can raise time constraint exceptions)
- at SRTReader class, changed ReadSubtitle method to call ISubtitle.SetTimes method instead of trying to 1st set StartTime and then EndTime (was failing since it has to be StartTime<=EndTime)
+ Code organization
- at SRTUtils class, added SRTStringToSubtitle
- at SRTReader class, moved code from ReadSubtitle method to SRTUtils.SRTStringToSubtitle and delegating to that method
+ Localization
- at ActivityView, localized some missing strings to Greek and copied localized resources to Translation\resources subfolder (since the Greek resources act as the source that is used to create other languages' resource files)
- various updates to translation .XLS files at Translation\excel subfolder
+ Versioning
- set LvS_models and LvS_utilities assembly and file versions both to 2.0.0.0
- set both application and installer version to 2.4.3
-> version 2.4.3 released
+ changes to version 2.4.3:
+ Timing fix
- at TTSUtils class, changed TTSStringToSubtitle method to call ISubtitle.SetTimes method instead of trying to 1st set StartTime and then EndTime (was failing since it has to be StartTime<=EndTime)
+ Code organization
- at ActivityView class, added method SaveActivityMarker and shared utility method SaveActivityMarker
- at MainForm class, at NewActivity method, now calling SaveActivityMarker and then creating a dummy subtitles file
* 20080422
[birbilis]
+ Code optimization
- at FileUtils class, at CheckExtension methods, using StringComparison.InvariantCultureIgnoreCase parameter for case-insensitive comparison (and removed call to "ToUpper" method)
+ Code organization
- at ISubtitle interface and Subtitle class, added method IsTimeIncluded
- at ActivityView class:
- added IsActivityPath shared (=static) method
- added IsPackedActivityFile shared (=static) method
- at LoadActivity method, using ActivityView.IsActivityPath method
- at SaveActivityMarker method, writing the My.Settings.PortalURL string into the activity marker file
- at constructor, removed call to SaveActivityMarker and SaveActivity, since an ActivityView is constructed to show an existing activity (MainForm.NewActivity is the method used to create new activities)
- at MainForm:
- at LoadActivity method, using ActivityView.IsActivityPath method
- at ParseCommandLine method, using ActivityView.IsActivityFile method
+ GUI enchancements
- at ActivityView class, at viewPlayer_TimeChanged event handler doing nothing if updatingFocusRow is true (when a subtitles row gets focused, the player time is changed. At that point we must stop the event propagation, else if there's time overlap between subtitles the 1st one will get selected, changing the focused row)
- at MainForm, removed "..." from Save All action's text, since it doesn't show a dialog
- at SubtitlesGrid class, at Time property setter, calling IsTimeIncluded so that we don't change the currently focused row if it does include the given time (need to do this else if there's time overlap the topmost row would be selected from the overlapping ones)
- at project Settings, set AuthoringMode to be true by default, since new users didn't spot the View/AuthoringMode option to show the subtitle Add/Remove/etc. buttons
+ Versioning
- at LvS, LvS_models and LvS_Utilities projects, changed Assembly & File versions to 2.5.0.0
- set installer version to 2.5
+ Localization
- added missing localized resources for subtitles grid toolbar and notes tabs
-> version 2.5 released
* 20080424
[birbilis]
+ Localization
- included localized resources for ActivityView (had to set the Solution Explorer to show all files and include the ActivityView.es.resx etc. files in the project)
+ Versioning
- changed version for "LvS" and "LvS Installer" projects to 2.5.1
- at installer GUI, changed WelcomeText to show 2.5.1 instead of 2.1
+ Licensing
- changed CopyrightWarning to show "This is free software, licensed under BSD license."
-> version 2.5.1 released
* 20080426
[birbilis]
+ Localization
- at Translation\bin folder, fixed "generateTranslatorXSLfromXLS.vbs" to process the last line of the given translation .xls file and regenerated localized resources (was missing PARENT_FOLDER_IS_ACTIVITY string from Resources.es.resx etc. files)
+ Versioning
- changed version for "LvS" and "LvS Installer" projects to 2.5.2
- at installer GUI changed WelcomeText to show 2.5.2
+ Code organization
- at Configuration Manager dialog, set Active Solution configuration to "Release" and set that configuration to also build the "LvS installer" project
- at Project Dependencies dialog, set "LvS installer" project to also depend upon "LvS_models" and "LvS_utilities" projects apart from the "LvS" one
-> version 2.5.2 released
* 20090309
[birbilis]
+ modified history file
- at history.txt:
- major points now noted with "+" and details with "-"
- added author details
- moved history.txt to LvS.net solution's items instead of holding it under project LvS (the LvS application GUI)
+ Code optimization
- Removed field initializations done automatically by the .NET runtime:
- at "ActivityView" class, not initializing "updating", "updatingFocusRow", "fAuthoringMode", "splitHorizontally_DoubleClickToUp", "splitLeftVertically_DoubleClickToLeft" and "splitRightVertically_DoubleClickToLeft" to False anymore
- at "BaseDocumentView" and "DocumentsView" classes, not initializing "fAuthoringMode" to False anymore
- at "IconEditor" class, not initializing "fCommentVisible" to False anymore
- at "WMP" class, not initializing "fSelectionStartTime" and "fSelectionEndTime" to 0, neither "fPlaySelection" to False anymore
- at "BasePlayer" class, not initializing "startPlayer" and "pausePlayer" to False anymore
- at "Subtitle" class, not initializing "fStartTime" and "fEndTime" to 0 anymore
- at "SubtitlesGrid" class, not initializing "fTime" to 0 and "fAuthoringMode", "fModified" and "updatingTime" to False anymore
- at "WebBrowserDocumentView" class, not initializing "fModified" to False anymore
- at "TimeSelectionController" class, not initializing "timeUpdating" to False anymore
- at "Notes" class, not initializing "fAuthoringMode" and "fTeacherNotes" to False, neither "checkPrint" to 0 anymore
- at "OpenFileDialogWithEncoding" class, not initializing "fShowReadOnly" and "fReadOnlyChecked" to False anymore
- at "SaveFileDialogWithEncoding" class, not initializing "fCreatePrompt" to False anymore
- at "SRTWriter" class, not initializing "fLineNumber" to 0 anymore
- at "SaveFileDialogWithEncoding" and "OpenFileDialogWithEncoding" classes, removed empty "InitializeComponent" method (must have been autogenerated when changing the ancestor's package)
- at "TTSReader" and "SRTReader" classes, made "ReadSubtitle" method "Shared" (static)
- at "MainForm" class, made "HelpFolder" property "Shared" (static)
- at "ActivityView" class, made "splitCycle" method "Shared" (static)
- at "SubtitlesGrid" class, at constructor, creating local variable "rb" as IBorder instead of Border type to avoid having the compiler internally casting it multiple times
- at "RichTextBoxEx" class, removed unused "rtb1start" local variable from "GetFontDetails" method
- at "RTFToolStrip" class, removed unused "style" local variable from "rtfText_SelectionChanged" method
+ Code organization
- at "DateTimeUtils", renamed "datetimeBase" to "baseDateTime" for consistency
- created "tts", "srt", "fab", "encore" subfolders under namespace "LvS.utilities.subtitles" and moved all related classes to respective subfolders
- at "SubtitleUtils" class, importing namespaces:
- Lvs.utilities.subtitles.tts
- Lvs.utilities.subtitles.srt
- Lvs.utilities.subtitles.fab
- Lvs.utilities.subtitles.encore
- moved "BaseFileDialogWithEncoding" to namespace "LvS.utilities.dialogs"
- renamed folder "LvS\controls" to "LvS\objects" to match package naming
- moved to package "LvS.screens" the classes "MainForm", "LanguageSelectionView" and "ActivityView"
- moved to package "LvS.dialogs" the classes "AboutDialog", "LoginDialog" and "OpenActivityDialog2" (can't do the same for "SplashScreen" class due to a Visual Studio.net 2008 bug)
- at "Subtitles" class, added parameterless constructor and added checks to behave correctly when "fGrid" field is Nothing
+ GUI enhancements
- at "SplashScreen" dialog, changed layout and showing version as "major.minor.build" instead of "major.minor"
- passing a window handle to the first parameter of MessageBox.Show (all Controls implement the IWin32Window interface) to make sure the message prompt doesn't end up behind the application's GUI
- at "MainForm" class, at multiple methods, passing "Me"
- at "DocumentsView" class, at "LoadDocuments" and "SaveAll" methods, passing "Me"
- at "RTFDocumentView" class, at "rtfText_LinkClicked" method, passing "Me"
- at "SubtitlesGrid" class, at multiple methods, passing "Me"
- at "WMP" class, at "playerWMP_ErrorEvent", passing "Me"
- at "Notes" class, at "rtfNotes_LinkClicked" method, passing "Me"
- at "ActivityView" class, at "Close" method, passing "Me"
- at "ApplicationEvents" class, at "MyApplication_UnhandledException" method, passing "My.Application.MainForm"
+ Diagrams
- updated class diagram "SubtitlesUtilities.cd" to reflect repackaging of classes at "LvS_utilities" project
- did automatic repair action on diagrams "ApplicationScreens.cd" and "ApplicationDialogs.cd" to reflect repackaging of classes at "LvS" project
+ Versioning
- changed version for "LvS" project to 2.5.3
- at installer GUI changed WelcomeText to show 2.5.3
+ Testing
- Added "LvS_utilities_Test" Unit Test project (generated using Visual Studio Team System's "Unit Test" wizard)
- Updated "SubtitleUtilsTest" class with tests of reading and writing TTS and SRT subtitle files
+ Portability
- at "FileDialogUtils", changed P/Invoke imports for Win32 API methods to use "IntPtr" instead of "Integer" where appropriate, according to "CA1901" warnings shown by "Code Analysis" of Visual Studio.net 2008 Team System
- at "OpenFileDialogWithEncoding", "SaveFileDialogWithEncoding" and "BaseFileDialogWithEncoding" classes, changed "Integer" to "IntPtr" where needed
* 20090310
[birbilis]
+ Timing fix
- at "DateTimeUtils":
- renamed "DateTimeStrToSeconds" to "TimeStrToSeconds"
- renamed "DateTimeStrToDateTime" to "TimeStrToDateTime"
- fixed "TimeStrToDateTime" to use its "baseDateTime" parameter
- changed "TTSUtils", "SRTUtils", "FABUtils" and "EncoreUtils" classes to use "TimeStrToSeconds"
- changed "UpDownTime" class to use "TimeStrToDateTime"
+ GUI fix
- removed all balloon tips and using normal tooltips instead, since balloons don't seem to show up correctly (show up in wrong place or with cut off text)
+ Code organization
- at "IActivity" interface and "ActivityView" class, changed "LoadDocument" method to return an "IDocument"
- at "DocumentUtils" class, removed "IsWmpInstalled", "IsRealPlayerInstalled" and "IsQuickTimeInstalled" functions (had been accidentally copy-pasted from "MediaUtils" class)
- changed all "encoding As Encoding" method parameters to "theEncoding As Encoding"
- at "RTFDocumentView" class, "Save" method delegates some of its logic to "Export"
+ Text document encoding fix
- at "ActivityView" class, changed "ImportDocument" to save the imported document using default internal encoding (UTF8) !!!should have encoding detection routine since user may drop text files directly in the activity folder (even when the app isn't running)
* 20111205
[birbilis]
+ Cleanup
- removed unused "copy.gif" and "cut.gif" from resources
+ Installer
- at "LvS installer" project, "Detected Dependencies", excluded "wmp.dll" since it's under Windows System File Protection (can't install it on user system, they need to have Windows Media Player [WMP] already installed)
- downloaded newer bootstrap packages for .NET (2.0 SP2) from http://msdn.microsoft.com/en-us/vstudio/bb898654.aspx
* 20111206
[birbilis]
+ Installer
- at "LvS installer" project, removed ".NET 2.0" prerequisite and using ".NET 2.0 SP2" (and its "Windows Installer 3.1" dependency)
+ GUI
- at "IController" added "FullScreen" property and "FullScreenChanged", "SubtitlesOnChanged" events
- at "Controller"
- added toggle button for FullScreen
- fixed tab order
- added "FullScreenChanged" and "SubtitlesOnChanged" event implementations
- at "SubtitlesOn" and "FullScreen" properties not calling player directly but instead throwing an event
- at "IPlayer" added "FullScreen" property and "FullScreenChanged" event declarations
- at "BasePlayer" added "FullScreen" property and "FullScreenChanged" event implementations and responding to controller's "FullScreenChanged" and "SubtitlesOnChanged" events
- at "ActivityView", listening for "FullScreenChanged" event and resizing all splitpanes (1 horizontal and 2 verticals) accordingly, also reseting the respective splitter double-click cycles to default (false vales)
+ Naming conventions
- at "DocumentUtils" changed "get" to "Get" at methods' prefix and updated "DocumentsView" and "ActivityView" accordingly
+ Test
- changed target for "LvS_utilities_Test" project to ".NET 3.5" (can't use "2.0" there, "3.5 is the min - had "4.0" before there)
* 20111221
[birbilis]
+ Compiler
- changed Compilation Target to ".NET 4 Client Profile" for all projects apart from LvS_utilities_Test" (using .NET 4)
- changed LvS installer prerequisites to use ".NET 4 Client Profile" instead of ".NET 2.0"
* 20120116
[birbilis]
+ Target
- removed old CDiese.dll reference and added new one built for .NET Framework 4 (respective solution is in "Libraries\CDiese" subfolder)
- changed "LvS" app target to ".NET Framework 4" (instead of ".NET Framework 4 Client Profile"), since "CDiese" uses "System.Design" (for property editors) and requires it
+ Installer
- Published "LvS" app via ClickOnce wizard to "Publish" subfolder (see http://codeplex.codeplex.com/wikipage?title=ClickOnce on how to publish to CodePlex as a ClickOnce release)
* 20120119
[birbilis]
+ Installer
- ClickOnce file associations:
- Set "FilmRoll.ICO" to be copied to output directory (by right clicking on it in Resources) when newer version exists since VisualStudio ClickOnce FileAssociations' browse dialog seems to only allow to select an .ICO, not to an icon resource (.exe or .dll) entry
- Set "Full Trust" at "ClickOnce Security Settings" (Security tab of "LvS" project properties - http://msdn.microsoft.com/en-us/library/cc713575%28v=vs.90%29.aspx)
- ClickOnce security:
- using new temporary key (and not publishing it) for signing the ClickOnce manifests
+ Compilation
- At Code Analysis tab of "LvS" project properties, now using custom "CodeAnalysis.ruleset" to suppress design warnings regarding casing of fields (C1709) and Globalization and to show security and other warnings
+ IDE
- pinned "History.txt" tab for easy access (doesn't seem to remember it though)
- at "Error List", untoggled the button "Warnings" (toggle again to see them)
* 20120121
[birbilis]
+ Build
- removed missing "GlobalSupressions.vb" from "LvS" project (had supressed some warnings but then had deleted the file by hand)
+ Help - include at ClickOnce installation
- at "LvS" project:
- at "MainForm" class:
- added "PARAM_HELP" string constant (="-help")
- at "ParseCommandLine" method, calling "ShowHelp" if 1st command-line parameter is equal to PARAM_HELP (ignoring case)
- added "Help" subfolder with help contents (moved into subfolder of project "LvS") and set "Build Action = Content" and "Copy to output directory = copy if newer" at properties of all files in it (via Select All, Properties)
- at "LvS_installer" project:
- removed help files (can't remove from Solution Explorer since Visual Studio crashes, removed using "View/File System" by right clicking the installer project
- at "Application Folder" in "View/File System" added "Project Output/Content Files"
- at "User's Program Menu", under "LvS" submenu/subfolder, changed "LvS help" to launch "LvS.exe" with "-help parameter and using "help.ico" for it, copied to application directory from "Resources" subfolder of installer project
- at "User's Program Menu", under "LvS" submenu/subfolder, added "Description" (tooltip) for "LvS" and "LvS help" items
* 20120124
[birbilis]
+ Installer
- fixed "LvS installer" project which was crashing Visual Studio 2010 by editing its "LvS installer.vdproj" file by hand (removed file types) and added them again
- at "LvS" project, set "Resources/FilmRoll.ICO" to be built as "Content" so that it gets copied to output folder and can be used by ClickOnce for file association icons (can't refer to .exe, possibly Visual Studio ClickOnce dialog or ClickOnce itself's limitation)
- at ClickOnce publishing dialog for "LvS" project, at "Options...":
- added ".activity" file type for "LvS activity folder", using "LvS.Activity.Folder" as ProgID
- using "LvS.Activity.Packed" ProgId for "LvS" filetype (LvS packed activity)
* 2012
[birbilis]
Code maintained on Codeplex
* 2017
[birbilis]
Code maintained on GitHub
TODO:
- Could use Portable Library template (http://visualstudiogallery.msdn.microsoft.com/b0e0b5e9-e138-410b-ad10-00cb3caf49810), but that needs an update though to .NET 4 framework and also don't need to use the libs for other platforms (XBOX, Silverlight, WindowsPhone), but only on Windows
- check ClickOnce Publish Options (http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k%28MICROSOFT.VISUALSTUDIO.PUBLISH.CLICKONCEPROVIDER.DIALOG.OPTIONS%29;k%28TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22%29&rd=true)