簡體   English   中英

在 F# 項目中找不到 AssemblyBuilder 方法

[英]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.DefineDynamicAssemblyAssemblyBuilderAccess.RunAndSaveAssemblyBuilder.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM