假设这个文件夹结构
SampleApp
global.json
Src
Web
project.json
Startup.cs
...
Model
project.json
Startup.cs
...
如何使用dotnet
编译两个项目? (来自命令行,而不是视觉工作室)
如果您在根文件夹级别运行dotnet build
,则
无法找到文件.. project.json
我可以看到CLI repo上有this outstanding enhancement但是来自Feb2。
在盲目地调用所有dotnet
子文件夹上的src
之前,任何脚本都必须考虑依赖关系。
答案 0 :(得分:23)
dotnet build
命令接受glob模式。所以你可以这样做:
dotnet build Src/**/project.json
答案 1 :(得分:3)
还没有这样的工具。即使是KoreBuild,ASP.NET团队使用的工具,也会盲目地在每个文件夹中调用dotnet build/pack
。
好消息是dotnet build
现在足够智能,如果它们没有改变就不会重新编译依赖项,所以这不再是问题了。
答案 2 :(得分:3)
使用GNU Make。我用它来构建我的项目。您只需在项目根文件夹中创建一个Makefile。您可以将Makefile嵌套在目录中,并具有运行子目录的顶级Makefile。然后为每个“子项目”文件夹设置Makefile并运行任何comandline工具。与dotnet核心是dotnet。
等等...... GNU - “GNU不是Unix”,这是一个Unix / Linux应用程序......我运行windows。好消息是,你可以在Windows中做到这一点。我通过我的git-bash安装使用make.exe(git for windows)。你必须找到make的cygwin端口。 (google:“make for git-bash”)然后将其安装到cygwin文件夹下的bin目录中。如果你真的想要,你也可以安装cygwin。
使用Gnu-Make的好处是它是通用的。由于dotnet核心与平台无关,因此Mac / FreeBSD / Linux的每个环境都很可能已经“安装”。将它添加到您的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)
答案 3 :(得分:1)
我有类似的要求。这是我的解决方法:
@echo off
for /D %%d in (*) do (
cd %%d
cd
dotnet restore
dotnet build
cd ..
)
exit /b
答案 4 :(得分:0)
缺少的是,如果您没有 project.sln
project.json
文件上使用这些命令
dotnet build src/**/project.json
-- or --
dotnet build src/project.sln
同样适用于 dotnet test