Enable injecting srcsvr variables (#97)

* Enable injecting srcsvr variables

* Rename package to Microsoft.DiaSymReader.Pdb2Pdb
This commit is contained in:
Tomáš Matoušek 2017-11-17 16:49:07 -08:00 коммит произвёл GitHub
Родитель c720dd9294
Коммит 8c5fe1933e
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
39 изменённых файлов: 834 добавлений и 188 удалений

Просмотреть файл

@ -0,0 +1,27 @@
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using Xunit;
using System;
namespace Microsoft.DiaSymReader.Tools.UnitTests
{
public class PdbConverterPortableToWindowsTests
{
[Fact]
public void ValidateSrcSvrVariables()
{
PdbConverterPortableToWindows.ValidateSrcSvrVariable("A", "", "");
PdbConverterPortableToWindows.ValidateSrcSvrVariable("AZaz09_", "", "");
PdbConverterPortableToWindows.ValidateSrcSvrVariable("ABC", "", "");
Assert.Throws<ArgumentException>(() => PdbConverterPortableToWindows.ValidateSrcSvrVariable(null, "", ""));
Assert.Throws<ArgumentException>(() => PdbConverterPortableToWindows.ValidateSrcSvrVariable("", "", ""));
Assert.Throws<ArgumentException>(() => PdbConverterPortableToWindows.ValidateSrcSvrVariable("-", "", ""));
Assert.Throws<ArgumentException>(() => PdbConverterPortableToWindows.ValidateSrcSvrVariable("ABC_[", "", ""));
Assert.Throws<ArgumentException>(() => PdbConverterPortableToWindows.ValidateSrcSvrVariable("0ABC", "", ""));
Assert.Throws<ArgumentException>(() => PdbConverterPortableToWindows.ValidateSrcSvrVariable("A", "a\r", ""));
Assert.Throws<ArgumentException>(() => PdbConverterPortableToWindows.ValidateSrcSvrVariable("A", "a\n", ""));
Assert.Throws<ArgumentException>(() => PdbConverterPortableToWindows.ValidateSrcSvrVariable("A", "a\0", ""));
}
}
}

Просмотреть файл

@ -1,6 +1,7 @@
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using Xunit;
using System.Collections.Generic;
namespace Microsoft.DiaSymReader.Tools.UnitTests
{
@ -1143,6 +1144,93 @@ SRCSRV: end ------------------------------------------------]]></srcsvr>
});
}
[Fact]
public void Convert_SourceLinkToSourceDataSrcSvrVars()
{
VerifyWindowsConvertedFromPortableMatchesExpected(
TestResources.SourceLink.DllAndPdb(portable: true),
@"<?xml version=""1.0"" encoding=""utf-16""?>
<symbols>
<files>
<file id=""1"" name=""C:\Documents.cs"" language=""3f5162f8-07c6-11d3-9053-00c04fa302a1"" languageVendor=""994b45c4-e6e9-11d2-903f-00c04fa302a1"" documentType=""5a869d0b-6611-11d3-bd2a-0000f80849bd"" checkSumAlgorithmId=""ff1816ec-aa5e-4d10-87f7-6f4963833460"" checkSum=""DB, EB, 2A, 6, 7B, 2F, E, D, 67, 8A, 0, 2C, 58, 7A, 28, 6, 5, 6C, 3D, CE, "" />
<file id=""2"" name=""C:\a\b\c\d\1.cs"" language=""3f5162f8-07c6-11d3-9053-00c04fa302a1"" languageVendor=""994b45c4-e6e9-11d2-903f-00c04fa302a1"" documentType=""5a869d0b-6611-11d3-bd2a-0000f80849bd"" />
<file id=""3"" name=""C:\a\b\c\D\2.cs"" language=""3f5162f8-07c6-11d3-9053-00c04fa302a1"" languageVendor=""994b45c4-e6e9-11d2-903f-00c04fa302a1"" documentType=""5a869d0b-6611-11d3-bd2a-0000f80849bd"" />
<file id=""4"" name=""C:\a\b\C\d\3.cs"" language=""3f5162f8-07c6-11d3-9053-00c04fa302a1"" languageVendor=""994b45c4-e6e9-11d2-903f-00c04fa302a1"" documentType=""5a869d0b-6611-11d3-bd2a-0000f80849bd"" />
<file id=""5"" name=""C:\a\b\c\d\x.cs"" language=""3f5162f8-07c6-11d3-9053-00c04fa302a1"" languageVendor=""994b45c4-e6e9-11d2-903f-00c04fa302a1"" documentType=""5a869d0b-6611-11d3-bd2a-0000f80849bd"" />
<file id=""6"" name=""C:\A\b\c\x.cs"" language=""3f5162f8-07c6-11d3-9053-00c04fa302a1"" languageVendor=""994b45c4-e6e9-11d2-903f-00c04fa302a1"" documentType=""5a869d0b-6611-11d3-bd2a-0000f80849bd"" />
<file id=""7"" name=""C:\a\b\x.cs"" language=""3f5162f8-07c6-11d3-9053-00c04fa302a1"" languageVendor=""994b45c4-e6e9-11d2-903f-00c04fa302a1"" documentType=""5a869d0b-6611-11d3-bd2a-0000f80849bd"" />
<file id=""8"" name=""C:\a\B\3.cs"" language=""3f5162f8-07c6-11d3-9053-00c04fa302a1"" languageVendor=""994b45c4-e6e9-11d2-903f-00c04fa302a1"" documentType=""5a869d0b-6611-11d3-bd2a-0000f80849bd"" />
<file id=""9"" name=""C:\a\B\c\4.cs"" language=""3f5162f8-07c6-11d3-9053-00c04fa302a1"" languageVendor=""994b45c4-e6e9-11d2-903f-00c04fa302a1"" documentType=""5a869d0b-6611-11d3-bd2a-0000f80849bd"" />
<file id=""10"" name=""C:\*\5.cs"" language=""3f5162f8-07c6-11d3-9053-00c04fa302a1"" languageVendor=""994b45c4-e6e9-11d2-903f-00c04fa302a1"" documentType=""5a869d0b-6611-11d3-bd2a-0000f80849bd"" />
<file id=""11"" name="":6.cs"" language=""3f5162f8-07c6-11d3-9053-00c04fa302a1"" languageVendor=""994b45c4-e6e9-11d2-903f-00c04fa302a1"" documentType=""5a869d0b-6611-11d3-bd2a-0000f80849bd"" />
<file id=""12"" name=""C:\a\b\X.cs"" language=""3f5162f8-07c6-11d3-9053-00c04fa302a1"" languageVendor=""994b45c4-e6e9-11d2-903f-00c04fa302a1"" documentType=""5a869d0b-6611-11d3-bd2a-0000f80849bd"" />
<file id=""13"" name=""C:\a\B\x.cs"" language=""3f5162f8-07c6-11d3-9053-00c04fa302a1"" languageVendor=""994b45c4-e6e9-11d2-903f-00c04fa302a1"" documentType=""5a869d0b-6611-11d3-bd2a-0000f80849bd"" />
</files>
<methods>
<method containingType=""C"" name=""M"">
<customDebugInfo>
<using>
<namespace usingCount=""1"" />
</using>
</customDebugInfo>
<sequencePoints>
<entry offset=""0x0"" startLine=""7"" startColumn=""5"" endLine=""7"" endColumn=""6"" document=""1"" />
<entry offset=""0x1"" startLine=""10"" startColumn=""9"" endLine=""10"" endColumn=""30"" document=""2"" />
<entry offset=""0x8"" startLine=""20"" startColumn=""9"" endLine=""20"" endColumn=""30"" document=""3"" />
<entry offset=""0xf"" startLine=""30"" startColumn=""9"" endLine=""30"" endColumn=""30"" document=""4"" />
<entry offset=""0x16"" startLine=""40"" startColumn=""9"" endLine=""40"" endColumn=""30"" document=""4"" />
<entry offset=""0x1d"" hidden=""true"" document=""4"" />
<entry offset=""0x23"" startLine=""50"" startColumn=""9"" endLine=""50"" endColumn=""30"" document=""5"" />
<entry offset=""0x2a"" startLine=""60"" startColumn=""9"" endLine=""60"" endColumn=""30"" document=""6"" />
<entry offset=""0x31"" startLine=""70"" startColumn=""9"" endLine=""70"" endColumn=""30"" document=""7"" />
<entry offset=""0x38"" startLine=""80"" startColumn=""9"" endLine=""80"" endColumn=""30"" document=""8"" />
<entry offset=""0x3f"" startLine=""90"" startColumn=""9"" endLine=""90"" endColumn=""30"" document=""9"" />
<entry offset=""0x46"" startLine=""100"" startColumn=""9"" endLine=""100"" endColumn=""30"" document=""10"" />
<entry offset=""0x4d"" startLine=""110"" startColumn=""9"" endLine=""110"" endColumn=""30"" document=""11"" />
<entry offset=""0x54"" startLine=""120"" startColumn=""9"" endLine=""120"" endColumn=""30"" document=""12"" />
<entry offset=""0x5b"" startLine=""130"" startColumn=""9"" endLine=""130"" endColumn=""30"" document=""13"" />
<entry offset=""0x62"" startLine=""131"" startColumn=""5"" endLine=""131"" endColumn=""6"" document=""13"" />
</sequencePoints>
<scope startOffset=""0x0"" endOffset=""0x63"">
<namespace name=""System"" />
</scope>
</method>
</methods>
<srcsvr><![CDATA[SRCSRV: ini ------------------------------------------------
VERSION=2
SRCSRV: variables ------------------------------------------
RAWURL=http://server/%var2%
SRCSRVVERCTRL=http
SRCSRVTRG=%RAWURL%
ABC=*
XYZ=123
SRCSRV: source files ---------------------------------------
C:\Documents.cs*3/Documents.cs.g
C:\a\b\c\d\1.cs*1/a/b/c/d/1.cs
C:\a\b\c\D\2.cs*1/a/b/c/D/2.cs
C:\a\b\C\d\3.cs*1/a/b/C/d/3.cs
C:\a\b\c\d\x.cs*1/a/b/c/d/x.cs
C:\A\b\c\x.cs*1/a/b/c/x.cs
C:\a\b\x.cs*1/a/b/x.cs
C:\a\B\3.cs*1/a/B/3.cs
C:\a\B\c\4.cs*1/a/B/c/4.cs
:6.cs*4/:6.cs
C:\a\b\X.cs*1/a/b/X.cs
C:\a\B\x.cs*1/a/B/x.cs
SRCSRV: end ------------------------------------------------]]></srcsvr>
</symbols>
",
new[]
{
new PdbDiagnostic(PdbDiagnosticId.UnmappedDocumentName, 0, new[] { @"C:\*\5.cs" })
},
new PortablePdbConversionOptions(srcSvrVariables: new[]
{
new KeyValuePair<string, string>("ABC", "*"),
new KeyValuePair<string, string>("XYZ", "123")
}));
}
[Fact]
public void Convert_EmbeddedSource()
{

Просмотреть файл

@ -16,10 +16,10 @@ namespace Microsoft.DiaSymReader.Tools.UnitTests
{
private const PdbToXmlOptions Options = PdbToXmlOptions.IncludeSourceServerInformation | PdbToXmlOptions.IncludeEmbeddedSources | PdbToXmlOptions.ResolveTokens;
public static void VerifyWindowsPdb(TestResource portable, TestResource windows, string expectedXml, PdbDiagnostic[] expectedDiagnostics = null)
public static void VerifyWindowsPdb(TestResource portable, TestResource windows, string expectedXml, PdbDiagnostic[] expectedDiagnostics = null, PortablePdbConversionOptions options = null)
{
VerifyWindowsMatchesExpected(windows, expectedXml);
VerifyWindowsConvertedFromPortableMatchesExpected(portable, expectedXml, expectedDiagnostics);
VerifyWindowsConvertedFromPortableMatchesExpected(portable, expectedXml, expectedDiagnostics, options);
}
private static void VerifyWindowsMatchesExpected(TestResource windows, string expectedXml)
@ -34,7 +34,7 @@ namespace Microsoft.DiaSymReader.Tools.UnitTests
AssertEx.AssertLinesEqual(adjustedExpectedXml, adjustedActualXml, "Comparing Windows PDB with expected XML");
}
private static void VerifyWindowsConvertedFromPortableMatchesExpected(TestResource portable, string expectedXml, PdbDiagnostic[] expectedDiagnostics)
public static void VerifyWindowsConvertedFromPortableMatchesExpected(TestResource portable, string expectedXml, PdbDiagnostic[] expectedDiagnostics, PortablePdbConversionOptions options)
{
var portablePEStream = new MemoryStream(portable.PE);
var portablePdbStream = new MemoryStream(portable.Pdb);
@ -42,7 +42,7 @@ namespace Microsoft.DiaSymReader.Tools.UnitTests
var actualDiagnostics = new List<PdbDiagnostic>();
var converter = new PdbConverter(actualDiagnostics.Add);
converter.ConvertPortableToWindows(portablePEStream, portablePdbStream, convertedWindowsPdbStream);
converter.ConvertPortableToWindows(portablePEStream, portablePdbStream, convertedWindowsPdbStream, options);
AssertEx.Equal(expectedDiagnostics ?? Array.Empty<PdbDiagnostic>(), actualDiagnostics, itemInspector: InspectDiagnostic);

Просмотреть файл

@ -1,10 +1,10 @@
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using Xunit;
using Roslyn.Test.Utilities;
namespace Microsoft.DiaSymReader.Tools.UnitTests
{
using Roslyn.Test.Utilities;
using static PdbValidationMetadata;
public class WindowsToPortableTests

Просмотреть файл

@ -252,4 +252,13 @@
<data name="InvalidJsonDataFormat" xml:space="preserve">
<value>The JSON format is invalid</value>
</data>
<data name="InvalidSrcSvrVariableName" xml:space="preserve">
<value>Invalid srcsvr variable name: '{0}'</value>
</data>
<data name="ReservedSrcSvrVariableName" xml:space="preserve">
<value>Variable '{0}' can't be set explicitly</value>
</data>
<data name="InvalidSrcSvrVariableValue" xml:space="preserve">
<value>Value of srcsvr variable '{0}' contains invalid characters</value>
</data>
</root>

Просмотреть файл

@ -1,15 +0,0 @@
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
namespace Microsoft.DiaSymReader.Tools
{
public enum PdbConversionOptions
{
Default = 0,
/// <summary>
/// When converting to Windows PDB include Source Link data as is,
/// without converting to srcsrv.
/// </summary>
SuppressSourceLinkConversion = 1,
}
}

Просмотреть файл

@ -105,7 +105,7 @@ namespace Microsoft.DiaSymReader.Tools
/// <exception cref="InvalidDataException">The PDB doesn't match the CodeView Debug Directory record in the PE image.</exception>
/// <exception cref="IOException">IO error while reading from or writing to a stream.</exception>
/// <exception cref="ObjectDisposedException">Stream has been disposed while reading/writing.</exception>
public void ConvertPortableToWindows(Stream peStream, Stream sourcePdbStream, Stream targetPdbStream, PdbConversionOptions options = default)
public void ConvertPortableToWindows(Stream peStream, Stream sourcePdbStream, Stream targetPdbStream, PortablePdbConversionOptions options = null)
{
StreamUtilities.ValidateStream(peStream, nameof(peStream), readRequired: true, seekRequired: true);
using (var peReader = new PEReader(peStream, PEStreamOptions.LeaveOpen))
@ -128,7 +128,7 @@ namespace Microsoft.DiaSymReader.Tools
/// <exception cref="InvalidDataException">The PDB doesn't match the CodeView Debug Directory record in the PE image.</exception>
/// <exception cref="IOException">IO error while reading from or writing to a stream.</exception>
/// <exception cref="ObjectDisposedException">Stream has been disposed while reading/writing.</exception>
public void ConvertPortableToWindows(PEReader peReader, Stream sourcePdbStream, Stream targetPdbStream, PdbConversionOptions options = default)
public void ConvertPortableToWindows(PEReader peReader, Stream sourcePdbStream, Stream targetPdbStream, PortablePdbConversionOptions options = null)
{
StreamUtilities.ValidateStream(sourcePdbStream, nameof(sourcePdbStream), readRequired: true);
@ -151,7 +151,7 @@ namespace Microsoft.DiaSymReader.Tools
/// <exception cref="InvalidDataException">The PDB doesn't match the CodeView Debug Directory record in the PE image.</exception>
/// <exception cref="IOException">IO error while reading from or writing to a stream.</exception>
/// <exception cref="ObjectDisposedException">Stream has been disposed while reading/writing.</exception>
public void ConvertPortableToWindows(PEReader peReader, MetadataReader pdbReader, Stream targetPdbStream, PdbConversionOptions options = default)
public void ConvertPortableToWindows(PEReader peReader, MetadataReader pdbReader, Stream targetPdbStream, PortablePdbConversionOptions options = null)
{
if (pdbReader == null)
{
@ -178,13 +178,13 @@ namespace Microsoft.DiaSymReader.Tools
/// <exception cref="BadImageFormatException">The format of the PE image or the source PDB image is invalid.</exception>
/// <exception cref="InvalidDataException">The PDB doesn't match the CodeView Debug Directory record in the PE image.</exception>
/// <exception cref="IOException">IO error while reading from or writing to a stream.</exception>
public void ConvertPortableToWindows(PEReader peReader, MetadataReader pdbReader, SymUnmanagedWriter pdbWriter, PdbConversionOptions options)
public void ConvertPortableToWindows(PEReader peReader, MetadataReader pdbReader, SymUnmanagedWriter pdbWriter, PortablePdbConversionOptions options = null)
{
new PdbConverterPortableToWindows(_diagnosticReporterOpt).Convert(
peReader ?? throw new ArgumentNullException(nameof(peReader)),
peReader ?? throw new ArgumentNullException(nameof(peReader)),
pdbReader ?? throw new ArgumentNullException(nameof(pdbReader)),
pdbWriter ?? throw new ArgumentNullException(nameof(pdbWriter)),
options);
pdbWriter ?? throw new ArgumentNullException(nameof(pdbWriter)),
options ?? PortablePdbConversionOptions.Default);
}
}
}

Просмотреть файл

@ -77,8 +77,13 @@ namespace Microsoft.DiaSymReader.Tools
public bool IsHoistedScope => HoistedVariableStartIndex < HoistedVariableEndIndex;
}
internal void Convert(PEReader peReader, MetadataReader pdbReader, SymUnmanagedWriter pdbWriter, PdbConversionOptions options)
internal void Convert(PEReader peReader, MetadataReader pdbReader, SymUnmanagedWriter pdbWriter, PortablePdbConversionOptions options)
{
Debug.Assert(peReader != null);
Debug.Assert(pdbReader != null);
Debug.Assert(pdbWriter != null);
Debug.Assert(options != null);
if (!SymReaderHelpers.TryReadPdbId(peReader, out var pePdbId, out int peAge))
{
throw new InvalidDataException(ConverterResources.SpecifiedPEFileHasNoAssociatedPdb);
@ -572,13 +577,13 @@ namespace Microsoft.DiaSymReader.Tools
var sourceLinkHandle = pdbReader.GetCustomDebugInformation(EntityHandle.ModuleDefinition, PortableCustomDebugInfoKinds.SourceLink);
if (!sourceLinkHandle.IsNil)
{
if ((options & PdbConversionOptions.SuppressSourceLinkConversion) == 0)
if (options.SuppressSourceLinkConversion)
{
ConvertSourceServerData(pdbReader.GetStringUTF8(sourceLinkHandle), pdbWriter, documentNames);
pdbWriter.SetSourceLinkData(pdbReader.GetBlobBytes(sourceLinkHandle));
}
else
{
pdbWriter.SetSourceLinkData(pdbReader.GetBlobBytes(sourceLinkHandle));
ConvertSourceServerData(pdbReader.GetStringUTF8(sourceLinkHandle), pdbWriter, documentNames, options);
}
}
@ -960,9 +965,13 @@ namespace Microsoft.DiaSymReader.Tools
symSequencePointsWriter.Flush();
}
private const string SrcSvr_RAWURL = "RAWURL";
private const string SrcSvr_SRCSRVVERCTRL = "SRCSRVVERCTRL";
private const string SrcSvr_SRCSRVTRG = "SRCSRVTRG";
// Avoid loading JSON dependency if not needed.
[MethodImpl(MethodImplOptions.NoInlining)]
private void ConvertSourceServerData(string sourceLink, SymUnmanagedWriter pdbWriter, IReadOnlyCollection<string> documentNames)
private void ConvertSourceServerData(string sourceLink, SymUnmanagedWriter pdbWriter, IReadOnlyCollection<string> documentNames, PortablePdbConversionOptions options)
{
if (documentNames.Count == 0)
{
@ -1029,13 +1038,22 @@ namespace Microsoft.DiaSymReader.Tools
builder.Append("SRCSRV: ini ------------------------------------------------\r\n");
builder.Append("VERSION=2\r\n");
builder.Append("SRCSRV: variables ------------------------------------------\r\n");
builder.Append("RAWURL=");
builder.Append(SrcSvr_RAWURL + "=");
builder.Append(commonPrefix);
builder.Append("%var2%\r\n");
builder.Append("SRCSRVVERCTRL=");
builder.Append(SrcSvr_SRCSRVVERCTRL + "=");
builder.Append(commonScheme);
builder.Append("\r\n");
builder.Append("SRCSRVTRG=%RAWURL%\r\n");
builder.Append(SrcSvr_SRCSRVTRG + "=%RAWURL%\r\n");
foreach (var variable in options.SrcSvrVariables)
{
builder.Append(variable.Key);
builder.Append('=');
builder.Append(variable.Value);
builder.Append("\r\n");
}
builder.Append("SRCSRV: source files ---------------------------------------\r\n");
foreach (var (name, uri) in mapping)
@ -1050,5 +1068,39 @@ namespace Microsoft.DiaSymReader.Tools
pdbWriter.SetSourceServerData(Encoding.UTF8.GetBytes(builder.ToString()));
}
private static bool IsIdentifierStartChar(char c)
=> c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z' || c == '_';
private static bool IsIdentifierChar(char c)
=> IsIdentifierStartChar(c) || c >= '0' && c <= '9';
internal static void ValidateSrcSvrVariables(ImmutableArray<KeyValuePair<string, string>> variables, string parameterName)
{
foreach (var variable in variables)
{
ValidateSrcSvrVariable(variable.Key, variable.Value, parameterName);
}
}
internal static void ValidateSrcSvrVariable(string name, string value, string parameterName)
{
if (string.IsNullOrEmpty(name) || !IsIdentifierStartChar(name[0]) || !name.All(IsIdentifierChar))
{
throw new ArgumentException(parameterName, string.Format(ConverterResources.InvalidSrcSvrVariableName, name));
}
if (value == null || value.Any(c => c == '\0' || c == '\r' || c == '\n'))
{
throw new ArgumentException(parameterName, string.Format(ConverterResources.InvalidSrcSvrVariableValue, name));
}
if (name.Equals(SrcSvr_RAWURL, StringComparison.OrdinalIgnoreCase) ||
name.Equals(SrcSvr_SRCSRVTRG, StringComparison.OrdinalIgnoreCase) ||
name.Equals(SrcSvr_SRCSRVVERCTRL, StringComparison.OrdinalIgnoreCase))
{
throw new ArgumentException(parameterName, string.Format(ConverterResources.ReservedSrcSvrVariableName, name));
}
}
}
}

Просмотреть файл

@ -0,0 +1,38 @@
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
namespace Microsoft.DiaSymReader.Tools
{
/// <summary>
/// Portable to Windows PDB conversion options.
/// </summary>
public sealed class PortablePdbConversionOptions
{
public static readonly PortablePdbConversionOptions Default = new PortablePdbConversionOptions();
/// <summary>
/// When converting to Windows PDB include Source Link data as is,
/// without converting to srcsrv.
/// </summary>
public bool SuppressSourceLinkConversion { get; }
/// <summary>
/// Additional variable definitions to add to variable section of the srcsvr stream.
/// </summary>
public ImmutableArray<KeyValuePair<string, string>> SrcSvrVariables { get; }
public PortablePdbConversionOptions(
bool suppressSourceLinkConversion = false,
IEnumerable<KeyValuePair<string, string>> srcSvrVariables = null)
{
var variables = srcSvrVariables?.ToImmutableArray() ?? ImmutableArray<KeyValuePair<string, string>>.Empty;
PdbConverterPortableToWindows.ValidateSrcSvrVariables(variables, nameof(srcSvrVariables));
SuppressSourceLinkConversion = suppressSourceLinkConversion;
SrcSvrVariables = variables;
}
}
}

Просмотреть файл

@ -227,6 +227,21 @@
<target state="new">Invalid Source Link: {0}</target>
<note />
</trans-unit>
<trans-unit id="InvalidSrcSvrVariableName">
<source>Invalid srcsvr variable name: '{0}'</source>
<target state="new">Invalid srcsvr variable name: '{0}'</target>
<note />
</trans-unit>
<trans-unit id="ReservedSrcSvrVariableName">
<source>Variable '{0}' can't be set explicitly</source>
<target state="new">Variable '{0}' can't be set explicitly</target>
<note />
</trans-unit>
<trans-unit id="InvalidSrcSvrVariableValue">
<source>Value of srcsvr variable '{0}' contains invalid characters</source>
<target state="new">Value of srcsvr variable '{0}' contains invalid characters</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

Просмотреть файл

@ -227,6 +227,21 @@
<target state="new">Invalid Source Link: {0}</target>
<note />
</trans-unit>
<trans-unit id="InvalidSrcSvrVariableName">
<source>Invalid srcsvr variable name: '{0}'</source>
<target state="new">Invalid srcsvr variable name: '{0}'</target>
<note />
</trans-unit>
<trans-unit id="ReservedSrcSvrVariableName">
<source>Variable '{0}' can't be set explicitly</source>
<target state="new">Variable '{0}' can't be set explicitly</target>
<note />
</trans-unit>
<trans-unit id="InvalidSrcSvrVariableValue">
<source>Value of srcsvr variable '{0}' contains invalid characters</source>
<target state="new">Value of srcsvr variable '{0}' contains invalid characters</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

Просмотреть файл

@ -227,6 +227,21 @@
<target state="new">Invalid Source Link: {0}</target>
<note />
</trans-unit>
<trans-unit id="InvalidSrcSvrVariableName">
<source>Invalid srcsvr variable name: '{0}'</source>
<target state="new">Invalid srcsvr variable name: '{0}'</target>
<note />
</trans-unit>
<trans-unit id="ReservedSrcSvrVariableName">
<source>Variable '{0}' can't be set explicitly</source>
<target state="new">Variable '{0}' can't be set explicitly</target>
<note />
</trans-unit>
<trans-unit id="InvalidSrcSvrVariableValue">
<source>Value of srcsvr variable '{0}' contains invalid characters</source>
<target state="new">Value of srcsvr variable '{0}' contains invalid characters</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

Просмотреть файл

@ -227,6 +227,21 @@
<target state="new">Invalid Source Link: {0}</target>
<note />
</trans-unit>
<trans-unit id="InvalidSrcSvrVariableName">
<source>Invalid srcsvr variable name: '{0}'</source>
<target state="new">Invalid srcsvr variable name: '{0}'</target>
<note />
</trans-unit>
<trans-unit id="ReservedSrcSvrVariableName">
<source>Variable '{0}' can't be set explicitly</source>
<target state="new">Variable '{0}' can't be set explicitly</target>
<note />
</trans-unit>
<trans-unit id="InvalidSrcSvrVariableValue">
<source>Value of srcsvr variable '{0}' contains invalid characters</source>
<target state="new">Value of srcsvr variable '{0}' contains invalid characters</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

Просмотреть файл

@ -227,6 +227,21 @@
<target state="new">Invalid Source Link: {0}</target>
<note />
</trans-unit>
<trans-unit id="InvalidSrcSvrVariableName">
<source>Invalid srcsvr variable name: '{0}'</source>
<target state="new">Invalid srcsvr variable name: '{0}'</target>
<note />
</trans-unit>
<trans-unit id="ReservedSrcSvrVariableName">
<source>Variable '{0}' can't be set explicitly</source>
<target state="new">Variable '{0}' can't be set explicitly</target>
<note />
</trans-unit>
<trans-unit id="InvalidSrcSvrVariableValue">
<source>Value of srcsvr variable '{0}' contains invalid characters</source>
<target state="new">Value of srcsvr variable '{0}' contains invalid characters</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

Просмотреть файл

@ -227,6 +227,21 @@
<target state="new">Invalid Source Link: {0}</target>
<note />
</trans-unit>
<trans-unit id="InvalidSrcSvrVariableName">
<source>Invalid srcsvr variable name: '{0}'</source>
<target state="new">Invalid srcsvr variable name: '{0}'</target>
<note />
</trans-unit>
<trans-unit id="ReservedSrcSvrVariableName">
<source>Variable '{0}' can't be set explicitly</source>
<target state="new">Variable '{0}' can't be set explicitly</target>
<note />
</trans-unit>
<trans-unit id="InvalidSrcSvrVariableValue">
<source>Value of srcsvr variable '{0}' contains invalid characters</source>
<target state="new">Value of srcsvr variable '{0}' contains invalid characters</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

Просмотреть файл

@ -227,6 +227,21 @@
<target state="new">Invalid Source Link: {0}</target>
<note />
</trans-unit>
<trans-unit id="InvalidSrcSvrVariableName">
<source>Invalid srcsvr variable name: '{0}'</source>
<target state="new">Invalid srcsvr variable name: '{0}'</target>
<note />
</trans-unit>
<trans-unit id="ReservedSrcSvrVariableName">
<source>Variable '{0}' can't be set explicitly</source>
<target state="new">Variable '{0}' can't be set explicitly</target>
<note />
</trans-unit>
<trans-unit id="InvalidSrcSvrVariableValue">
<source>Value of srcsvr variable '{0}' contains invalid characters</source>
<target state="new">Value of srcsvr variable '{0}' contains invalid characters</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

Просмотреть файл

@ -227,6 +227,21 @@
<target state="new">Invalid Source Link: {0}</target>
<note />
</trans-unit>
<trans-unit id="InvalidSrcSvrVariableName">
<source>Invalid srcsvr variable name: '{0}'</source>
<target state="new">Invalid srcsvr variable name: '{0}'</target>
<note />
</trans-unit>
<trans-unit id="ReservedSrcSvrVariableName">
<source>Variable '{0}' can't be set explicitly</source>
<target state="new">Variable '{0}' can't be set explicitly</target>
<note />
</trans-unit>
<trans-unit id="InvalidSrcSvrVariableValue">
<source>Value of srcsvr variable '{0}' contains invalid characters</source>
<target state="new">Value of srcsvr variable '{0}' contains invalid characters</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

Просмотреть файл

@ -227,6 +227,21 @@
<target state="new">Invalid Source Link: {0}</target>
<note />
</trans-unit>
<trans-unit id="InvalidSrcSvrVariableName">
<source>Invalid srcsvr variable name: '{0}'</source>
<target state="new">Invalid srcsvr variable name: '{0}'</target>
<note />
</trans-unit>
<trans-unit id="ReservedSrcSvrVariableName">
<source>Variable '{0}' can't be set explicitly</source>
<target state="new">Variable '{0}' can't be set explicitly</target>
<note />
</trans-unit>
<trans-unit id="InvalidSrcSvrVariableValue">
<source>Value of srcsvr variable '{0}' contains invalid characters</source>
<target state="new">Value of srcsvr variable '{0}' contains invalid characters</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

Просмотреть файл

@ -227,6 +227,21 @@
<target state="new">Invalid Source Link: {0}</target>
<note />
</trans-unit>
<trans-unit id="InvalidSrcSvrVariableName">
<source>Invalid srcsvr variable name: '{0}'</source>
<target state="new">Invalid srcsvr variable name: '{0}'</target>
<note />
</trans-unit>
<trans-unit id="ReservedSrcSvrVariableName">
<source>Variable '{0}' can't be set explicitly</source>
<target state="new">Variable '{0}' can't be set explicitly</target>
<note />
</trans-unit>
<trans-unit id="InvalidSrcSvrVariableValue">
<source>Value of srcsvr variable '{0}' contains invalid characters</source>
<target state="new">Value of srcsvr variable '{0}' contains invalid characters</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

Просмотреть файл

@ -227,6 +227,21 @@
<target state="new">Invalid Source Link: {0}</target>
<note />
</trans-unit>
<trans-unit id="InvalidSrcSvrVariableName">
<source>Invalid srcsvr variable name: '{0}'</source>
<target state="new">Invalid srcsvr variable name: '{0}'</target>
<note />
</trans-unit>
<trans-unit id="ReservedSrcSvrVariableName">
<source>Variable '{0}' can't be set explicitly</source>
<target state="new">Variable '{0}' can't be set explicitly</target>
<note />
</trans-unit>
<trans-unit id="InvalidSrcSvrVariableValue">
<source>Value of srcsvr variable '{0}' contains invalid characters</source>
<target state="new">Value of srcsvr variable '{0}' contains invalid characters</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

Просмотреть файл

@ -227,6 +227,21 @@
<target state="new">Invalid Source Link: {0}</target>
<note />
</trans-unit>
<trans-unit id="InvalidSrcSvrVariableName">
<source>Invalid srcsvr variable name: '{0}'</source>
<target state="new">Invalid srcsvr variable name: '{0}'</target>
<note />
</trans-unit>
<trans-unit id="ReservedSrcSvrVariableName">
<source>Variable '{0}' can't be set explicitly</source>
<target state="new">Variable '{0}' can't be set explicitly</target>
<note />
</trans-unit>
<trans-unit id="InvalidSrcSvrVariableValue">
<source>Value of srcsvr variable '{0}' contains invalid characters</source>
<target state="new">Value of srcsvr variable '{0}' contains invalid characters</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

Просмотреть файл

@ -227,6 +227,21 @@
<target state="new">Invalid Source Link: {0}</target>
<note />
</trans-unit>
<trans-unit id="InvalidSrcSvrVariableName">
<source>Invalid srcsvr variable name: '{0}'</source>
<target state="new">Invalid srcsvr variable name: '{0}'</target>
<note />
</trans-unit>
<trans-unit id="ReservedSrcSvrVariableName">
<source>Variable '{0}' can't be set explicitly</source>
<target state="new">Variable '{0}' can't be set explicitly</target>
<note />
</trans-unit>
<trans-unit id="InvalidSrcSvrVariableValue">
<source>Value of srcsvr variable '{0}' contains invalid characters</source>
<target state="new">Value of srcsvr variable '{0}' contains invalid characters</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

Просмотреть файл

@ -1,6 +1,7 @@
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection.Metadata;
@ -27,6 +28,9 @@ namespace Microsoft.DiaSymReader.Tools.UnitTests
Assert.Throws<InvalidDataException>(() => Pdb2Pdb.ParseArgs(new[] { "a.dll", "/extract", "/sourcelink" }));
Assert.Throws<InvalidDataException>(() => Pdb2Pdb.ParseArgs(new[] { "a.dll", "/extract", "/pdb", "a.pdb" }));
Assert.Throws<InvalidDataException>(() => Pdb2Pdb.ParseArgs(new[] { ">:<.dll" }));
Assert.Throws<InvalidDataException>(() => Pdb2Pdb.ParseArgs(new[] { "a.dll", "/sorucelink", "/srcsvrvar", "x=y" }));
Assert.Throws<InvalidDataException>(() => Pdb2Pdb.ParseArgs(new[] { "a.dll", "/srcsvrvar" }));
Assert.Throws<InvalidDataException>(() => Pdb2Pdb.ParseArgs(new[] { "a.dll", "/srcsvrvar", "0=y" }));
}
[Fact]
@ -38,7 +42,8 @@ namespace Microsoft.DiaSymReader.Tools.UnitTests
Assert.Equal("a.pdb2", args.OutPdbFilePathOpt);
Assert.False(args.Extract);
Assert.False(args.Verbose);
Assert.Equal(PdbConversionOptions.Default, args.Options);
Assert.False(args.Options.SuppressSourceLinkConversion);
Assert.Empty(args.Options.SrcSvrVariables);
args = Pdb2Pdb.ParseArgs(new[] { "a.dll", "/extract" });
Assert.Equal("a.dll", args.PEFilePath);
@ -46,7 +51,8 @@ namespace Microsoft.DiaSymReader.Tools.UnitTests
Assert.Null(args.OutPdbFilePathOpt);
Assert.True(args.Extract);
Assert.False(args.Verbose);
Assert.Equal(PdbConversionOptions.Default, args.Options);
Assert.False(args.Options.SuppressSourceLinkConversion);
Assert.Empty(args.Options.SrcSvrVariables);
args = Pdb2Pdb.ParseArgs(new[] { "a.dll", "/extract", "/out", "b.pdb" });
Assert.Equal("a.dll", args.PEFilePath);
@ -54,7 +60,8 @@ namespace Microsoft.DiaSymReader.Tools.UnitTests
Assert.Equal("b.pdb", args.OutPdbFilePathOpt);
Assert.True(args.Extract);
Assert.False(args.Verbose);
Assert.Equal(PdbConversionOptions.Default, args.Options);
Assert.False(args.Options.SuppressSourceLinkConversion);
Assert.Empty(args.Options.SrcSvrVariables);
args = Pdb2Pdb.ParseArgs(new[] { "a.dll", "/sourcelink", "/pdb", "b.pdb", "/out", "c.pdb" });
Assert.Equal("a.dll", args.PEFilePath);
@ -62,7 +69,8 @@ namespace Microsoft.DiaSymReader.Tools.UnitTests
Assert.Equal("c.pdb", args.OutPdbFilePathOpt);
Assert.False(args.Extract);
Assert.False(args.Verbose);
Assert.Equal(PdbConversionOptions.SuppressSourceLinkConversion, args.Options);
Assert.True(args.Options.SuppressSourceLinkConversion);
Assert.Empty(args.Options.SrcSvrVariables);
args = Pdb2Pdb.ParseArgs(new[] { "a.dll", "/out", "c.pdb", "/verbose" });
Assert.Equal("a.dll", args.PEFilePath);
@ -70,7 +78,17 @@ namespace Microsoft.DiaSymReader.Tools.UnitTests
Assert.Equal("c.pdb", args.OutPdbFilePathOpt);
Assert.False(args.Extract);
Assert.True(args.Verbose);
Assert.Equal(PdbConversionOptions.Default, args.Options);
Assert.False(args.Options.SuppressSourceLinkConversion);
Assert.Empty(args.Options.SrcSvrVariables);
args = Pdb2Pdb.ParseArgs(new[] { "a.dll", "/out", "c.pdb", "/verbose", "/srcsvrvar", "a=b", "/srcsvrvar", "c=d" });
Assert.Equal("a.dll", args.PEFilePath);
Assert.Null(args.PdbFilePathOpt);
Assert.Equal("c.pdb", args.OutPdbFilePathOpt);
Assert.False(args.Extract);
Assert.True(args.Verbose);
Assert.False(args.Options.SuppressSourceLinkConversion);
Assert.Equal(new[] { new KeyValuePair<string, string>("a", "b"), new KeyValuePair<string, string>("c", "d") }, args.Options.SrcSvrVariables);
}
[Fact]
@ -85,7 +103,7 @@ namespace Microsoft.DiaSymReader.Tools.UnitTests
peFilePath: pe.Path,
pdbFilePathOpt: pdb.Path,
outPdbFilePathOpt: outPdbPath,
options: PdbConversionOptions.Default,
options: PortablePdbConversionOptions.Default,
extract: false,
verbose: false)));
@ -132,7 +150,7 @@ SRCSRV: end ------------------------------------------------", actual);
peFilePath: pe.Path,
pdbFilePathOpt: null,
outPdbFilePathOpt: outPdb.Path,
options: PdbConversionOptions.SuppressSourceLinkConversion,
options: new PortablePdbConversionOptions(suppressSourceLinkConversion: true),
extract: false,
verbose: false)));
@ -156,7 +174,7 @@ SRCSRV: end ------------------------------------------------", actual);
peFilePath: pe.Path,
pdbFilePathOpt: null,
outPdbFilePathOpt: outPdb.Path,
options: PdbConversionOptions.SuppressSourceLinkConversion,
options: new PortablePdbConversionOptions(suppressSourceLinkConversion: true),
extract: false,
verbose: false)));
@ -180,7 +198,7 @@ SRCSRV: end ------------------------------------------------", actual);
peFilePath: pe.Path,
pdbFilePathOpt: null,
outPdbFilePathOpt: null,
options: PdbConversionOptions.Default,
options: PortablePdbConversionOptions.Default,
extract: true,
verbose: false)));
@ -198,7 +216,7 @@ SRCSRV: end ------------------------------------------------", actual);
peFilePath: pe.Path,
pdbFilePathOpt: null,
outPdbFilePathOpt: outPdb.Path,
options: PdbConversionOptions.Default,
options: PortablePdbConversionOptions.Default,
extract: true,
verbose: false)));
@ -218,7 +236,7 @@ SRCSRV: end ------------------------------------------------", actual);
peFilePath: pe.Path,
pdbFilePathOpt: null,
outPdbFilePathOpt: outPdb.Path,
options: PdbConversionOptions.Default,
options: PortablePdbConversionOptions.Default,
extract: true,
verbose: false)));
@ -237,7 +255,7 @@ SRCSRV: end ------------------------------------------------", actual);
peFilePath: pe.Path,
pdbFilePathOpt: null,
outPdbFilePathOpt: outPdb.Path,
options: PdbConversionOptions.Default,
options: PortablePdbConversionOptions.Default,
extract: false,
verbose: false)));

