[英]Cannot find AssemblyBuilder methods in F# project
我正在嘗試使用 AssemblyBuilder,以便根據https://docs.microsoft.com/en-us/dotnet/api/system.reflection.emit.assemblybuilder?view=netcore-3.0在 F# 中生成程序集. 問題是那里描述的許多方法和屬性都不可用。
編輯:以下代碼在從 F# 交互式運行時有效,但 Visual Studio 仍然抱怨它找不到不同的方法。
open System
open System.Reflection
open System.Reflection.Emit
let generateAssembly (program: CILProgram) (fileName: string) : unit =
let assemblyName = new AssemblyName ("name")
let assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave)
assemblyBuilder.Save("name")
;;
例如, AppDomain.CurrentDomain.DefineDynamicAssembly
、 AssemblyBuilderAccess.RunAndSave
或AssemblyBuilder.Save
不可用,我使用的是其他版本嗎? 這是我的 .fsproj 文件:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
<IsPackable>false</IsPackable>
<GenerateProgramFile>false</GenerateProgramFile>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="nunit" Version="3.12.0" />
<PackageReference Include="NUnit3TestAdapter" Version="3.13.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.2.0" />
</ItemGroup>
<ItemGroup>
<Compile Include="AbstractSyntax.fs" />
<Compile Include="Parser.fs" />
<Compile Include="Lexer.fs" />
<Compile Include="Helpers.fs" />
<Compile Include="TypeChecker.fs" />
<Compile Include="CILCompiler.fs" />
<Compile Include="CILGenerator.fs" />
<Compile Include="Program.fs" />
<Compile Include="ParserTest.fs" />
<Compile Include="TypeCheckerTest.fs" />
</ItemGroup>
<ItemGroup>
<Reference Include="FsLexYacc.Runtime">
<HintPath>..\..\..\source\FsLexYacc\tests\LexAndYaccMiniProject\bin\Debug\net46\FsLexYacc.Runtime.dll</HintPath>
</Reference>
</ItemGroup>
</Project>
<TargetFramework>netcoreapp3.0</TargetFramework>
問題不在於 F#,而在於 .NET Core。 這些方法尚未移植,請參閱.NET Core 中的 AssemblyBuilder.DefineDynamicAssembly 是否有任何替代? .
例如, .NET 4.8 (.NET Framework 的最后一個版本) 支持RunAndSave
。
但.NET Core甚至.NET 5.0 都不支持它。 對此的討論可以追溯到 2015 年, 該提案有信息並提到它沒有被考慮用於 .NET 5.0。 您還可以在Regex.CompileToAssembly
的分辨率中看到它,該分辨率受支持,但奇怪的是,尚未保存程序集。
請注意,您仍然可以使用DefineDynamicAssembly
,但無法保存, 請參閱此處。 如果您可以重寫代碼以使用 Framework,那將解決您的問題。
通過此文檔,不支持 AppDomain.CurrentDomain.DefineDynamicAssembly
替換為AssemblyBuilder.DefineDynamicAssembly
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.