@@ -129,8 +129,8 @@ public sealed class DotNetDisassembleService
129129 "If it's not installed, install it with:\n " +
130130 " " + Constants . DOTNET_MUXER + " tool install -g " + Constants . DOTNET_ILDASM + "\n " +
131131 "Also ensure that ~/" + DOTNET_HOME_DIRNAME + "/" + DOTNET_TOOLS_DIRNAME + " is included in your PATH.\n " +
132- "Alternatively, you can install " + Constants . ILSPY + " and we will use it automatically:\n " +
133- " " + Constants . DOTNET_MUXER + " tool install -g " + Constants . ILSPY ;
132+ "Alternatively, you can install " + Constants . ILSPY_CMD + " and we will use it automatically:\n " +
133+ " " + Constants . DOTNET_MUXER + " tool install -g " + Constants . ILSPY_CMD ;
134134 #endregion
135135 private enum DisassemblerKind
136136 {
@@ -223,14 +223,14 @@ public DotNetDisassembleService(ConfigSettings config, ILCache ilCache)
223223 try
224224 {
225225 // キャッシュ確認とプロセス起動を内包した TryDisassembleAsync を実行。
226- var attempt = await TryDisassembleAsync ( candidateDisassembleCommand , dotNetAssemblyfileAbsolutePath ) ;
227- if ( attempt . Success )
226+ var ( success , ilText , disassembleCommandAndItsVersionWithArguments , error ) = await TryDisassembleAsync ( candidateDisassembleCommand , dotNetAssemblyfileAbsolutePath ) ;
227+ if ( success )
228228 {
229- return ( attempt . IlText , attempt . DisassembleCommandAndItsVersionWithArguments ) ;
229+ return ( ilText , disassembleCommandAndItsVersionWithArguments ) ;
230230 }
231- if ( attempt . Error != null )
231+ if ( error != null )
232232 {
233- lastError = attempt . Error ;
233+ lastError = error ;
234234 }
235235 }
236236 catch ( System . ComponentModel . Win32Exception ex )
@@ -272,8 +272,8 @@ public async Task PrefetchIlCacheAsync(IEnumerable<string> dotNetAssemblyFilesAb
272272 throw new ArgumentOutOfRangeException ( nameof ( maxParallel ) , maxParallel , Constants . ERROR_MAX_PARALLEL ) ;
273273 }
274274
275- // 入力列を ICollection に引き上げ(必要なら ToList )て、件数ゼロなら処理をスキップ。
276- var assemblies = dotNetAssemblyFilesAbsolutePaths as ICollection < string > ?? dotNetAssemblyFilesAbsolutePaths . ToList ( ) ;
275+ // 入力列を ICollection に引き上げ(必要なら List を生成 )て、件数ゼロなら処理をスキップ。
276+ var assemblies = dotNetAssemblyFilesAbsolutePaths as ICollection < string > ?? [ .. dotNetAssemblyFilesAbsolutePaths ] ;
277277 if ( assemblies . Count == 0 )
278278 {
279279 return ;
@@ -334,7 +334,7 @@ public async Task PrefetchIlCacheAsync(IEnumerable<string> dotNetAssemblyFilesAb
334334 // dotnet muxer は "dotnet dotnet-ildasm" の形で実行されるため、相対パス・絶対パスの双方を試す。
335335 disassembleCommandsWithArguments = [ $ "{ Constants . DOTNET_MUXER } { Constants . DOTNET_ILDASM } { dotNetAssemblyNameOnly } ", $ "{ Constants . DOTNET_MUXER } { Constants . DOTNET_ILDASM } { dotNetAssemblyFileAbsolutePath } "] ;
336336 }
337- else if ( string . Equals ( disassemblerFileName , Constants . ILSPY , StringComparison . OrdinalIgnoreCase ) )
337+ else if ( string . Equals ( disassemblerFileName , Constants . ILSPY_CMD , StringComparison . OrdinalIgnoreCase ) )
338338 {
339339 // ilspycmd は /il スイッチを付与する必要があるため、これも付けた状態で 2 パターン生成。
340340 disassembleCommandsWithArguments = [ $ "{ disassemblerFileName } { ILSPY_FLAG_IL } { dotNetAssemblyNameOnly } ", $ "{ disassemblerFileName } { ILSPY_FLAG_IL } { dotNetAssemblyFileAbsolutePath } "] ;
@@ -402,14 +402,14 @@ public async Task PrefetchIlCacheAsync(IEnumerable<string> dotNetAssemblyFilesAb
402402 {
403403 foreach ( var argset in BuildArgSets ( disassembleCommand , dotNetAssemblyFileAbsolutePath , tempAsciiPath ) )
404404 {
405- var result = await TryDisassembleWithArguments ( disassembleCommand , dotNetAssemblyFileAbsolutePath , argset ) ;
406- if ( result . Success )
405+ var ( success , ilText , disassembleCommandAndItsVersionWithArguments , error ) = await TryDisassembleWithArguments ( disassembleCommand , dotNetAssemblyFileAbsolutePath , argset ) ;
406+ if ( success )
407407 {
408- return result ;
408+ return ( success , ilText , disassembleCommandAndItsVersionWithArguments , error ) ;
409409 }
410- if ( result . Error != null )
410+ if ( error != null )
411411 {
412- lastError = result . Error ;
412+ lastError = error ;
413413 }
414414 }
415415 }
@@ -521,7 +521,7 @@ public async Task PrefetchIlCacheAsync(IEnumerable<string> dotNetAssemblyFilesAb
521521 /// <summary>
522522 /// 指定コマンドが ilspycmd かを判定します。
523523 /// </summary>
524- private static bool IsIlspyCommand ( string command ) => string . Equals ( Path . GetFileName ( command ) , Constants . ILSPY , StringComparison . OrdinalIgnoreCase ) ;
524+ private static bool IsIlspyCommand ( string command ) => string . Equals ( Path . GetFileName ( command ) , Constants . ILSPY_CMD , StringComparison . OrdinalIgnoreCase ) ;
525525
526526 /// <summary>
527527 /// パスに非ASCII文字がある場合に、ASCII の一時パスへコピーしたファイルのパスを返します。該当しなければ null。
@@ -574,7 +574,7 @@ private static string CreateAsciiTempCopyIfNeeded(string dotNetAssemblyFileAbsol
574574 {
575575 argSets . Add ( ( Environment . CurrentDirectory , [ ILSPY_FLAG_IL , tempAsciiPath ] , null ) ) ;
576576 }
577- string MakeTempOut ( ) => Path . Combine ( Path . GetTempPath ( ) , $ "ilspy_out_{ Guid . NewGuid ( ) : N} .il") ;
577+ static string MakeTempOut ( ) => Path . Combine ( Path . GetTempPath ( ) , $ "ilspy_out_{ Guid . NewGuid ( ) : N} .il") ;
578578 var out1 = MakeTempOut ( ) ;
579579 argSets . Add ( ( disassemblerFileDirectoryAbsolutePath , [ ILSPY_FLAG_IL , ILSPY_FLAG_OUTPUT , out1 , disassemblerFileNameOnly ] , out1 ) ) ;
580580 var out2 = MakeTempOut ( ) ;
@@ -591,7 +591,7 @@ private static string CreateAsciiTempCopyIfNeeded(string dotNetAssemblyFileAbsol
591591 /// <summary>
592592 /// ベースラベルにツールバージョンを付加して返します。取得失敗時はベースラベルをそのまま返します。
593593 /// </summary>
594- private async Task < string > GetDisassembleCommandAndItsVersionWithArgumentsAsync ( string disassembleCommandWithArguments )
594+ private static async Task < string > GetDisassembleCommandAndItsVersionWithArgumentsAsync ( string disassembleCommandWithArguments )
595595 {
596596 try
597597 {
@@ -646,35 +646,6 @@ private async Task<string> GetDisassembleCommandAndItsVersionWithArgumentsAsync(
646646 }
647647 }
648648
649- /// <summary>
650- /// コマンドラベルから逆アセンブラの種類・キャッシュキー・実行ファイル名を解決します。
651- /// Dotnet muxer 経由のケースや ilspycmd 単体起動など、既知のパターンを判定して適切なキーへ正規化します。
652- /// </summary>
653- private static ( DisassemblerKind kind , string toolKey , string disassemblerExe ) ResolveDisassembler ( string commandLabel )
654- {
655- var tokens = Utility . TokenizeCommand ( commandLabel ) ;
656- if ( tokens . Count == 0 )
657- {
658- throw new InvalidOperationException ( $ "Failed to determine disassembler version: invalid command label '{ commandLabel } '.") ;
659- }
660-
661- if ( string . Equals ( tokens [ 0 ] , Constants . DOTNET_MUXER , StringComparison . OrdinalIgnoreCase ) )
662- {
663- if ( tokens . Count >= 2 && string . Equals ( tokens [ 1 ] , Constants . DOTNET_ILDASM , StringComparison . OrdinalIgnoreCase ) )
664- {
665- return ( kind : DisassemblerKind . DotnetIldasm , toolKey : $ "{ Constants . DOTNET_MUXER } { Constants . DOTNET_ILDASM } ", disassemblerExe : Constants . DOTNET_MUXER ) ;
666- }
667- }
668-
669- var exe = tokens [ 0 ] ;
670- return Path . GetFileName ( exe ) ? . ToLowerInvariant ( ) switch
671- {
672- Constants . DOTNET_ILDASM => ( kind : DisassemblerKind . Ildasm , toolKey : Constants . DOTNET_ILDASM , disassemblerExe : exe ) ,
673- Constants . ILSPY => ( kind : DisassemblerKind . Ilspy , toolKey : Constants . ILSPY , disassemblerExe : exe ) ,
674- _ => ( kind : DisassemblerKind . Unknown , toolKey : null , disassemblerExe : null )
675- } ;
676- }
677-
678649 /// <summary>
679650 /// 指定ツールがブラックリスト化されているかを判定。一定期間内に失敗が閾値を超えた場合は解除
680651 /// </summary>
@@ -745,8 +716,8 @@ private static IEnumerable<string> CandidateDisassembleCommands()
745716 yield return Constants . DOTNET_ILDASM ;
746717 yield return Path . Combine ( UserDotnetToolsDirectory , Constants . DOTNET_ILDASM ) ;
747718 yield return Constants . DOTNET_MUXER ;
748- yield return Constants . ILSPY ;
749- yield return Path . Combine ( UserDotnetToolsDirectory , Constants . ILSPY ) ;
719+ yield return Constants . ILSPY_CMD ;
720+ yield return Path . Combine ( UserDotnetToolsDirectory , Constants . ILSPY_CMD ) ;
750721 }
751722 #endregion
752723 }
0 commit comments