28

假设这个文件夹结构

SampleApp
        global.json
        Src  
            Web             
                project.json
                Startup.cs
                ...
            Model
                project.json
                Startup.cs
                ...

如何使用编译两个项目dotnet?(来自命令行,不在 Visual Studio 中)

如果你dotnet build在根文件夹级别运行,你会得到

找不到文件.. project.json

我可以看到 CLI 存储库有这个出色的增强,但那是从 2 月 2 日开始的。

dotnet在盲目地调用所有src子文件夹之前,任何脚本都必须考虑依赖关系。

4

6 回答 6

27

dotnet build命令接受全局模式。所以你可以这样做:

dotnet build Src/**/project.json
于 2016-07-07T01:02:00.473 回答
3

还没有这样的工具。甚至ASP.NET 团队使用的工具KoreBuilddotnet build/pack也盲目地进入每个文件夹并调用.

好消息是它dotnet build现在足够聪明,如果依赖项没有改变,就不会重新编译它们,所以这不再是问题了。

于 2016-04-12T22:45:16.437 回答
2

我有类似的要求。这是我的解决方法:

@echo off
for /D %%d in (*) do (
    cd %%d  
    cd  
    dotnet restore
    dotnet build
    cd ..
)
exit /b
于 2016-06-19T23:17:07.187 回答
2

使用 GNU Make。我用它来构建我的项目。您所要做的就是在项目根文件夹中创建一个 Makefile。您可以将 Makefile 嵌套在目录中,并拥有一个运行子目录的顶级 Makefile。然后为每个“子项目”文件夹设置 Makefile 并运行任何命令行工具。与 dotnet 核心是 dotnet 。

等等……GNU——“GNU 不是 Unix”,它是一个 Unix/Linux 应用程序……我运行 Windows。好消息是你可以在 Windows 中做到这一点。我正在通过我的 git-bash 安装(Windows 的 git)使用 make.exe。你将不得不去寻找 make 的 cygwin 端口。(google: "make for git-bash") 然后把它安装到你的 cygwin 文件夹下的 bin 目录下。如果你真的想要,你也可以只安装 cygwin。

使用 Gnu-Make 的好处是它是通用的。由于 dotnet 核心与平台无关,因此 Mac/FreeBSD/Linux 的每个环境都可能已经安装了“make”。将它添加到您的 Windows 机器和项目对我来说很有意义。由于您的项目现在可以由每个人以相同的方式构建。

我的一些项目需要使用 dockerfiles 构建 docker 容器,或者 snap 包,部署到测试等...... Make(请原谅双关语)使它变得容易。

这是一个简单项目 Makefile 的示例。单独运行'make'就像说'make all'你可以设置一个像'cd ./subdir; 这样的命令。make' 作为您的 .phoney 指令之一。(谷歌:“Makefile 文档”)

project_drive?=/c/prj
nuget_repo_name?=Local_Nuget_Packages
local_nuget_dir?=$(project_drive)/$(nuget_repo_name)

RELEASE_VERSION:= `grep "<Version>" *.csproj | cut -d '>' -f 2 | cut -d '<' -f 1`

.PHONEY: clean release test doc nuget install debug_nuget debug_install

all: doc MSBuild

test:
  ./test.sh

MSBuild: 
   dotnet build

clean:
   dotnet clean; dotnet restore

release: 
   dotnet build -c Release

doc:
   doxygen ./Doxyfile.config

nuget: release
   dotnet pack -c Release

install: 
   cp ./bin/Release/*.$(RELEASE_VERSION).nupkg $(local_nuget_dir)

debug_nuget: MSBuild
   dotnet pack 

debug_install: 
   cp ./bin/debug/*.$(RELEASE_VERSION).nupkg $(local_nuget_dir)
于 2018-01-22T21:39:50.370 回答
0

缺少的是,project.sln如果您没有,您也可以对文件使用命令project.json

dotnet build src/**/project.json
-- or --
dotnet build src/project.sln

同样适用dotnet test

于 2021-06-17T07:18:23.980 回答
0

对于 linux 我正在使用:

for p in $(find . -name *.csproj); do dotnet build $p; done
于 2022-01-10T11:01:58.970 回答