小编and*_*rew的帖子

从已编译程序集外部存在的对象将值设置为已编译程序集中的字段

我目前正在将旧应用程序从 .Net Framework 4.5.2 升级到 .Net 6。该应用程序当前通过 CodeDom 编译代码,然后执行。在 .Net 6 中,不再支持通过 CodeDom 进行编译,因此我一直在转换代码以改为使用 Microsoft.CodeAnalysis (Roslyn)。我已经成功地在 .Net 6 中编译了代码并消除了所有错误和警告。

我无法弄清楚如何从编译代码外部存在的对象为编译代码中的字段设置值。

在CodeDom中,您可以使用System.Reflection.FieldInfo和compiledCode.GetType("Script").GetField("app")来获取字段。然后使用.SetValue 设置值。到目前为止,我还没有找到 Roslyn 的等效命令。

下面是一个有效的 CodeDom 代码示例。“app”是要设置值的字段。

'CodeDom example
'Add referenced assemblies
Dim compileParams As System.CodeDom.Compiler.CompilerParameters = New CompilerParameters
compileParams.ReferencedAssemblies.Add("system.dll")
compileParams.ReferencedAssemblies.Add("system.xml.dll")
compileParams.ReferencedAssemblies.Add("system.data.dll")
compileParams.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll")
compileParams.ReferencedAssemblies.Add("Microsoft.VisualBasic.Compatibility.dll")
compileParams.ReferencedAssemblies.Add("mscorlib.dll")
compileParams.ReferencedAssemblies.Add(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly.Location) & "\CustomDLL.dll")
compileParams.CompilerOptions = "/t:library"
compileParams.GenerateInMemory = True
compileParams.GenerateExecutable = False

'Script example. Formatted for readability.
Dim sb As StringBuilder = New StringBuilder
sb.Append(
"Option Strict Off
 Option Explicit On
 Imports System
 Imports System.XML …
Run Code Online (Sandbox Code Playgroud)

vb.net codedom roslyn roslyn-code-analysis .net-6.0

5
推荐指数
1
解决办法
61
查看次数

标签 统计

.net-6.0 ×1

codedom ×1

roslyn ×1

roslyn-code-analysis ×1

vb.net ×1