我有一个主要用F#编写的项目,它使用用C#编写的组件。它可以在Windows上使用Visual Studio构建,在Linux和OS X上使用Makefile构建。
我正在尝试将其移植到.NET Core,它有自己的构建系统dotnet build
。我很难复制我现有构建系统的嵌套项目处理。也就是说,我希望它构建C#DLL,然后构建F#可执行项目并将其链接到它。
我尝试不使用DLL,但每个project.json
文件显然只能用一种语言引用文件。如果您尝试将C#文件添加到F#项目文件的compileFiles
列表中,dotnet build
会抱怨它无法使用Foo.cs
编译fsc
。
我的C#项目位于F#项目的子目录中,以它实现的命名空间命名,所以我在该目录中创建了一个新的.NET Core C#DLL项目,但现在我看不到如何绑定这两个项目在一起。
project file format的dependencies
功能似乎无法解决此类问题。如果DLL项目位于Foo/Bar
并且它实现了Foo.Bar
命名空间,则dotnet restore
无法使用此依赖项引用找到它:
"dependencies": {
...other stuff...
"Foo.Bar": "*"
},
显然它只能搜索NuGet的依赖项。我不想纯粹将组件发送到NuGet,以便dotnet restore
可以找到它。
我不想使用bin
syntax来引用构建的DLL,因为这需要2遍构建和第3 project.json
个文件。 (一个用于F#项目,一个用于C#项目,另一个用于引用构建的DLL。)即便如此,我仍然没有看到如何将第一个项目与第三个项目联系起来。
当然有一种简单的方法可以使用dotnet build
嵌套构建树吗?
答案 0 :(得分:1)
您的问题是一个项目嵌套在另一个项目下。如果您将它们并排放置(例如/src/RootProj
和/src/Foo.Bar
),您应该能够使用以下内容引用Foo.Bar
项目:
"dependencies": {
"Foo.Bar": "*"
}
dnx项目系统是由NodeJS严重影响的,ahem,,因此依赖于目录结构来推断某些属性。
项目预计位于根目录的子文件夹中,每个项目都应有自己的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
下找到项目。
现在,我可以推断出另一个可能的解决方案。 Haven没有自己尝试过,但只是可能工作。您可以将Foo.Bar
项目的路径添加到/src
中的projects
,而不是将global.json
项目移至{
"projects": ["src", "tests", "src/Project1/Foo.Bar"]
}
:
SCNNodes
就像我说的那样,不确定这是否会起作用或产生一些其他微妙的不一致。尝试一下。