【发布时间】:2020-11-03 23:18:56
【问题描述】:
我刚刚在 F# 中创建了一个简单的类库,其中包含以下 fsproj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Compile Include="Dto.fs" />
</ItemGroup>
</Project>
现在我想在具有以下 csproj 的 C# 项目中引用它:
<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# 类库中的类型,但确实收到以下编译器错误:
Controllers/ProviderController.cs(4,53):错误 CS0234:命名空间“App.Api”中不存在类型或命名空间名称“Types”(您是否缺少程序集引用?) [/app/src /更多路径 Api/File.csproj] Controllers/ProviderController.cs(22,28):错误 CS0246:找不到类型或命名空间名称“Provider”(您是否缺少 using 指令或程序集引用?) [/homepath.csproj]
实际的控制器是这样的:
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# 中定义的类型没有任何智能感知。如前所述,构建也失败了。在 C# netcoreapp3.1 项目中使用 F# 类型时我缺少什么?
F# 项目中的Dto.fs 文件:
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# 控制台应用程序使用该项目时,我确实遇到了同样的问题。
【问题讨论】:
-
C# --> F# 要求您构建 F# 项目才能在 C# 中“看到”它,至少在 Visual Studio 中是这样。那是你的环境吗?
-
请展示
Dto.fs的样子。 -
@Hostel,添加了 dto.fs 文件。
-
@PhillipCarter,在我想之前我没有遇到任何问题。我正在使用代码。 dotnet build 不应该也构建引用的项目。