diff --git a/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/AssemblySymbolLoader.cs b/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/AssemblySymbolLoader.cs index f90efb19f4ad..361937c6b18b 100644 --- a/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/AssemblySymbolLoader.cs +++ b/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/AssemblySymbolLoader.cs @@ -95,6 +95,8 @@ public void AddReferenceSearchPaths(params string[] paths) /// public IReadOnlyList LoadAssemblies(params string[] paths) { + _log.LogMessage(MessageImportance.Low, string.Format(Resources.LoadingAssemblies, string.Join(", ", paths))); + // First resolve all assemblies that are passed in and create metadata references out of them. // Reference assemblies of the passed in assemblies that themselves are passed in, will be skipped to be resolved, // as they are resolved as part of the loop below. @@ -119,6 +121,8 @@ public void AddReferenceSearchPaths(params string[] paths) /// public IReadOnlyList LoadAssembliesFromArchive(string archivePath, IReadOnlyList relativePaths) { + _log.LogMessage(MessageImportance.Low, string.Format(Resources.LoadingAssembliesFromArchive, string.Join(", ", relativePaths), archivePath)); + using FileStream stream = File.OpenRead(archivePath); using ZipArchive zipFile = new(stream); @@ -144,7 +148,8 @@ public void AddReferenceSearchPaths(params string[] paths) string name = Path.GetFileName(relativePaths[i]); if (!_loadedAssemblies.TryGetValue(name, out MetadataReference? metadataReference)) { - metadataReference = CreateAndAddReferenceToCompilation(name, memoryStream, fileNames); + string rootAssemblyDisplayString = string.Format(Resources.RootAssemblyFromPackageDisplayString, relativePaths[i], archivePath); + metadataReference = CreateAndAddReferenceToCompilation(name, rootAssemblyDisplayString, memoryStream, fileNames); } metadataReferences[i] = metadataReference; @@ -170,6 +175,8 @@ public void AddReferenceSearchPaths(params string[] paths) /// public IAssemblySymbol? LoadAssembly(string path) { + _log.LogMessage(MessageImportance.Low, string.Format(Resources.LoadingAssembly, path)); + MetadataReference metadataReference = CreateOrGetMetadataReferenceFromPath(path); IAssemblySymbol? assemblySymbol = _cSharpCompilation.GetAssemblyOrModuleSymbol(metadataReference) as IAssemblySymbol; LogCompilationDiagnostics(); @@ -180,6 +187,8 @@ public void AddReferenceSearchPaths(params string[] paths) /// public IAssemblySymbol? LoadAssembly(string name, Stream stream) { + _log.LogMessage(MessageImportance.Low, string.Format(Resources.LoadingAssemblyFromStream, name)); + if (stream.Position >= stream.Length) { throw new ArgumentException(Resources.StreamPositionGreaterThanLength, nameof(stream)); @@ -187,7 +196,8 @@ public void AddReferenceSearchPaths(params string[] paths) if (!_loadedAssemblies.TryGetValue(name, out MetadataReference? metadataReference)) { - metadataReference = CreateAndAddReferenceToCompilation(name, stream); + string rootAssemblyDisplayString = string.Format(Resources.RootAssemblyDisplayString, name); + metadataReference = CreateAndAddReferenceToCompilation(name, rootAssemblyDisplayString, stream); } IAssemblySymbol? assemblySymbol = _cSharpCompilation.GetAssemblyOrModuleSymbol(metadataReference) as IAssemblySymbol; @@ -318,13 +328,14 @@ private MetadataReference CreateOrGetMetadataReferenceFromPath(string path, Immu if (!_loadedAssemblies.TryGetValue(name, out MetadataReference? metadataReference)) { using FileStream stream = File.OpenRead(path); - metadataReference = CreateAndAddReferenceToCompilation(name, stream, referenceAssemblyNamesToIgnore); + string rootAssemblyDisplayString = string.Format(Resources.RootAssemblyDisplayString, path); + metadataReference = CreateAndAddReferenceToCompilation(name, rootAssemblyDisplayString, stream, referenceAssemblyNamesToIgnore); } return metadataReference; } - private MetadataReference CreateAndAddReferenceToCompilation(string name, Stream fileStream, ImmutableHashSet? referenceAssemblyNamesToIgnore = null) + private MetadataReference CreateAndAddReferenceToCompilation(string assemblyName, string rootAssemblyDisplayString, Stream fileStream, ImmutableHashSet? referenceAssemblyNamesToIgnore = null, string? referenceeAssemblyName = null) { // If we need to resolve references we can't reuse the same stream after creating the metadata // reference from it as Roslyn closes it. So instead we use PEReader and get the bytes @@ -333,51 +344,60 @@ private MetadataReference CreateAndAddReferenceToCompilation(string name, Stream if (!reader.HasMetadata) { - throw new ArgumentException(string.Format(Resources.ProvidedStreamDoesNotHaveMetadata, name)); + throw new ArgumentException(string.Format(Resources.ProvidedStreamDoesNotHaveMetadata, assemblyName)); } PEMemoryBlock image = reader.GetEntireImage(); MetadataReference metadataReference = MetadataReference.CreateFromImage(image.GetContent()); - _loadedAssemblies.Add(name, metadataReference); + _loadedAssemblies.Add(assemblyName, metadataReference); _cSharpCompilation = _cSharpCompilation.AddReferences([ metadataReference ]); + if (referenceeAssemblyName is null) + { + _log.LogMessage(MessageImportance.Low, string.Format(Resources.AssemblyLoaded, assemblyName)); + } + else + { + _log.LogMessage(MessageImportance.Low, string.Format(Resources.AssemblyReferenceLoaded, assemblyName, referenceeAssemblyName)); + } + if (_resolveReferences) { - ResolveReferences(reader, referenceAssemblyNamesToIgnore); + ResolveReferences(reader, assemblyName, rootAssemblyDisplayString, referenceAssemblyNamesToIgnore); } return metadataReference; } - private void ResolveReferences(PEReader peReader, ImmutableHashSet? referenceAssemblyNamesToIgnore = null) + private void ResolveReferences(PEReader peReader, string assemblyName, string rootAssemblyDisplayString, ImmutableHashSet? referenceAssemblyNamesToIgnore = null) { MetadataReader reader = peReader.GetMetadataReader(); - foreach (AssemblyReferenceHandle handle in reader.AssemblyReferences) + foreach (AssemblyReferenceHandle assemblyReferenceHandle in reader.AssemblyReferences) { - AssemblyReference reference = reader.GetAssemblyReference(handle); - string nameWithoutExtension = reader.GetString(reference.Name); + AssemblyReference assemblyReference = reader.GetAssemblyReference(assemblyReferenceHandle); + string assemblyReferenceNameWithoutExtension = reader.GetString(assemblyReference.Name); // Skip assemblies that should never get loaded because they are purely internal - if (s_assembliesToIgnore.Contains(nameWithoutExtension)) + if (s_assembliesToIgnore.Contains(assemblyReferenceNameWithoutExtension)) continue; - string name = nameWithoutExtension + ".dll"; + string assemblyReferenceName = assemblyReferenceNameWithoutExtension + ".dll"; // Skip reference assemblies that are loaded later. - if (referenceAssemblyNamesToIgnore != null && referenceAssemblyNamesToIgnore.Contains(name)) + if (referenceAssemblyNamesToIgnore != null && referenceAssemblyNamesToIgnore.Contains(assemblyReferenceName)) continue; // If the assembly reference is already loaded, don't do anything. - if (_loadedAssemblies.ContainsKey(name)) + if (_loadedAssemblies.ContainsKey(assemblyReferenceName)) continue; // First we try to see if a reference path for this specific assembly was passed in directly, and if so // we use that. - if (_referencePathFiles.TryGetValue(name, out string? fullReferencePath)) + if (_referencePathFiles.TryGetValue(assemblyReferenceName, out string? fullReferencePath)) { // TODO: add version check and add a warning if it doesn't match? - using FileStream resolvedStream = File.OpenRead(Path.Combine(fullReferencePath, name)); - CreateAndAddReferenceToCompilation(name, resolvedStream, referenceAssemblyNamesToIgnore); + using FileStream resolvedStream = File.OpenRead(Path.Combine(fullReferencePath, assemblyReferenceName)); + CreateAndAddReferenceToCompilation(assemblyReferenceName, rootAssemblyDisplayString, resolvedStream, referenceAssemblyNamesToIgnore, assemblyName); } // If we can't find a specific reference path for the dependency, then we look in the folders where the // rest of the reference paths are located to see if we can find the dependency there. @@ -387,12 +407,12 @@ private void ResolveReferences(PEReader peReader, ImmutableHashSet? refe foreach (string referencePathDirectory in _referencePathDirectories) { - string potentialPath = Path.Combine(referencePathDirectory, name); + string potentialPath = Path.Combine(referencePathDirectory, assemblyReferenceName); if (File.Exists(potentialPath)) { // TODO: add version check and add a warning if it doesn't match? using FileStream resolvedStream = File.OpenRead(potentialPath); - CreateAndAddReferenceToCompilation(name, resolvedStream, referenceAssemblyNamesToIgnore); + CreateAndAddReferenceToCompilation(assemblyReferenceName, rootAssemblyDisplayString, resolvedStream, referenceAssemblyNamesToIgnore, assemblyName); found = true; break; } @@ -400,7 +420,8 @@ private void ResolveReferences(PEReader peReader, ImmutableHashSet? refe if (!found) { - _log.LogWarning(AssemblyReferenceNotFoundErrorCode, string.Format(Resources.CouldNotResolveReference, name)); + _log.LogWarning(AssemblyReferenceNotFoundErrorCode, + string.Format(Resources.CouldNotResolveReference, assemblyReferenceName, rootAssemblyDisplayString)); } } } diff --git a/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Resources.resx b/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Resources.resx index d7fa05dbf47f..3b7c96ac9169 100644 --- a/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Resources.resx +++ b/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Resources.resx @@ -117,8 +117,26 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Assembly '{0}' loaded. + + + Assembly '{0}' referenced by '{1}' loaded. + - Could not resolve reference '{0}' in any of the provided search directories. + Could not resolve reference '{0}' directly or transitively referenced by {1} in any of the provided search directories. + + + Loading assemblies '{0}'. + + + Loading assemblies '{0}' ({1}). + + + Loading assembly '{0}'. + + + Loading assembly '{0}' from stream. Could not find matching assembly: '{0}' in any of the search directories. @@ -129,6 +147,12 @@ Provided stream for assembly '{0}' doesn't have any metadata to read. from. + + '{0}' + + + '{0}' ({1}) + Should not be null and contain at least one element. diff --git a/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.cs.xlf b/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.cs.xlf index 324c9c461f20..d1c7c7404f5f 100644 --- a/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.cs.xlf +++ b/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.cs.xlf @@ -2,9 +2,39 @@ + + Assembly '{0}' loaded. + Assembly '{0}' loaded. + + + + Assembly '{0}' referenced by '{1}' loaded. + Assembly '{0}' referenced by '{1}' loaded. + + - Could not resolve reference '{0}' in any of the provided search directories. - V žádném z uvedených adresářů vyhledávání se nepovedlo přeložit odkaz {0}. + Could not resolve reference '{0}' directly or transitively referenced by {1} in any of the provided search directories. + Could not resolve reference '{0}' directly or transitively referenced by {1} in any of the provided search directories. + + + + Loading assemblies '{0}'. + Loading assemblies '{0}'. + + + + Loading assemblies '{0}' ({1}). + Loading assemblies '{0}' ({1}). + + + + Loading assembly '{0}'. + Loading assembly '{0}'. + + + + Loading assembly '{0}' from stream. + Loading assembly '{0}' from stream. @@ -22,6 +52,16 @@ Poskytnutý datový proud pro sestavení {0} nemá žádná metadata pro čtení. + + '{0}' + '{0}' + + + + '{0}' ({1}) + '{0}' ({1}) + + Should not be null and contain at least one element. Nesmí být null a obsahovat alespoň jeden element. diff --git a/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.de.xlf b/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.de.xlf index b1adc5cbceef..a93cc3476f27 100644 --- a/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.de.xlf +++ b/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.de.xlf @@ -2,9 +2,39 @@ + + Assembly '{0}' loaded. + Assembly '{0}' loaded. + + + + Assembly '{0}' referenced by '{1}' loaded. + Assembly '{0}' referenced by '{1}' loaded. + + - Could not resolve reference '{0}' in any of the provided search directories. - Der Verweis "{0}" konnte in keinem der angegebenen Suchverzeichnisse aufgelöst werden. + Could not resolve reference '{0}' directly or transitively referenced by {1} in any of the provided search directories. + Could not resolve reference '{0}' directly or transitively referenced by {1} in any of the provided search directories. + + + + Loading assemblies '{0}'. + Loading assemblies '{0}'. + + + + Loading assemblies '{0}' ({1}). + Loading assemblies '{0}' ({1}). + + + + Loading assembly '{0}'. + Loading assembly '{0}'. + + + + Loading assembly '{0}' from stream. + Loading assembly '{0}' from stream. @@ -22,6 +52,16 @@ Der angegebene Datenstrom für die Assembly "{0}" enthält keine Metadaten, aus denen gelesen werden kann. + + '{0}' + '{0}' + + + + '{0}' ({1}) + '{0}' ({1}) + + Should not be null and contain at least one element. Darf nicht NULL sein und muss mindestens ein Element enthalten. diff --git a/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.es.xlf b/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.es.xlf index 42b08421cccc..2a50d71c6dec 100644 --- a/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.es.xlf +++ b/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.es.xlf @@ -2,9 +2,39 @@ + + Assembly '{0}' loaded. + Assembly '{0}' loaded. + + + + Assembly '{0}' referenced by '{1}' loaded. + Assembly '{0}' referenced by '{1}' loaded. + + - Could not resolve reference '{0}' in any of the provided search directories. - No se pudo resolver la referencia "{0}" en ninguno de los directorios de búsqueda proporcionados. + Could not resolve reference '{0}' directly or transitively referenced by {1} in any of the provided search directories. + Could not resolve reference '{0}' directly or transitively referenced by {1} in any of the provided search directories. + + + + Loading assemblies '{0}'. + Loading assemblies '{0}'. + + + + Loading assemblies '{0}' ({1}). + Loading assemblies '{0}' ({1}). + + + + Loading assembly '{0}'. + Loading assembly '{0}'. + + + + Loading assembly '{0}' from stream. + Loading assembly '{0}' from stream. @@ -22,6 +52,16 @@ La secuencia proporcionada para el ensamblado "{0}" no tiene metadatos que leer. + + '{0}' + '{0}' + + + + '{0}' ({1}) + '{0}' ({1}) + + Should not be null and contain at least one element. No debe ser nulo y debe contener al menos un elemento. diff --git a/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.fr.xlf b/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.fr.xlf index ac4050130c1f..081bfef494a5 100644 --- a/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.fr.xlf +++ b/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.fr.xlf @@ -2,9 +2,39 @@ + + Assembly '{0}' loaded. + Assembly '{0}' loaded. + + + + Assembly '{0}' referenced by '{1}' loaded. + Assembly '{0}' referenced by '{1}' loaded. + + - Could not resolve reference '{0}' in any of the provided search directories. - Impossible de résoudre la référence «{0}» dans l’un des répertoires de recherche fournis. + Could not resolve reference '{0}' directly or transitively referenced by {1} in any of the provided search directories. + Could not resolve reference '{0}' directly or transitively referenced by {1} in any of the provided search directories. + + + + Loading assemblies '{0}'. + Loading assemblies '{0}'. + + + + Loading assemblies '{0}' ({1}). + Loading assemblies '{0}' ({1}). + + + + Loading assembly '{0}'. + Loading assembly '{0}'. + + + + Loading assembly '{0}' from stream. + Loading assembly '{0}' from stream. @@ -22,6 +52,16 @@ Le flux fourni pour l’assembly '{0}' n’a aucune métadonnée à lire. De. + + '{0}' + '{0}' + + + + '{0}' ({1}) + '{0}' ({1}) + + Should not be null and contain at least one element. Ne doit pas être null et contenir au moins un élément. diff --git a/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.it.xlf b/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.it.xlf index c5579a2600b7..7a4ec8b1e58e 100644 --- a/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.it.xlf +++ b/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.it.xlf @@ -2,9 +2,39 @@ + + Assembly '{0}' loaded. + Assembly '{0}' loaded. + + + + Assembly '{0}' referenced by '{1}' loaded. + Assembly '{0}' referenced by '{1}' loaded. + + - Could not resolve reference '{0}' in any of the provided search directories. - Non è stato possibile risolvere il riferimento '{0}' in nessuna delle directory di ricerca specificate. + Could not resolve reference '{0}' directly or transitively referenced by {1} in any of the provided search directories. + Could not resolve reference '{0}' directly or transitively referenced by {1} in any of the provided search directories. + + + + Loading assemblies '{0}'. + Loading assemblies '{0}'. + + + + Loading assemblies '{0}' ({1}). + Loading assemblies '{0}' ({1}). + + + + Loading assembly '{0}'. + Loading assembly '{0}'. + + + + Loading assembly '{0}' from stream. + Loading assembly '{0}' from stream. @@ -22,6 +52,16 @@ Il flusso specificato per l'assembly '{0}' non contiene metadati da leggere. + + '{0}' + '{0}' + + + + '{0}' ({1}) + '{0}' ({1}) + + Should not be null and contain at least one element. Non deve essere null e deve contenere almeno un elemento. diff --git a/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.ja.xlf b/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.ja.xlf index 22a041a1889b..de55a1d8b387 100644 --- a/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.ja.xlf +++ b/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.ja.xlf @@ -2,9 +2,39 @@ + + Assembly '{0}' loaded. + Assembly '{0}' loaded. + + + + Assembly '{0}' referenced by '{1}' loaded. + Assembly '{0}' referenced by '{1}' loaded. + + - Could not resolve reference '{0}' in any of the provided search directories. - 指定された検索ディレクトリ内の参照 '{0}' を解決できませんでした。 + Could not resolve reference '{0}' directly or transitively referenced by {1} in any of the provided search directories. + Could not resolve reference '{0}' directly or transitively referenced by {1} in any of the provided search directories. + + + + Loading assemblies '{0}'. + Loading assemblies '{0}'. + + + + Loading assemblies '{0}' ({1}). + Loading assemblies '{0}' ({1}). + + + + Loading assembly '{0}'. + Loading assembly '{0}'. + + + + Loading assembly '{0}' from stream. + Loading assembly '{0}' from stream. @@ -22,6 +52,16 @@ アセンブリ '{0}' に指定されたストリームに読み取るメタデータがありません。送信者。 + + '{0}' + '{0}' + + + + '{0}' ({1}) + '{0}' ({1}) + + Should not be null and contain at least one element. null および 1 つ以上の要素が含まれている必要があります。 diff --git a/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.ko.xlf b/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.ko.xlf index 47b0726a528f..977964897dc6 100644 --- a/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.ko.xlf +++ b/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.ko.xlf @@ -2,9 +2,39 @@ + + Assembly '{0}' loaded. + Assembly '{0}' loaded. + + + + Assembly '{0}' referenced by '{1}' loaded. + Assembly '{0}' referenced by '{1}' loaded. + + - Could not resolve reference '{0}' in any of the provided search directories. - 제공된 검색 디렉터리에서 참조 '{0}'(을)를 확인할 수 없습니다. + Could not resolve reference '{0}' directly or transitively referenced by {1} in any of the provided search directories. + Could not resolve reference '{0}' directly or transitively referenced by {1} in any of the provided search directories. + + + + Loading assemblies '{0}'. + Loading assemblies '{0}'. + + + + Loading assemblies '{0}' ({1}). + Loading assemblies '{0}' ({1}). + + + + Loading assembly '{0}'. + Loading assembly '{0}'. + + + + Loading assembly '{0}' from stream. + Loading assembly '{0}' from stream. @@ -22,6 +52,16 @@ 어셈블리 '{0}'에 대해 제공된 스트림에 읽을 메타데이터가 없습니다. + + '{0}' + '{0}' + + + + '{0}' ({1}) + '{0}' ({1}) + + Should not be null and contain at least one element. Null이 아니어야 하고 요소를 하나 이상 포함해야 합니다. diff --git a/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.pl.xlf b/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.pl.xlf index 2505ca72d789..3cd49ba6d927 100644 --- a/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.pl.xlf +++ b/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.pl.xlf @@ -2,9 +2,39 @@ + + Assembly '{0}' loaded. + Assembly '{0}' loaded. + + + + Assembly '{0}' referenced by '{1}' loaded. + Assembly '{0}' referenced by '{1}' loaded. + + - Could not resolve reference '{0}' in any of the provided search directories. - Nie można rozpoznać odwołania "{0}" w żadnym z podanych katalogów wyszukiwania. + Could not resolve reference '{0}' directly or transitively referenced by {1} in any of the provided search directories. + Could not resolve reference '{0}' directly or transitively referenced by {1} in any of the provided search directories. + + + + Loading assemblies '{0}'. + Loading assemblies '{0}'. + + + + Loading assemblies '{0}' ({1}). + Loading assemblies '{0}' ({1}). + + + + Loading assembly '{0}'. + Loading assembly '{0}'. + + + + Loading assembly '{0}' from stream. + Loading assembly '{0}' from stream. @@ -22,6 +52,16 @@ Podany strumień dla zestawu "{0}" nie ma metadanych, z których można odczytywać. + + '{0}' + '{0}' + + + + '{0}' ({1}) + '{0}' ({1}) + + Should not be null and contain at least one element. Nie może mieć wartości null i powinna zawierać co najmniej jeden element. diff --git a/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.pt-BR.xlf b/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.pt-BR.xlf index 427e22d95228..d127c006417c 100644 --- a/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.pt-BR.xlf +++ b/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.pt-BR.xlf @@ -2,9 +2,39 @@ + + Assembly '{0}' loaded. + Assembly '{0}' loaded. + + + + Assembly '{0}' referenced by '{1}' loaded. + Assembly '{0}' referenced by '{1}' loaded. + + - Could not resolve reference '{0}' in any of the provided search directories. - Não foi possível resolver a referência '{0}' em nenhum dos diretórios de pesquisa fornecidos. + Could not resolve reference '{0}' directly or transitively referenced by {1} in any of the provided search directories. + Could not resolve reference '{0}' directly or transitively referenced by {1} in any of the provided search directories. + + + + Loading assemblies '{0}'. + Loading assemblies '{0}'. + + + + Loading assemblies '{0}' ({1}). + Loading assemblies '{0}' ({1}). + + + + Loading assembly '{0}'. + Loading assembly '{0}'. + + + + Loading assembly '{0}' from stream. + Loading assembly '{0}' from stream. @@ -22,6 +52,16 @@ O fluxo fornecido para o assembly '{0}' não tem metadados para ler. desde. + + '{0}' + '{0}' + + + + '{0}' ({1}) + '{0}' ({1}) + + Should not be null and contain at least one element. Não deve ser nulo e conter pelo menos um elemento. diff --git a/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.ru.xlf b/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.ru.xlf index dc077b51df3a..100bb13e8e96 100644 --- a/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.ru.xlf +++ b/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.ru.xlf @@ -2,9 +2,39 @@ + + Assembly '{0}' loaded. + Assembly '{0}' loaded. + + + + Assembly '{0}' referenced by '{1}' loaded. + Assembly '{0}' referenced by '{1}' loaded. + + - Could not resolve reference '{0}' in any of the provided search directories. - Не удалось разрешить ссылку "{0}" ни в одном из указанных каталогов поиска. + Could not resolve reference '{0}' directly or transitively referenced by {1} in any of the provided search directories. + Could not resolve reference '{0}' directly or transitively referenced by {1} in any of the provided search directories. + + + + Loading assemblies '{0}'. + Loading assemblies '{0}'. + + + + Loading assemblies '{0}' ({1}). + Loading assemblies '{0}' ({1}). + + + + Loading assembly '{0}'. + Loading assembly '{0}'. + + + + Loading assembly '{0}' from stream. + Loading assembly '{0}' from stream. @@ -22,6 +52,16 @@ Указанный поток для сборки "{0}" не имеет метаданных для чтения. От. + + '{0}' + '{0}' + + + + '{0}' ({1}) + '{0}' ({1}) + + Should not be null and contain at least one element. Не должно иметь значение NULL и содержать хотя бы один элемент. diff --git a/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.tr.xlf b/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.tr.xlf index de40e451b609..9964bd5a9b6c 100644 --- a/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.tr.xlf +++ b/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.tr.xlf @@ -2,9 +2,39 @@ + + Assembly '{0}' loaded. + Assembly '{0}' loaded. + + + + Assembly '{0}' referenced by '{1}' loaded. + Assembly '{0}' referenced by '{1}' loaded. + + - Could not resolve reference '{0}' in any of the provided search directories. - Sağlanan arama dizinlerinin hiçbirinde '{0}' başvurusu çözümlenemedi. + Could not resolve reference '{0}' directly or transitively referenced by {1} in any of the provided search directories. + Could not resolve reference '{0}' directly or transitively referenced by {1} in any of the provided search directories. + + + + Loading assemblies '{0}'. + Loading assemblies '{0}'. + + + + Loading assemblies '{0}' ({1}). + Loading assemblies '{0}' ({1}). + + + + Loading assembly '{0}'. + Loading assembly '{0}'. + + + + Loading assembly '{0}' from stream. + Loading assembly '{0}' from stream. @@ -22,6 +52,16 @@ '{0}' bütünleştirilmiş kodu için sağlanan akış, okunacak herhangi bir meta veriye sahip değil. + + '{0}' + '{0}' + + + + '{0}' ({1}) + '{0}' ({1}) + + Should not be null and contain at least one element. Null olmamalı ve en az bir öğe içermelidir. diff --git a/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.zh-Hans.xlf b/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.zh-Hans.xlf index d00e131209cf..b068b1b0fd6a 100644 --- a/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.zh-Hans.xlf +++ b/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.zh-Hans.xlf @@ -2,9 +2,39 @@ + + Assembly '{0}' loaded. + Assembly '{0}' loaded. + + + + Assembly '{0}' referenced by '{1}' loaded. + Assembly '{0}' referenced by '{1}' loaded. + + - Could not resolve reference '{0}' in any of the provided search directories. - 无法在任何提供的搜索目录中解析引用“{0}”。 + Could not resolve reference '{0}' directly or transitively referenced by {1} in any of the provided search directories. + Could not resolve reference '{0}' directly or transitively referenced by {1} in any of the provided search directories. + + + + Loading assemblies '{0}'. + Loading assemblies '{0}'. + + + + Loading assemblies '{0}' ({1}). + Loading assemblies '{0}' ({1}). + + + + Loading assembly '{0}'. + Loading assembly '{0}'. + + + + Loading assembly '{0}' from stream. + Loading assembly '{0}' from stream. @@ -22,6 +52,16 @@ 为程序集“{0}”提供的流没有任何可供读取的元数据。 + + '{0}' + '{0}' + + + + '{0}' ({1}) + '{0}' ({1}) + + Should not be null and contain at least one element. 不应为 null,并且应至少包含一个元素。 diff --git a/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.zh-Hant.xlf b/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.zh-Hant.xlf index f1dfc166bbe6..397fbb34524a 100644 --- a/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.zh-Hant.xlf +++ b/src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/xlf/Resources.zh-Hant.xlf @@ -2,9 +2,39 @@ + + Assembly '{0}' loaded. + Assembly '{0}' loaded. + + + + Assembly '{0}' referenced by '{1}' loaded. + Assembly '{0}' referenced by '{1}' loaded. + + - Could not resolve reference '{0}' in any of the provided search directories. - 無法在任何提供的搜尋目錄中解析參考 '{0}'。 + Could not resolve reference '{0}' directly or transitively referenced by {1} in any of the provided search directories. + Could not resolve reference '{0}' directly or transitively referenced by {1} in any of the provided search directories. + + + + Loading assemblies '{0}'. + Loading assemblies '{0}'. + + + + Loading assemblies '{0}' ({1}). + Loading assemblies '{0}' ({1}). + + + + Loading assembly '{0}'. + Loading assembly '{0}'. + + + + Loading assembly '{0}' from stream. + Loading assembly '{0}' from stream. @@ -22,6 +52,16 @@ 為元件 '{0}' 提供的資料流程沒有任何可從中讀取的中繼資料。 + + '{0}' + '{0}' + + + + '{0}' ({1}) + '{0}' ({1}) + + Should not be null and contain at least one element. 不應為 Null 且必須包含至少一個元素。 diff --git a/test/Microsoft.DotNet.ApiSymbolExtensions.Tests/AssemblySymbolLoaderTests.cs b/test/Microsoft.DotNet.ApiSymbolExtensions.Tests/AssemblySymbolLoaderTests.cs index 35886f8cbf05..940c5a4622f7 100644 --- a/test/Microsoft.DotNet.ApiSymbolExtensions.Tests/AssemblySymbolLoaderTests.cs +++ b/test/Microsoft.DotNet.ApiSymbolExtensions.Tests/AssemblySymbolLoaderTests.cs @@ -5,6 +5,7 @@ using System.Collections.Concurrent; using System.Reflection; +using System.Text.RegularExpressions; using Microsoft.CodeAnalysis; using Microsoft.DotNet.Cli.Utils; @@ -264,7 +265,8 @@ public void LoadAssemblyResolveReferences_WarnsWhenEnabled(bool resolveReference var assetInfo = GetSimpleTestAsset(); TestLog log = new(); AssemblySymbolLoader loader = new(log, resolveAssemblyReferences: resolveReferences); - loader.LoadAssembly(Path.Combine(assetInfo.OutputDirectory, assetInfo.TestAsset.TestProject.Name + ".dll")); + string assemblyPath = Path.Combine(assetInfo.OutputDirectory, assetInfo.TestAsset.TestProject.Name + ".dll"); + loader.LoadAssembly(assemblyPath); if (resolveReferences) { @@ -277,8 +279,8 @@ public void LoadAssemblyResolveReferences_WarnsWhenEnabled(bool resolveReference expectedReference = "mscorlib.dll"; } - List expected = [$"{AssemblySymbolLoader.AssemblyReferenceNotFoundErrorCode} Could not resolve reference '{expectedReference}' in any of the provided search directories."]; - Assert.Equal(expected, log.Warnings, StringComparer.CurrentCultureIgnoreCase); + Assert.Single(log.Warnings); + Assert.Matches($"CP1002.*?'{Regex.Escape(expectedReference)}'.*?'{Regex.Escape(assemblyPath)}'.*", log.Warnings.Single()); } else {