gpt4 book ai didi

c# - .NET Core 的混合语言和子项目

转载 作者:太空狗 更新时间:2023-10-29 20:38:46 24 4
gpt4 key购买 nike

我有一个主要用 F# 编写的项目,该项目使用用 C# 编写的组件。它在 Windows 上使用 Visual Studio 构建良好,在 Linux 和 OS X 上使用 Makefiles 构建良好。

我正在尝试将其移植到 .NET Core ,它有自己的构建系统,dotnet build。我很难复制其下现有构建系统的嵌套项目处理。也就是说,我希望它构建 C# DLL,然后构建 F# 可执行项目并将其链接到它。

我尝试不使用 DLL,但每个 project.json 文件显然只能引用一种语言的文件。如果您尝试将 C# 文件添加到 F# 项目文件的 compileFiles 列表,dotnet build 会提示无法编译 Foo.cs 使用 fsc

我的 C# 项目位于 F# 项目的子目录中,以其实现的命名空间命名,因此我在该目录中创建了一个新的 .NET Core C# DLL 项目,但现在我看不到如何绑定(bind)这两个项目在一起。

project file format依赖性 特性似乎并没有解决这类问题。如果 DLL 项目位于 Foo/Bar 中并且它实现了 Foo.Bar 命名空间,则 dotnet restore 无法使用此依赖项引用找到它:

"dependencies": {
...other stuff...
"Foo.Bar": "*"
},

显然它只能在 NuGet 中搜索依赖项。我不想纯粹将组件发送到 NuGet,以便 dotnet restore 可以找到它。

我不想使用 bin syntax引用构建的 DLL,因为这需要 2 遍构建和第三个 project.json 文件。 (一个用于 F# 项目,一个用于 C# 项目,一个用于引用构建的 DLL。)即便如此,我仍然看不出如何将第一个项目与第三个项目联系起来。

肯定有一种简单的方法可以使用 dotnet build 构建嵌套构建树吗?

最佳答案

您的问题是一个项目嵌套在另一个项目之下。如果将它们并排放置(例如,/src/RootProj/src/Foo.Bar),您应该能够引用 Foo.Bar 项目:

"dependencies": { 
"Foo.Bar": "*"
}

dnx 项目系统很糟糕,咳咳,深受 NodeJS 的影响,因此依赖于目录结构来推断某些属性。

项目应该位于根目录的子文件夹中,每个项目都应该有自己的 project.json 文件。 “root”本身来自位于文件夹树上方的 global.json 文件。该工具从“当前”文件夹向上遍历文件夹,直到找到 global.json。包含 global.json 的文件夹随后被视为“所有根中的根”。如果您只是从模板创建解决方案,您将得到如下内容:

/solution
global.json
/src
/project1
project.json
File.cs
/project2
project.json
File.cs
/tests
/testproject1
project.json
File.cs

当您位于任何子文件夹中时,该工具将通过向上遍历文件夹来了解解决方案根目录。类似于 git 的工作方式。

如果您查看 global.json 文件,您可能会看到如下内容:

{
"projects": ["src", "tests"]
}

这意味着 dnx 工具将期望在 /src/tests 下找到项目,仅此而已。

现在,据此,我可以推断出另一种可能的解决方案。我自己还没有尝试过,但它可能 会起作用。您可以将它的路径添加到 global.json 中的 projects,而不是将您的 Foo.Bar 项目移出到 /src :

{
"projects": ["src", "tests", "src/Project1/Foo.Bar"]
}

就像我说的,不确定这是否有效或造成其他一些微妙的不一致。试试吧。

关于c# - .NET Core 的混合语言和子项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35939172/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com