首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在调试模式下使用Add-Type函数编译C#代码

如何在调试模式下使用Add-Type函数编译C#代码
EN

Stack Overflow用户
提问于 2018-01-25 23:27:02
回答 1查看 395关注 0票数 1

这就是我正在做的。

代码语言:javascript
复制
$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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-25 23:43:53

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

代码语言:javascript
复制
$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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48446394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档