.NET Core

时间:2016-03-11 11:30:59

标签: c# .net build f#

我有一个主要用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 formatdependencies功能似乎无法解决此类问题。如果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嵌套构建树吗?

1 个答案:

答案 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

就像我说的那样,不确定这是否会起作用或产生一些其他微妙的不一致。尝试一下。