【问题标题】:How to compile C# code with Add-Type function in DEBUG mode如何在调试模式下使用 Add-Type 函数编译 C# 代码
【发布时间】:2018-01-25 23:43:52
【问题描述】:

这就是我正在做的。

$ReferencedAssemblies = 
@(
    'System.Data.DataSetExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
    'Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
    'System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
    'System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
    'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
)

$TypeDefinition = Get-Content -Path '$PSScriptRoot\Program.cs' -Raw
Add-Type -TypeDefinition $TypeDefinition -ReferencedAssemblies $ReferencedAssemblies

但问题是我无法调试以这种方式编译的代码。

【问题讨论】:

  • 使用-CompilerParameters。 (类似于this,但反过来。)
  • 文档 (docs.microsoft.com/en-us/powershell/module/…) 说“您不能在同一命令中使用 CompilerParameters 和 ReferencedAssemblies 参数”。 CompilerParameters 具有 ReferencedAssemblies 的属性,但它不兼容。
  • 我不确定您所说的“不兼容”是什么意思。
  • 我引用了示例中指定的程序集。

标签: powershell


【解决方案1】:

Add-Type 命令具有解析-ReferencedAssemblies 参数指定的程序集的内部方法。我们可以通过反射来使用它。

$addTypeCommand = Get-Command -Name 'Add-Type'
$addTypeCommandInstance = [Activator]::CreateInstance($addTypeCommand.ImplementingType)
$resolveAssemblyMethod = $addTypeCommand.ImplementingType.GetMethod('ResolveReferencedAssembly', [Reflection.BindingFlags]'NonPublic, Instance')
$compilerParameters = New-Object -TypeName System.CodeDom.Compiler.CompilerParameters
$compilerParameters.CompilerOptions = '/debug-'

foreach ($reference in $ReferencedAssemblies)
{
    $resolvedAssembly = $resolveAssemblyMethod.Invoke($addTypeCommandInstance, $reference)
    $compilerParameters.ReferencedAssemblies.Add($resolvedAssembly)
}

$compilerParameters.IncludeDebugInformation = $true
Add-Type -TypeDefinition $TypeDefinition -CompilerParameters $compilerParameters

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 2014-04-06
    相关资源
    最近更新 更多