@@ -975,7 +975,7 @@ private bool IsDangerous(String filename)
975975 dangerous = false ;
976976
977977 FileStream stream = new FileStream ( filename , FileMode . Open , FileAccess . Read , FileShare . Read ) ;
978- XmlTextReader reader = new XmlTextReader ( stream ) ;
978+ using XmlTextReader reader = new XmlTextReader ( stream ) ;
979979 reader . DtdProcessing = DtdProcessing . Ignore ;
980980 reader . XmlResolver = null ;
981981 try
@@ -1622,14 +1622,13 @@ private bool NeedToRebuildSourceFile(string sourceFilePath, DateTime sourceTime,
16221622 private void GetStronglyTypedResourceToProcess ( ref List < ITaskItem > inputsToProcess , ref List < ITaskItem > outputsToProcess )
16231623 {
16241624 bool needToRebuildSTR = false ;
1625+ CodeDomProvider provider = null ;
16251626
16261627 // The resource file isn't out of date. So check whether the STR class file is.
16271628 try
16281629 {
16291630 if ( StronglyTypedFileName == null )
16301631 {
1631- CodeDomProvider provider = null ;
1632-
16331632 if ( ProcessResourceFiles . TryCreateCodeDomProvider ( Log , StronglyTypedLanguage , out provider ) )
16341633 {
16351634 StronglyTypedFileName = ProcessResourceFiles . GenerateDefaultStronglyTypedFilename ( provider , OutputResources [ 0 ] . ItemSpec ) ;
@@ -1645,6 +1644,10 @@ private void GetStronglyTypedResourceToProcess(ref List<ITaskItem> inputsToProce
16451644 _stronglyTypedResourceSuccessfullyCreated = false ;
16461645 return ;
16471646 }
1647+ finally
1648+ {
1649+ provider ? . Dispose ( ) ;
1650+ }
16481651
16491652 // Now we have the filename, check if it's up to date
16501653 DateTime sourceTime = NativeMethodsShared . GetLastWriteFileUtcTime ( Sources [ 0 ] . ItemSpec ) ;
@@ -2153,11 +2156,20 @@ private void RecordFilesWritten()
21532156 {
21542157 if ( StronglyTypedFileName == null )
21552158 {
2156- CodeDomProvider provider ;
2157- if ( ProcessResourceFiles . TryCreateCodeDomProvider ( Log , StronglyTypedLanguage , out provider ) )
2159+ CodeDomProvider provider = null ;
2160+ try
2161+ {
2162+ if ( ProcessResourceFiles . TryCreateCodeDomProvider ( Log , StronglyTypedLanguage , out provider ) )
2163+ {
2164+ StronglyTypedFileName = ProcessResourceFiles . GenerateDefaultStronglyTypedFilename (
2165+ provider , OutputResources [ 0 ] . ItemSpec ) ;
2166+
2167+ provider . Dispose ( ) ;
2168+ }
2169+ }
2170+ finally
21582171 {
2159- StronglyTypedFileName = ProcessResourceFiles . GenerateDefaultStronglyTypedFilename (
2160- provider , OutputResources [ 0 ] . ItemSpec ) ;
2172+ provider ? . Dispose ( ) ;
21612173 }
21622174 }
21632175
@@ -3412,11 +3424,18 @@ private bool HaveSystemResourcesExtensionsReference
34123424 /// <param name="sourceFile">The generated strongly typed filename</param>
34133425 private void CreateStronglyTypedResources ( ReaderInfo reader , String outFile , String inputFileName , out String sourceFile )
34143426 {
3415- CodeDomProvider provider ;
3416- if ( ! TryCreateCodeDomProvider ( _logger , _stronglyTypedLanguage , out provider ) )
3427+ CodeDomProvider provider = null ;
3428+ try
34173429 {
3418- sourceFile = null ;
3419- return ;
3430+ if ( ! TryCreateCodeDomProvider ( _logger , _stronglyTypedLanguage , out provider ) )
3431+ {
3432+ sourceFile = null ;
3433+ return ;
3434+ }
3435+ }
3436+ finally
3437+ {
3438+ provider ? . Dispose ( ) ;
34203439 }
34213440
34223441 // Default the class name if we need to
@@ -3542,15 +3561,16 @@ private void ReadResources(ReaderInfo readerInfo, IResourceReader reader, String
35423561#endif // FEATURE_RESXREADER_LIVEDESERIALIZATION
35433562
35443563 /// <summary>
3545- /// Read resources from a text format file
3564+ /// Read resources from a text format file.
35463565 /// </summary>
3547- /// <param name="reader">Reader info</param>
3548- /// <param name="fileName">Input resources filename</param>
3566+ /// <param name="reader">Reader info. </param>
3567+ /// <param name="fileName">Input resources filename. </param>
35493568 private void ReadTextResources ( ReaderInfo reader , String fileName )
35503569 {
35513570 // Check for byte order marks in the beginning of the input file, but
35523571 // default to UTF-8.
3553- using ( LineNumberStreamReader sr = new LineNumberStreamReader ( fileName , new UTF8Encoding ( true ) , true ) )
3572+ using var fs = File . Open ( fileName , FileMode . Open , FileAccess . Read , FileShare . Read ) ;
3573+ using ( LineNumberStreamReader sr = new LineNumberStreamReader ( fs , new UTF8Encoding ( true ) , true ) )
35543574 {
35553575 StringBuilder name = new StringBuilder ( 255 ) ;
35563576 StringBuilder value = new StringBuilder ( 2048 ) ;
@@ -3876,8 +3896,8 @@ internal sealed class LineNumberStreamReader : StreamReader
38763896 private int _lineNumber ;
38773897 private int _col ;
38783898
3879- internal LineNumberStreamReader ( String fileName , Encoding encoding , bool detectEncoding )
3880- : base ( File . Open ( fileName , FileMode . Open , FileAccess . Read , FileShare . Read ) , encoding , detectEncoding )
3899+ internal LineNumberStreamReader ( Stream fileStream , Encoding encoding , bool detectEncoding )
3900+ : base ( fileStream , encoding , detectEncoding )
38813901 {
38823902 _lineNumber = 1 ;
38833903 _col = 0 ;
0 commit comments