首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >netcoreapp3.1中的C#项目引用F#类库

netcoreapp3.1中的C#项目引用F#类库
EN

Stack Overflow用户
提问于 2020-11-03 23:18:56
回答 1查看 199关注 0票数 2

我刚刚在F#中创建了一个简单的类库,它有以下fsproj

代码语言:javascript
复制
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Compile Include="Dto.fs" />
  </ItemGroup>

</Project>

现在,我想在C#项目中引用这一点,该项目具有以下csproj

代码语言:javascript
复制
<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning" Version="4.2.0" />
    <PackageReference Include="Serilog" Version="2.10.0" />
    <PackageReference Include="Serilog.AspNetCore" Version="3.4.0" />
    <PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" />
    <PackageReference Include="Serilog.Sinks.Splunk" Version="3.6.0" />
    <PackageReference Include="Swashbuckle.AspNetCore" Version="5.6.3" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\<path>\<to>\<file>.fsproj" />
  </ItemGroup>

</Project>

在控制器中,我现在尝试引用F#类库中的类型,但我确实得到了以下编译器错误:

控制器/ProviderController.cs(4,53):错误CS0234:命名空间'App.Api‘中不存在类型或名称空间名称’App.Api‘(您缺少程序集引用吗?)/app/src/其他路径Api/File.csproj控制器/ProviderController.cs(22,28):错误CS0246:无法找到类型或命名空间名称'Provider’(您是否缺少了使用指令或程序集引用的/homepath.csproj?)

实际控制器如下所示:

代码语言:javascript
复制
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using NamespaceTo.Types.Dto;

namespace Api.Controllers
{
    [ApiController]
    [Route("[controller]")]
    [ApiVersion("1.0")]
    public class ProviderController : ControllerBase
    {
        private readonly ILogger<ProviderController> _logger;

        public ProviderController(ILogger<ProviderController> logger)
        {
            _logger = logger;
        }

        [HttpGet]
        public IEnumerable<Provider> Get()
        {
            return null;
        }
    }
}

F#项目似乎根本没有被识别,因为我没有得到任何关于在F#中定义的类型的intellisense。如前所述,构建也失败了。在F# netcoreapp3.1项目中使用C#类型有什么遗漏?

Dto.fs项目中的F#文件:

代码语言:javascript
复制
module Api.Types.Dto
open System

type Provider = {
    Id: string
    Name: string
    Logo: string
}

type Text = {
    Short: string
    Long: string
}

type ProductTexts = {
    Default: Text
    Alternatives: Text
}

type ProductAlternative = {
    Id: string
    IsDefault: bool
    Priority: int
    ContractLength: int
    MonthlyPrice: float
    EffectiveRate: float
    StartupFee: float
    MonthlyFee: float
    TotalPrice: float
    TotalCost: float
}

type Product = {
    Id: string
    Name: string
    Priority: int
    Provider: Provider
    Texts: ProductTexts
    MinimumAmount: float
    MaximumAmount: float
    Alternatives: ProductAlternative list
}

type ProductResponse = {
    Updated: DateTime
    ArticleId: string
    Price: float
    Currency: string
    OperatingChain: string
}

type PaymentOption = {
    ArticleIds: string list
    Product: Product
}

type PaymentOptionsResponse = PaymentOption list

更新:

当我尝试使用来自另一个F#控制台应用程序的项目时,我也遇到了同样的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-04 09:41:55

正如斯拉克所指出的那样:

最初需要考虑的是,Api.Types.Dto是顶级的module,而不是namespace --这是在隐式地使用名称空间Api.Types并将Dto模块添加到其中。

因此,C#将Dto视为一种类型,而不是可以打开的命名空间--而内部类型(如Provider )对C#来说只是嵌套类型。

这里有两个解析路径:第一个是打开名称空间:using Api.Types,然后点入嵌套类型:Dto.Provider

第二种是using static Api.Types.Dto

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64672130

复制
相关文章

相似问题

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