Тип добавления Powershell подавляет создание.pdb при компиляции.dll (C#)
Я создаю C# hello world DLL и собираю ее с помощью встроенной команды powershell Add-Type. При этом он создает нежелательный файл отладки.pdb в каталоге с.dll.
Как подавить создание этого файла.pdb при использовании команды Add-Type. Я знаю, что в Visual Studio мы можем отключить это с помощью параметра, но не могу найти правильный синтаксис строки cmd.
Вот пример кода powershell. Запустите из консоли, и он создаст DLL на C:\ вместе с.pdb
Clear-Host
Add-Type -OutputAssembly C:\Knuckle.dll @"
using System;
namespace Knuckle
{
public class Dragger
{
public static void Main()
{
Console.WriteLine("Knuckle-Dragger was Here!");
}
}
}
"@
[Void][Reflection.Assembly]::LoadFile("C:\Knuckle.dll")
[Knuckle.Dragger]::Main()
Результат
PS C:\Users\Knuckle-Dragger> [Knuckle.Dragger]::Main()
Knuckle-Dragger was Here!
2 ответа
Файлы PDB выводятся, когда компилятор C# компилирует сборку.NET в режиме отладки. Я не знаю почему Add-Type
будет компилироваться с отладочным поведением по умолчанию, так как это не то, что я сам заметил. Однако, если вы хотите явно подавить это поведение, вы можете указать параметры компилятора, в частности /debug-
(обратите внимание на знак минус в конце), для компилятора C#.
Чтобы указать параметры компилятора, вы должны создать экземпляр System.CodeDom.Compiler.CompilerParameters
.NET класс, укажите OutputAssembly
а также CompilerOptions
свойства, а затем передать CompilerParameters
возражать в -CompilerParameters
параметр Add-Type
Командлет.
Вот документация MSDN по /debug
параметр компилятора и документация для CompilerParameters
.NET класс.
Примечание: вы не можете использовать -OutputAssembly
параметр на Add-Type
рядом с -CompilerParameters
параметр. Поэтому вам нужно будет указать OutputAssembly
собственность на CompilerParameters
объект, как обсуждалось ранее. Пример кода ниже показывает, как это сделать.
mkdir -Path c:\test;
$Code = @"
using System;
namespace test { };
"@
# 1. Create the compiler parameters
$CompilerParameters = New-Object -TypeName System.CodeDom.Compiler.CompilerParameters;
# 2. Set the compiler options
$CompilerParameters.CompilerOptions = '/debug-';
# 3. Set the output assembly path
$CompilerParameters.OutputAssembly = 'c:\test\Knuckle.dll';
# 4. Call Add-Type, and specify the -CompilerParameters parameter
Add-Type -CompilerParameters $CompilerParameters -TypeDefinition $Code;
Вероятно, это вызвано параметрами компилятора, установленными в переменной среды, поскольку вы открыли приглашение с помощью оболочки SDK CMD. Он загружает стандартные параметры в переменную окружения.
Если это причина, просто очистите переменную в PowerShell $env:compiler_options=''
Это не повлияет на оболочку только на сеанс.