Просмотреть файл

@ -1,6 +1,7 @@
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
@ -18,12 +19,14 @@ namespace Microsoft.DiaSymReader.Tools
public readonly string PEFilePath;
public readonly string PdbFilePathOpt;
public readonly string OutPdbFilePathOpt;
public readonly PdbConversionOptions Options;
public readonly PortablePdbConversionOptions Options;
public readonly bool Extract;
public readonly bool Verbose;
public Args(string peFilePath, string pdbFilePathOpt, string outPdbFilePathOpt, PdbConversionOptions options, bool extract, bool verbose)
public Args(string peFilePath, string pdbFilePathOpt, string outPdbFilePathOpt, PortablePdbConversionOptions options, bool extract, bool verbose)
{
Debug.Assert(options != null);
PEFilePath = peFilePath;
PdbFilePathOpt = pdbFilePathOpt;
OutPdbFilePathOpt = outPdbFilePathOpt;
@ -68,6 +71,7 @@ namespace Microsoft.DiaSymReader.Tools
bool verbose = false;
string inPdb = null;
string outPdb = null;
var srcSvrVariables = new List<KeyValuePair<string, string>>();
int i = 0;
while (i < args.Length)
@ -98,6 +102,11 @@ namespace Microsoft.DiaSymReader.Tools
outPdb = ReadValue();
break;
case "/srcsvrvar":
case "/srcsvrvariable":
srcSvrVariables.Add(ParseSrcSvrVariable(ReadValue()));
break;
default:
if (peFile == null)
{
@ -140,15 +149,37 @@ namespace Microsoft.DiaSymReader.Tools
throw new InvalidDataException(Resources.CantSpecifyBothExtractAndPdbOptions);
}
var options = default(PdbConversionOptions);
if (sourceLink)
if (sourceLink && srcSvrVariables.Count > 0)
{
options |= PdbConversionOptions.SuppressSourceLinkConversion;
throw new InvalidDataException(Resources.CantSpecifyBothSrcSvrVariableAndSourcelinkOptions);
}
PortablePdbConversionOptions options;
try
{
options = new PortablePdbConversionOptions(
suppressSourceLinkConversion: sourceLink,
srcSvrVariables: srcSvrVariables);
}
catch (ArgumentException e)
{
throw new InvalidDataException(e.Message);
}
return new Args(peFile, inPdb, outPdb, options, extract, verbose);
}
private static KeyValuePair<string, string> ParseSrcSvrVariable(string value)
{
int eq = value.IndexOf('=');
if (eq < 0)
{
return default;
}
return new KeyValuePair<string, string>(value.Substring(0, eq), value.Substring(eq + 1));
}
// internal for testing
internal static bool Convert(Args args)
{

Просмотреть файл

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>Pdb2Pdb</id>
<id>Microsoft.DiaSymReader.Pdb2Pdb</id>
<version>$version$</version>
<authors>Microsoft</authors>
<owners>Microsoft</owners>

Просмотреть файл

@ -123,6 +123,9 @@
<data name="CantSpecifyBothExtractAndSourcelinkOptions" xml:space="preserve">
<value>Can't specify both /extract and /sourcelink options.</value>
</data>
<data name="CantSpecifyBothSrcSvrVariableAndSourcelinkOptions" xml:space="preserve">
<value>Can't specify both /srcsvrvar and /sourcelink options.</value>
</data>
<data name="FileDoesntContainEmbeddedPdb" xml:space="preserve">
<value>File '{0}' doesn't contain an embedded PDB.</value>
</data>
@ -153,11 +156,16 @@
<data name="Pdb2PdbUsage" xml:space="preserve">
<value><![CDATA[Usage: Pdb2Pdb <dll/exe path> [/pdb <path>] [/out <path>] [/extract]
/pdb <path> Path to the PDB to convert. If not specified explicitly, the PDB referenced by or embedded in the DLL/EXE is used.
/out <path> Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/pdb <path> Path to the PDB to convert. If not specified explicitly,
the PDB referenced by or embedded in the DLL/EXE is used.
/out <path> Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to
Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/srcsvrvar <name>=<value> Add specified variable to srcsvr stream. Only applicable
when converting to Windows PDB and /sourcelink is not
specified.
/extract and /pdb are mutually exclusive.
]]></value>

Просмотреть файл

@ -55,21 +55,31 @@
<trans-unit id="Pdb2PdbUsage">
<source>Usage: Pdb2Pdb &lt;dll/exe path&gt; [/pdb &lt;path&gt;] [/out &lt;path&gt;] [/extract]
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly, the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly,
the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to
Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/srcsvrvar &lt;name&gt;=&lt;value&gt; Add specified variable to srcsvr stream. Only applicable
when converting to Windows PDB and /sourcelink is not
specified.
/extract and /pdb are mutually exclusive.
</source>
<target state="new">Usage: Pdb2Pdb &lt;dll/exe path&gt; [/pdb &lt;path&gt;] [/out &lt;path&gt;] [/extract]
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly, the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly,
the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to
Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/srcsvrvar &lt;name&gt;=&lt;value&gt; Add specified variable to srcsvr stream. Only applicable
when converting to Windows PDB and /sourcelink is not
specified.
/extract and /pdb are mutually exclusive.
</target>
@ -80,6 +90,11 @@
<target state="new">Invalid PDB path in Debug Directory (file '{0}').</target>
<note />
</trans-unit>
<trans-unit id="CantSpecifyBothSrcSvrVariableAndSourcelinkOptions">
<source>Can't specify both /srcsvrvar and /sourcelink options.</source>
<target state="new">Can't specify both /srcsvrvar and /sourcelink options.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

Просмотреть файл

@ -55,21 +55,31 @@
<trans-unit id="Pdb2PdbUsage">
<source>Usage: Pdb2Pdb &lt;dll/exe path&gt; [/pdb &lt;path&gt;] [/out &lt;path&gt;] [/extract]
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly, the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly,
the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to
Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/srcsvrvar &lt;name&gt;=&lt;value&gt; Add specified variable to srcsvr stream. Only applicable
when converting to Windows PDB and /sourcelink is not
specified.
/extract and /pdb are mutually exclusive.
</source>
<target state="new">Usage: Pdb2Pdb &lt;dll/exe path&gt; [/pdb &lt;path&gt;] [/out &lt;path&gt;] [/extract]
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly, the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly,
the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to
Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/srcsvrvar &lt;name&gt;=&lt;value&gt; Add specified variable to srcsvr stream. Only applicable
when converting to Windows PDB and /sourcelink is not
specified.
/extract and /pdb are mutually exclusive.
</target>
@ -80,6 +90,11 @@
<target state="new">Invalid PDB path in Debug Directory (file '{0}').</target>
<note />
</trans-unit>
<trans-unit id="CantSpecifyBothSrcSvrVariableAndSourcelinkOptions">
<source>Can't specify both /srcsvrvar and /sourcelink options.</source>
<target state="new">Can't specify both /srcsvrvar and /sourcelink options.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

Просмотреть файл

@ -55,21 +55,31 @@
<trans-unit id="Pdb2PdbUsage">
<source>Usage: Pdb2Pdb &lt;dll/exe path&gt; [/pdb &lt;path&gt;] [/out &lt;path&gt;] [/extract]
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly, the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly,
the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to
Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/srcsvrvar &lt;name&gt;=&lt;value&gt; Add specified variable to srcsvr stream. Only applicable
when converting to Windows PDB and /sourcelink is not
specified.
/extract and /pdb are mutually exclusive.
</source>
<target state="new">Usage: Pdb2Pdb &lt;dll/exe path&gt; [/pdb &lt;path&gt;] [/out &lt;path&gt;] [/extract]
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly, the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly,
the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to
Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/srcsvrvar &lt;name&gt;=&lt;value&gt; Add specified variable to srcsvr stream. Only applicable
when converting to Windows PDB and /sourcelink is not
specified.
/extract and /pdb are mutually exclusive.
</target>
@ -80,6 +90,11 @@
<target state="new">Invalid PDB path in Debug Directory (file '{0}').</target>
<note />
</trans-unit>
<trans-unit id="CantSpecifyBothSrcSvrVariableAndSourcelinkOptions">
<source>Can't specify both /srcsvrvar and /sourcelink options.</source>
<target state="new">Can't specify both /srcsvrvar and /sourcelink options.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

Просмотреть файл

@ -55,21 +55,31 @@
<trans-unit id="Pdb2PdbUsage">
<source>Usage: Pdb2Pdb &lt;dll/exe path&gt; [/pdb &lt;path&gt;] [/out &lt;path&gt;] [/extract]
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly, the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly,
the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to
Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/srcsvrvar &lt;name&gt;=&lt;value&gt; Add specified variable to srcsvr stream. Only applicable
when converting to Windows PDB and /sourcelink is not
specified.
/extract and /pdb are mutually exclusive.
</source>
<target state="new">Usage: Pdb2Pdb &lt;dll/exe path&gt; [/pdb &lt;path&gt;] [/out &lt;path&gt;] [/extract]
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly, the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly,
the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to
Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/srcsvrvar &lt;name&gt;=&lt;value&gt; Add specified variable to srcsvr stream. Only applicable
when converting to Windows PDB and /sourcelink is not
specified.
/extract and /pdb are mutually exclusive.
</target>
@ -80,6 +90,11 @@
<target state="new">Invalid PDB path in Debug Directory (file '{0}').</target>
<note />
</trans-unit>
<trans-unit id="CantSpecifyBothSrcSvrVariableAndSourcelinkOptions">
<source>Can't specify both /srcsvrvar and /sourcelink options.</source>
<target state="new">Can't specify both /srcsvrvar and /sourcelink options.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

Просмотреть файл

@ -55,21 +55,31 @@
<trans-unit id="Pdb2PdbUsage">
<source>Usage: Pdb2Pdb &lt;dll/exe path&gt; [/pdb &lt;path&gt;] [/out &lt;path&gt;] [/extract]
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly, the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly,
the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to
Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/srcsvrvar &lt;name&gt;=&lt;value&gt; Add specified variable to srcsvr stream. Only applicable
when converting to Windows PDB and /sourcelink is not
specified.
/extract and /pdb are mutually exclusive.
</source>
<target state="new">Usage: Pdb2Pdb &lt;dll/exe path&gt; [/pdb &lt;path&gt;] [/out &lt;path&gt;] [/extract]
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly, the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly,
the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to
Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/srcsvrvar &lt;name&gt;=&lt;value&gt; Add specified variable to srcsvr stream. Only applicable
when converting to Windows PDB and /sourcelink is not
specified.
/extract and /pdb are mutually exclusive.
</target>
@ -80,6 +90,11 @@
<target state="new">Invalid PDB path in Debug Directory (file '{0}').</target>
<note />
</trans-unit>
<trans-unit id="CantSpecifyBothSrcSvrVariableAndSourcelinkOptions">
<source>Can't specify both /srcsvrvar and /sourcelink options.</source>
<target state="new">Can't specify both /srcsvrvar and /sourcelink options.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

Просмотреть файл

@ -55,21 +55,31 @@
<trans-unit id="Pdb2PdbUsage">
<source>Usage: Pdb2Pdb &lt;dll/exe path&gt; [/pdb &lt;path&gt;] [/out &lt;path&gt;] [/extract]
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly, the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly,
the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to
Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/srcsvrvar &lt;name&gt;=&lt;value&gt; Add specified variable to srcsvr stream. Only applicable
when converting to Windows PDB and /sourcelink is not
specified.
/extract and /pdb are mutually exclusive.
</source>
<target state="new">Usage: Pdb2Pdb &lt;dll/exe path&gt; [/pdb &lt;path&gt;] [/out &lt;path&gt;] [/extract]
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly, the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly,
the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to
Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/srcsvrvar &lt;name&gt;=&lt;value&gt; Add specified variable to srcsvr stream. Only applicable
when converting to Windows PDB and /sourcelink is not
specified.
/extract and /pdb are mutually exclusive.
</target>
@ -80,6 +90,11 @@
<target state="new">Invalid PDB path in Debug Directory (file '{0}').</target>
<note />
</trans-unit>
<trans-unit id="CantSpecifyBothSrcSvrVariableAndSourcelinkOptions">
<source>Can't specify both /srcsvrvar and /sourcelink options.</source>
<target state="new">Can't specify both /srcsvrvar and /sourcelink options.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

Просмотреть файл

@ -55,21 +55,31 @@
<trans-unit id="Pdb2PdbUsage">
<source>Usage: Pdb2Pdb &lt;dll/exe path&gt; [/pdb &lt;path&gt;] [/out &lt;path&gt;] [/extract]
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly, the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly,
the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to
Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/srcsvrvar &lt;name&gt;=&lt;value&gt; Add specified variable to srcsvr stream. Only applicable
when converting to Windows PDB and /sourcelink is not
specified.
/extract and /pdb are mutually exclusive.
</source>
<target state="new">Usage: Pdb2Pdb &lt;dll/exe path&gt; [/pdb &lt;path&gt;] [/out &lt;path&gt;] [/extract]
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly, the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly,
the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to
Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/srcsvrvar &lt;name&gt;=&lt;value&gt; Add specified variable to srcsvr stream. Only applicable
when converting to Windows PDB and /sourcelink is not
specified.
/extract and /pdb are mutually exclusive.
</target>
@ -80,6 +90,11 @@
<target state="new">Invalid PDB path in Debug Directory (file '{0}').</target>
<note />
</trans-unit>
<trans-unit id="CantSpecifyBothSrcSvrVariableAndSourcelinkOptions">
<source>Can't specify both /srcsvrvar and /sourcelink options.</source>
<target state="new">Can't specify both /srcsvrvar and /sourcelink options.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

Просмотреть файл

@ -55,21 +55,31 @@
<trans-unit id="Pdb2PdbUsage">
<source>Usage: Pdb2Pdb &lt;dll/exe path&gt; [/pdb &lt;path&gt;] [/out &lt;path&gt;] [/extract]
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly, the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly,
the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to
Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/srcsvrvar &lt;name&gt;=&lt;value&gt; Add specified variable to srcsvr stream. Only applicable
when converting to Windows PDB and /sourcelink is not
specified.
/extract and /pdb are mutually exclusive.
</source>
<target state="new">Usage: Pdb2Pdb &lt;dll/exe path&gt; [/pdb &lt;path&gt;] [/out &lt;path&gt;] [/extract]
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly, the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly,
the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to
Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/srcsvrvar &lt;name&gt;=&lt;value&gt; Add specified variable to srcsvr stream. Only applicable
when converting to Windows PDB and /sourcelink is not
specified.
/extract and /pdb are mutually exclusive.
</target>
@ -80,6 +90,11 @@
<target state="new">Invalid PDB path in Debug Directory (file '{0}').</target>
<note />
</trans-unit>
<trans-unit id="CantSpecifyBothSrcSvrVariableAndSourcelinkOptions">
<source>Can't specify both /srcsvrvar and /sourcelink options.</source>
<target state="new">Can't specify both /srcsvrvar and /sourcelink options.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

Просмотреть файл

@ -55,21 +55,31 @@
<trans-unit id="Pdb2PdbUsage">
<source>Usage: Pdb2Pdb &lt;dll/exe path&gt; [/pdb &lt;path&gt;] [/out &lt;path&gt;] [/extract]
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly, the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly,
the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to
Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/srcsvrvar &lt;name&gt;=&lt;value&gt; Add specified variable to srcsvr stream. Only applicable
when converting to Windows PDB and /sourcelink is not
specified.
/extract and /pdb are mutually exclusive.
</source>
<target state="new">Usage: Pdb2Pdb &lt;dll/exe path&gt; [/pdb &lt;path&gt;] [/out &lt;path&gt;] [/extract]
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly, the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly,
the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to
Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/srcsvrvar &lt;name&gt;=&lt;value&gt; Add specified variable to srcsvr stream. Only applicable
when converting to Windows PDB and /sourcelink is not
specified.
/extract and /pdb are mutually exclusive.
</target>
@ -80,6 +90,11 @@
<target state="new">Invalid PDB path in Debug Directory (file '{0}').</target>
<note />
</trans-unit>
<trans-unit id="CantSpecifyBothSrcSvrVariableAndSourcelinkOptions">
<source>Can't specify both /srcsvrvar and /sourcelink options.</source>
<target state="new">Can't specify both /srcsvrvar and /sourcelink options.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

Просмотреть файл

@ -55,21 +55,31 @@
<trans-unit id="Pdb2PdbUsage">
<source>Usage: Pdb2Pdb &lt;dll/exe path&gt; [/pdb &lt;path&gt;] [/out &lt;path&gt;] [/extract]
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly, the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly,
the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to
Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/srcsvrvar &lt;name&gt;=&lt;value&gt; Add specified variable to srcsvr stream. Only applicable
when converting to Windows PDB and /sourcelink is not
specified.
/extract and /pdb are mutually exclusive.
</source>
<target state="new">Usage: Pdb2Pdb &lt;dll/exe path&gt; [/pdb &lt;path&gt;] [/out &lt;path&gt;] [/extract]
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly, the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly,
the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to
Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/srcsvrvar &lt;name&gt;=&lt;value&gt; Add specified variable to srcsvr stream. Only applicable
when converting to Windows PDB and /sourcelink is not
specified.
/extract and /pdb are mutually exclusive.
</target>
@ -80,6 +90,11 @@
<target state="new">Invalid PDB path in Debug Directory (file '{0}').</target>
<note />
</trans-unit>
<trans-unit id="CantSpecifyBothSrcSvrVariableAndSourcelinkOptions">
<source>Can't specify both /srcsvrvar and /sourcelink options.</source>
<target state="new">Can't specify both /srcsvrvar and /sourcelink options.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

Просмотреть файл

@ -55,21 +55,31 @@
<trans-unit id="Pdb2PdbUsage">
<source>Usage: Pdb2Pdb &lt;dll/exe path&gt; [/pdb &lt;path&gt;] [/out &lt;path&gt;] [/extract]
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly, the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly,
the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to
Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/srcsvrvar &lt;name&gt;=&lt;value&gt; Add specified variable to srcsvr stream. Only applicable
when converting to Windows PDB and /sourcelink is not
specified.
/extract and /pdb are mutually exclusive.
</source>
<target state="new">Usage: Pdb2Pdb &lt;dll/exe path&gt; [/pdb &lt;path&gt;] [/out &lt;path&gt;] [/extract]
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly, the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly,
the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to
Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/srcsvrvar &lt;name&gt;=&lt;value&gt; Add specified variable to srcsvr stream. Only applicable
when converting to Windows PDB and /sourcelink is not
specified.
/extract and /pdb are mutually exclusive.
</target>
@ -80,6 +90,11 @@
<target state="new">Invalid PDB path in Debug Directory (file '{0}').</target>
<note />
</trans-unit>
<trans-unit id="CantSpecifyBothSrcSvrVariableAndSourcelinkOptions">
<source>Can't specify both /srcsvrvar and /sourcelink options.</source>
<target state="new">Can't specify both /srcsvrvar and /sourcelink options.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

Просмотреть файл

@ -55,21 +55,31 @@
<trans-unit id="Pdb2PdbUsage">
<source>Usage: Pdb2Pdb &lt;dll/exe path&gt; [/pdb &lt;path&gt;] [/out &lt;path&gt;] [/extract]
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly, the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly,
the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to
Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/srcsvrvar &lt;name&gt;=&lt;value&gt; Add specified variable to srcsvr stream. Only applicable
when converting to Windows PDB and /sourcelink is not
specified.
/extract and /pdb are mutually exclusive.
</source>
<target state="new">Usage: Pdb2Pdb &lt;dll/exe path&gt; [/pdb &lt;path&gt;] [/out &lt;path&gt;] [/extract]
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly, the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly,
the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to
Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/srcsvrvar &lt;name&gt;=&lt;value&gt; Add specified variable to srcsvr stream. Only applicable
when converting to Windows PDB and /sourcelink is not
specified.
/extract and /pdb are mutually exclusive.
</target>
@ -80,6 +90,11 @@
<target state="new">Invalid PDB path in Debug Directory (file '{0}').</target>
<note />
</trans-unit>
<trans-unit id="CantSpecifyBothSrcSvrVariableAndSourcelinkOptions">
<source>Can't specify both /srcsvrvar and /sourcelink options.</source>
<target state="new">Can't specify both /srcsvrvar and /sourcelink options.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

Просмотреть файл

@ -55,21 +55,31 @@
<trans-unit id="Pdb2PdbUsage">
<source>Usage: Pdb2Pdb &lt;dll/exe path&gt; [/pdb &lt;path&gt;] [/out &lt;path&gt;] [/extract]
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly, the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly,
the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to
Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/srcsvrvar &lt;name&gt;=&lt;value&gt; Add specified variable to srcsvr stream. Only applicable
when converting to Windows PDB and /sourcelink is not
specified.
/extract and /pdb are mutually exclusive.
</source>
<target state="new">Usage: Pdb2Pdb &lt;dll/exe path&gt; [/pdb &lt;path&gt;] [/out &lt;path&gt;] [/extract]
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly, the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/pdb &lt;path&gt; Path to the PDB to convert. If not specified explicitly,
the PDB referenced by or embedded in the DLL/EXE is used.
/out &lt;path&gt; Output PDB path.
/extract Extract PDB embedded in the DLL/EXE.
/sourcelink Preserve Source Link when converting from Portable PDB to
Windows PDB, instead of converting to srcsrv format.
/verbose Print detailed diagnostics.
/srcsvrvar &lt;name&gt;=&lt;value&gt; Add specified variable to srcsvr stream. Only applicable
when converting to Windows PDB and /sourcelink is not
specified.
/extract and /pdb are mutually exclusive.
</target>
@ -80,6 +90,11 @@
<target state="new">Invalid PDB path in Debug Directory (file '{0}').</target>
<note />
</trans-unit>
<trans-unit id="CantSpecifyBothSrcSvrVariableAndSourcelinkOptions">
<source>Can't specify both /srcsvrvar and /sourcelink options.</source>
<target state="new">Can't specify both /srcsvrvar and /sourcelink options.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>