使用dotnet cli一步编译多个dotnet core项目

29
假设有这样的文件夹结构。
SampleApp
        global.json
        Src  
            Web             
                project.json
                Startup.cs
                ...
            Model
                project.json
                Startup.cs
                ...

如何使用dotnet编译这两个项目?(从命令行,而不是在Visual Studio中)

如果您在根目录级别运行dotnet build,则会出现以下错误:

找不到文件.. project.json

我可以看到CLI存储库上有这个未解决的增强功能,但它是从2月2日开始的。

任何脚本都必须考虑依赖项,然后才能盲目调用所有src子文件夹上的dotnet

6个回答

27

dotnet build命令支持使用glob模式。因此,您可以这样做:


dotnet build Src/**/project.json

8
dotnet pack不支持这个功能(对于那些可能会看到这个并希望使用相同技术的人)。 - Poul K. Sørensen
2
已经有一段时间了,新项目模板中没有project.json文件。有任何更新的解决方案吗? - Laurence

4

我使用的是Linux操作系统:

for p in $(find . -name *.csproj); do dotnet build $p; done

3
目前还没有这样的工具。即使是ASP.NET团队使用的工具KoreBuild,也是在每个文件夹中盲目调用dotnet build/pack
好的一点是,dotnet build现在已经足够智能,如果依赖项没有更改,就不会重新编译它们了,所以这不再是一个问题。

好的,你上一条评论让我意识到,如果在上面的例子中web依赖于model,那么你不需要先进入model文件夹来构建它 - 你可以直接在web文件夹中运行dotnet build,它会编译model - wal

3

如果没有 project.json 文件,您也可以在 project.sln 文件上使用命令。

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

同样适用于dotnet test

2
使用GNU Make。我使用它来构建我的项目。您只需要在项目根文件夹中创建一个Makefile即可。您可以在目录中嵌套Makefiles,并拥有一个顶层Makefile运行子目录。然后,为每个“子项目”文件夹设置Makefiles并运行任何命令行工具。使用dotnet core是dotnet。等等... GNU - “GNU不是Unix”那是一个Unix / Linux应用程序...我运行Windows。好消息是你也可以在Windows上操作。我通过我的git-bash安装(git for windows)使用make.exe。您将需要找到cygwin端口的make。(谷歌:“make for git-bash”)然后将其安装到cygwin文件夹下的bin目录中。您也可以直接安装cygwin如果您真的想这样做。
使用Gnu-Make的好处在于它是通用的。由于dotnet core平台无关,每个环境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)

2

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

@echo off
for /D %%d in (*) do (
    cd %%d  
    cd  
    dotnet restore
    dotnet build
    cd ..
)
exit /b

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接